The purpose of this analysis is to explore the variability on the performance of the ODIN during its deployment in Christchurch.
The unit ODIN_01 was deployed at Coles place between the 15\(^{th}\) of May and the 3\(^{rd}\) of June 2014 with a pause between the 22\(^{nd}\) and the 24\(^{th}\) of May.
odin_01 <- read.table("~/data/ODIN_data/christchurch/odin_01.data",
header=T, quote="")
#force GMT as the time zone to avoid openair issues with daylight saving switches
#The actual time zone is 'NZST'
odin_01$date=as.POSIXct(paste(odin_01$Date,odin_01$Time),tz='GMT')
odin_01$Time<-NULL
odin_01$Date<-NULL
odin_01$Battery<-5*odin_01$Battery/1024
The data from the Coles Place site was obtained from Environment Canterbury through Teresa Aberkane.
ecan_data <- read.delim("~/data/ODIN_data/christchurch/ecan_data.data",
quote="")
ecan_data$date<-as.POSIXct(ecan_data$date,tz='GMT')
ECan’s data was provided as 10 minute values while ODIN reports every 1 minute so before merging the data, the timebase must be homogenized
odin_01.10min<-timeAverage(odin_01,avg.time='10 min')
all_merged.10min<-merge(odin_01.10min,ecan_data,by='date',all=TRUE)
names(all_merged.10min)<-c('date','Dust.01','Humidity.01','Temperature.01',
'Battery.01', 'CO','PM10_fdms','PM2.5_fdms',
'Temperature_1m','Temperature_10m',
'BC','uvBC')
all_merged.1hr<-timeAverage(all_merged.10min,avg.time='1 hour')
lag_test=ccf(all_merged.10min$Temperature.01,
all_merged.10min$Temperature_1m,
na.action=na.pass,
lag.max=100,
type='correlation',
ylab='Correlation',
main='Temperature correlation as function of clock lag')
odin01_lag=lag_test$lag[which.max(lag_test$acf)]
ECan’s record is behind by -70 minutes with respect to ODIN data.
The correction was applied to the ODIN data as follows:
odin_01$date=odin_01$date-odin01_lag*10*60
odin_01.10min<-timeAverage(odin_01,avg.time='10 min')
all_merged.10min<-merge(odin_01.10min,ecan_data,by='date',all=TRUE)
names(all_merged.10min)<-c('date','Dust.01','Humidity.01','Temperature.01',
'Battery.01', 'CO','PM10_fdms','PM2.5_fdms',
'Temperature_1m','Temperature_10m',
'BC','uvBC')
all_merged.1hr<-timeAverage(all_merged.10min,avg.time='1 hour')
lag_test=ccf(all_merged.10min$Temperature.01,
all_merged.10min$Temperature_1m,
na.action=na.pass,
lag.max=100,
type='correlation',
ylab='Correlation',
main='Temperature correlation as function of clock lag')
With ECan’s PM10 data available, a more accurate calibration can be applied to the raw Dust signal from ODIN.
According to previous analyses, it is expected that the response of the ODIN depends on the ambient temperature and relative humidity. In this analysis, a linear relationship is proposed: \(Dust_{calibrated}=A*Dust_{raw}+B*Temperature_{ODIN}+C*RH_{ODIN}+D\)
The following analysis focuses on evaluating the variability of the parameters \(A\), \(B\), \(C\) and \(D\) with time of day with the objective of determining the stability of these coefficients and their potential change in future deployments.
summary(odin1.lm.full.10min.pm10<-
lm(data=all_merged.10min,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = all_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -103.69 -9.66 -1.60 8.42 69.65
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -255.8234 6.1398 -41.7 <2e-16 ***
## Dust.01 0.8412 0.0126 66.5 <2e-16 ***
## Temperature.01 -5.1293 0.0682 -75.2 <2e-16 ***
## Humidity.01 -0.9565 0.0337 -28.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.8 on 2487 degrees of freedom
## (389 observations deleted due to missingness)
## Multiple R-squared: 0.753, Adjusted R-squared: 0.753
## F-statistic: 2.53e+03 on 3 and 2487 DF, p-value: <2e-16
summary(odin1.lm.full.10min.pm2.5<-
lm(data=all_merged.10min,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = all_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -93.85 -8.34 -1.38 7.78 65.84
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -235.5698 5.4716 -43.0 <2e-16 ***
## Dust.01 0.7940 0.0113 70.5 <2e-16 ***
## Temperature.01 -5.2233 0.0608 -85.9 <2e-16 ***
## Humidity.01 -1.0309 0.0300 -34.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.1 on 2487 degrees of freedom
## (389 observations deleted due to missingness)
## Multiple R-squared: 0.791, Adjusted R-squared: 0.791
## F-statistic: 3.14e+03 on 3 and 2487 DF, p-value: <2e-16
summary(odin1.lm.full.1hr.pm10<-
lm(data=all_merged.1hr,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = all_merged.1hr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -39.79 -8.75 -1.03 7.65 61.07
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -297.2793 14.0178 -21.2 <2e-16 ***
## Dust.01 0.9370 0.0290 32.3 <2e-16 ***
## Temperature.01 -5.3735 0.1496 -35.9 <2e-16 ***
## Humidity.01 -0.9770 0.0736 -13.3 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.9 on 413 degrees of freedom
## (64 observations deleted due to missingness)
## Multiple R-squared: 0.807, Adjusted R-squared: 0.806
## F-statistic: 576 on 3 and 413 DF, p-value: <2e-16
summary(odin1.lm.full.1hr.pm2.5<-
lm(data=all_merged.1hr,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = all_merged.1hr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -33.62 -7.78 -0.62 6.86 38.15
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -274.3705 12.2731 -22.4 <2e-16 ***
## Dust.01 0.8839 0.0254 34.8 <2e-16 ***
## Temperature.01 -5.4549 0.1310 -41.6 <2e-16 ***
## Humidity.01 -1.0515 0.0644 -16.3 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.2 on 413 degrees of freedom
## (64 observations deleted due to missingness)
## Multiple R-squared: 0.843, Adjusted R-squared: 0.841
## F-statistic: 737 on 3 and 413 DF, p-value: <2e-16
daytime_merged.10min<-selectByDate(all_merged.10min,hour=9:18)
summary(odin1.lm.daytime.10min.pm10<-
lm(data=daytime_merged.10min,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = daytime_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.92 -8.86 -2.08 8.42 56.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -113.2768 10.1974 -11.11 < 2e-16 ***
## Dust.01 0.3956 0.0276 14.33 < 2e-16 ***
## Temperature.01 -2.5804 0.1738 -14.85 < 2e-16 ***
## Humidity.01 -0.2725 0.0574 -4.75 2.3e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.2 on 1049 degrees of freedom
## (147 observations deleted due to missingness)
## Multiple R-squared: 0.305, Adjusted R-squared: 0.303
## F-statistic: 153 on 3 and 1049 DF, p-value: <2e-16
summary(odin1.lm.daytime.10min.pm2.5<-
lm(data=daytime_merged.10min,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = daytime_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.35 -7.05 -2.77 4.86 44.85
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -73.2088 8.1294 -9.01 < 2e-16 ***
## Dust.01 0.2699 0.0220 12.26 < 2e-16 ***
## Temperature.01 -1.9764 0.1385 -14.27 < 2e-16 ***
## Humidity.01 -0.2299 0.0457 -5.03 5.9e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.6 on 1049 degrees of freedom
## (147 observations deleted due to missingness)
## Multiple R-squared: 0.286, Adjusted R-squared: 0.284
## F-statistic: 140 on 3 and 1049 DF, p-value: <2e-16
daytime_merged.1hr<-selectByDate(all_merged.1hr,hour=9:18)
summary(odin1.lm.daytime.1hr.pm10<-
lm(data=daytime_merged.1hr,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = daytime_merged.1hr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -25.13 -8.52 -2.48 8.60 44.86
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -123.8911 25.4672 -4.86 2.6e-06 ***
## Dust.01 0.4307 0.0699 6.16 5.0e-09 ***
## Temperature.01 -2.7975 0.4380 -6.39 1.5e-09 ***
## Humidity.01 -0.3349 0.1428 -2.34 0.02 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.7 on 173 degrees of freedom
## (23 observations deleted due to missingness)
## Multiple R-squared: 0.321, Adjusted R-squared: 0.309
## F-statistic: 27.2 on 3 and 173 DF, p-value: 1.81e-14
summary(odin1.lm.daytime.1hr.pm2.5<-
lm(data=daytime_merged.1hr,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = daytime_merged.1hr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.56 -6.97 -2.36 4.81 34.82
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -79.6844 20.3540 -3.91 0.00013 ***
## Dust.01 0.2916 0.0559 5.22 5.2e-07 ***
## Temperature.01 -2.1080 0.3501 -6.02 1.0e-08 ***
## Humidity.01 -0.2699 0.1141 -2.36 0.01914 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.2 on 173 degrees of freedom
## (23 observations deleted due to missingness)
## Multiple R-squared: 0.296, Adjusted R-squared: 0.284
## F-statistic: 24.2 on 3 and 173 DF, p-value: 3.84e-13
nighttime_merged.10min<-selectByDate(all_merged.10min,hour=c(0:8,19:23))
summary(odin1.lm.nighttime.10min.pm10<-
lm(data=nighttime_merged.10min,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = nighttime_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -118.69 -9.43 -1.46 8.26 68.74
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -283.7922 8.3063 -34.2 <2e-16 ***
## Dust.01 0.9139 0.0153 59.6 <2e-16 ***
## Temperature.01 -5.3135 0.0876 -60.7 <2e-16 ***
## Humidity.01 -1.0312 0.0540 -19.1 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 16.3 on 1434 degrees of freedom
## (242 observations deleted due to missingness)
## Multiple R-squared: 0.81, Adjusted R-squared: 0.81
## F-statistic: 2.04e+03 on 3 and 1434 DF, p-value: <2e-16
summary(odin1.lm.nighttime.10min.pm2.5<-
lm(data=nighttime_merged.10min,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = nighttime_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -109.78 -7.84 -0.57 7.41 61.40
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -263.0699 7.3477 -35.8 <2e-16 ***
## Dust.01 0.8676 0.0136 64.0 <2e-16 ***
## Temperature.01 -5.4489 0.0775 -70.3 <2e-16 ***
## Humidity.01 -1.1044 0.0478 -23.1 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.4 on 1434 degrees of freedom
## (242 observations deleted due to missingness)
## Multiple R-squared: 0.843, Adjusted R-squared: 0.842
## F-statistic: 2.56e+03 on 3 and 1434 DF, p-value: <2e-16
nighttime_merged.1hr<-selectByDate(all_merged.1hr,hour=c(0:8,19:23))
summary(odin1.lm.nighttime.1hr.pm10<-
lm(data=nighttime_merged.1hr,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = nighttime_merged.1hr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -41.12 -8.59 -0.35 6.25 59.23
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -345.8726 17.6002 -19.65 <2e-16 ***
## Dust.01 1.0424 0.0328 31.81 <2e-16 ***
## Temperature.01 -5.4642 0.1748 -31.25 <2e-16 ***
## Humidity.01 -0.9744 0.1084 -8.99 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.2 on 236 degrees of freedom
## (41 observations deleted due to missingness)
## Multiple R-squared: 0.876, Adjusted R-squared: 0.874
## F-statistic: 554 on 3 and 236 DF, p-value: <2e-16
summary(odin1.lm.nighttime.1hr.pm2.5<-
lm(data=nighttime_merged.1hr,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = nighttime_merged.1hr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -35.99 -7.75 -0.43 6.29 36.28
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -321.5585 14.8559 -21.6 <2e-16 ***
## Dust.01 0.9886 0.0277 35.7 <2e-16 ***
## Temperature.01 -5.5943 0.1476 -37.9 <2e-16 ***
## Humidity.01 -1.0499 0.0915 -11.5 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.2 on 236 degrees of freedom
## (41 observations deleted due to missingness)
## Multiple R-squared: 0.906, Adjusted R-squared: 0.905
## F-statistic: 757 on 3 and 236 DF, p-value: <2e-16
nrecs<-floor(0.25*length(all_merged.10min[,1]))
first_merged.10min<-all_merged.10min[1:nrecs,]
summary(odin1.lm.first.10min.pm10<-
lm(data=first_merged.10min,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = first_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -41.71 -6.42 -1.35 6.43 50.65
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -96.1312 14.0385 -6.85 1.8e-11 ***
## Dust.01 0.4948 0.0228 21.74 < 2e-16 ***
## Temperature.01 -4.6694 0.1247 -37.43 < 2e-16 ***
## Humidity.01 -0.9245 0.0716 -12.92 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.8 on 628 degrees of freedom
## (88 observations deleted due to missingness)
## Multiple R-squared: 0.759, Adjusted R-squared: 0.758
## F-statistic: 659 on 3 and 628 DF, p-value: <2e-16
summary(odin1.lm.first.10min.pm2.5<-
lm(data=first_merged.10min,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = first_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34.17 -6.97 -0.90 5.67 49.98
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -66.8368 12.4315 -5.38 1.1e-07 ***
## Dust.01 0.4506 0.0202 22.35 < 2e-16 ***
## Temperature.01 -4.9831 0.1105 -45.11 < 2e-16 ***
## Humidity.01 -1.1290 0.0634 -17.82 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.3 on 628 degrees of freedom
## (88 observations deleted due to missingness)
## Multiple R-squared: 0.809, Adjusted R-squared: 0.808
## F-statistic: 887 on 3 and 628 DF, p-value: <2e-16
nrecs<-floor(0.75*length(all_merged.10min[,1]))
last_merged.10min<-all_merged.10min[nrecs:(nrecs/0.8),]
summary(odin1.lm.last.10min.pm10<-
lm(data=last_merged.10min,PM10_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM10_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = last_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -56.77 -8.40 -1.35 8.46 56.18
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -327.7114 14.1068 -23.2 <2e-16 ***
## Dust.01 1.0100 0.0231 43.6 <2e-16 ***
## Temperature.01 -5.0575 0.1399 -36.2 <2e-16 ***
## Humidity.01 -1.0037 0.0923 -10.9 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.3 on 537 degrees of freedom
## Multiple R-squared: 0.893, Adjusted R-squared: 0.892
## F-statistic: 1.49e+03 on 3 and 537 DF, p-value: <2e-16
summary(odin1.lm.last.10min.pm2.5<-
lm(data=last_merged.10min,PM2.5_fdms~
Dust.01+Temperature.01+Humidity.01))
##
## Call:
## lm(formula = PM2.5_fdms ~ Dust.01 + Temperature.01 + Humidity.01,
## data = last_merged.10min)
##
## Residuals:
## Min 1Q Median 3Q Max
## -56.15 -7.92 -0.81 7.91 53.89
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -347.3351 13.2435 -26.23 <2e-16 ***
## Dust.01 1.0144 0.0217 46.69 <2e-16 ***
## Temperature.01 -4.7898 0.1313 -36.48 <2e-16 ***
## Humidity.01 -0.7950 0.0867 -9.17 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.4 on 537 degrees of freedom
## Multiple R-squared: 0.903, Adjusted R-squared: 0.902
## F-statistic: 1.66e+03 on 3 and 537 DF, p-value: <2e-16
all_merged.10min$Dust.01.first<-predict(odin1.lm.first.10min.pm2.5,
newdata = all_merged.10min)
all_merged.10min$Dust.01.last<-predict(odin1.lm.last.10min.pm2.5,
newdata = all_merged.10min)
timePlot(all_merged.10min,
pollutant = c('PM2.5_fdms','Dust.01.first','Dust.01.last'),
avg.time='1 hour',group=TRUE,xlab='Date',ylab='Dust',
main='Early and last calibration comparison')