- Here we compare recent temperature data for Penang with a report written in 1885.
- We find that air temperatures are higher now in the afternoon and evening
- Morning air temperatures seem to be about the same now as they were 130 years ago.
- There are sources of bias which may affect the interpretation, but about which we can do nothing.
Last week we received
the email below from Mike Gibby (mikegibby@gmail.com).
“Hi Jason, Doug
I found your website / blog on Temperature
Change in Penang while searching for info on rain, and more especially on rain
gauges in Penang, and wondered if you could give any advice or help?
I'm part of a team who are researching for a
guide to hiking trails in Penang; most of these trails were developed by
farmers for access, but there are some trails that only 'stitch together' the
sites of rain gauges, so they must have been created for data collection in the
old, pre-digital days. An example here would be what is described as 'the
longest trail in Penang', that runs from Telok Bahang to Penang Hill, via Bukit
Laksamana.
So, my question is, can you point me at any
sources of information, quite probably of the colonial era, on the setting up,
siting etc of rain gauges?
In case you don't know it, I attach an article
on the climate in Penang in 1885.
I look forward to hearing from you- best wishes !
Mike Gibby”
We replied to Mike
that we didn’t know anything about the rain gauges or the old-colonial data
collection protocols or policies.
We were, however, very
interested in the 1885 weather report that Mike attached. We’ve since
discovered that the report is available from the Malaysian Branch of the Royal Asiatic
Society. The 1885 report was
compiled by Mr Thomas Irvine Rowell (Principal Civil Medical Officer) in
Singapore in early 1886, about the same time Karl Benz patented the first gasoline-driven automobile and covers Singapore, Penang, ‘Province Wellesley’ and
Malacca.
Given our interest in
Penang’s current and past weather, we decided to
compare recent air temperature measurements with those taken 130 years
previously in 1885 (please see below).
In the figure below
we’ve plotted annual patters for six different Temperature parameters (mean
monthly, maximum monthly, minimum monthly, 9am, 3pm, & 9pm) for both 1885
(blue lines) and the period 2003-2013 (red lines). Monthly mean temperatures are around 28°C. March and April Penang
average temperatures appeared to be a little hotter in 1885 than we’ve seen
more recently, but for the rest of the year air Temperatures were fairly
similar. Recent maximum air temperatures
are higher than they were in 1885 and minimum temperatures lower. We think,
however, that this is probably caused by confounding/bias, ie. in 1885 data
were only collected 3 times daily (9am, 3pm, & 9pm) whereas nowadays we can
make observations, continuously, at 5 minute intervals and publish them
instantly around the world!
Given such problems of
bias, the most meaningful comparisons we can make between these datasets are
those observations taken at 9am, 3pm, and 9pm.
At 9am, temperatures in 1885 were similar to current measurements. In the afternoon (3pm, typically around the
hottest time of day in Penang) and evening (9pm), however, Temperatures are
higher now in all months by about 1°C.
So, in conclusion, if
we assume that the measuring equipment is accurate, current air temperatures are
around 1°C warmer in Penang in the afternoons and evenings, while Mr Rowell would
probably have experienced very similar morning temperatures to us now!
These differences are
less pronounced than we’d expected.
[Note: We’ve not
addressed the potentially serious issue of ‘spatial bias’ and the locations
that weather observations were made by us are not the same as those used by Mr
Rowell].
The R code we used to produce the above line plots is outlined below and the 2003-2013 temperatures were downloaded from the NOAA NCDC's Global Summary of the Day (GSOD).
# Load required libraries library(zoo) library(lubridate) library(plyr) library(ggplot2) library(grid) library(XLConnect) library(reshape2) library(extrafont) # Set working directory setwd("D:/ClimData") # Read table of 1885 Temperatures temp1885<-readWorksheet(loadWorkbook("1885_Temps.xlsx"),sheet=1) temps1885 <- temp1885[c(1,2,10,11,12,13,14,15)] colnames(temps1885) <- c("month","monthf","temp_9am","temp_3pm","temp_9pm","mon_mean","mon_max","mon_min") temps1885$year <- "1885" temps1885_df <- temps1885[c(1,2,9,3:8)] # Read data from NCDC dat<-read.table("2110827004508dat.txt",header=TRUE,fill=TRUE,na.strings=c("*","**","***","****","*****","******","0.00T*****")) colnames(dat)<-tolower(colnames(dat)) # Convert hourly data from UTC to local time zone Sys.setenv(TZ = "UTC") dat$dates <- as.POSIXct(strptime(dat$yr..modahrmn,format="%Y%m%d%H%M")) + 8 * 60 * 60 # Convert temperatures in Degree Fahrenheit to Degree Celcius dat$tempc <- (dat$temp-32) * (5/9) dat$tempc[dat$tempc<=10] <- NA dat$tempc[dat$tempc>=40] <- NA # Extract times and dates and reformat data dat$year <- as.numeric(as.POSIXlt(dat$dates)$year+1900) dat$month <- as.numeric(as.POSIXlt(dat$dates)$mon+1) dat$monthf <- factor(dat$month,levels=as.character(1:12),labels=c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),ordered=TRUE) dat$jday <- yday(dat$dates) dat$hour <- as.numeric(format(strptime(dat$dates, format = "%Y-%m-%d %H:%M"),format = "%H")) dat$minute <- as.numeric(format(strptime(dat$dates, format = "%Y-%m-%d %H:%M"),format = "%M")) dat_01 <- subset(dat, year >= 2003 & year <= 2013 ) dat_02 <- dat_01[c(34,35,36,37,38,39,40,41)] dat_9am <- subset(dat_02,hour == 9 & minute == 0 ) dat_3pm <- subset(dat_02,hour == 15 & minute == 0 ) dat_9pm <- subset(dat_02,hour == 21 & minute == 0 ) dat_9am_melt<- ddply(dat_9am, .(month,monthf), summarize, temp_9am=mean(tempc,na.rm=T)) dat_3pm_melt<- ddply(dat_3pm, .(month,monthf), summarize, temp_3pm=mean(tempc,na.rm=T)) dat_9pm_melt<- ddply(dat_9pm, .(month,monthf), summarize, temp_9pm=mean(tempc,na.rm=T)) dat_hourly <- cbind(dat_9am_melt,dat_3pm_melt[3],dat_9pm_melt[3]) dat_melt<- ddply(dat_01, .(month,monthf), summarize, mon_mean=mean(tempc,na.rm=T),mon_max=max(tempc,na.rm=T),mon_min=min(tempc,na.rm=T)) dat_yrs <- cbind(dat_melt,dat_hourly[-c(1,2)]) dat_yrs$year <- "10 Year Average (2003-2013)" tempcomb <- rbind(dat_yrs,temps1885_df) tempcomb_df <- melt(tempcomb, id.vars=c("month","monthf","year"),variable.name="type",value.name="temps") # Plot data p <- ggplot(data=tempcomb_df, aes(x=monthf,temps, colour=year))+ geom_point(data=subset(tempcomb_df,year!=1885),size=3, alpha=0.5,aes(group=year))+ geom_line(data=subset(tempcomb_df,year!=1885),size=1, alpha=0.5,aes(group=year))+ geom_point(data=subset(tempcomb_df,year==1885),size=3, alpha=0.5,aes(group=year))+ geom_line(data=subset(tempcomb_df,year==1885),size=1, alpha=0.5,aes(group=year))+ geom_text(aes(label=round(temps,1)),hjust=1, vjust=-1,size=2.5)+ facet_wrap(~type)+ xlab("")+ ylab ("Temperature (Degree C)\n") + labs(title="Comparison of year 1885 and 10 year monthly average (2003-2013) temperatures in Penang\n")+ theme(panel.background = element_rect(fill= "transparent"), plot.title = element_text(lineheight=1.2, face="bold",size = 13, colour = "grey20",family="Clear Sans"), panel.border = element_rect(colour = "grey90",fill=F,size=0.5), panel.grid.major.x = element_blank(),panel.grid.minor = element_blank(), axis.line=element_blank(),axis.title.x=element_blank(), axis.text.x=element_text(face="bold",size = 10, colour = "grey20",family="Clear Sans"), axis.title.y=element_text(face="bold",size = 10, colour = "grey20",family="Clear Sans"), axis.text.y=element_text(face="bold",size = 8, colour = "grey20",family="Clear Sans"), legend.title = element_text(colour="black", size=12, face="bold",family="Clear Sans"), legend.text = element_text(colour="black", size=10, family="Clear Sans"), legend.position="bottom", axis.ticks=element_line(size=0.5,colour="grey20"),panel.grid.major.y = element_line(colour="grey90",linetype="longdash",size=1))+ guides(color = guide_legend(title = "Year", title.position = "top")) p # Save plot to png ggsave(p,file="PenangTemps_1885_10yrAverage.png",dpi=500,w=12,h=8,unit="in",type="cairo-png")