# Load libraries
require('openair')
## Loading required package: openair
## Loading required package: lazyeval
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## 
## Loading required package: maps
require('reshape2')
## Loading required package: reshape2
require('ggplot2')
## Loading required package: ggplot2
# load_odin data

## ODIN_02.
odin_02 <- read.table("/home/gustavo/data/CONA/ODIN/deployment/odin_02.data",
                      header=T, quote="")

odin_02$date=as.POSIXct(paste(odin_02$Date,odin_02$Time),tz='NZST')
odin_02$Time<-NULL
odin_02$Date<-NULL
odin_02$Batt<-5*odin_02$Batt/1024
summary(odin_02)
##       Dust              RH            Temp             Batt       
##  Min.   :  0.00   Min.   : 0.0   Min.   :-1.200   Min.   :0.0000  
##  1st Qu.:  9.00   1st Qu.: 0.0   1st Qu.: 0.000   1st Qu.:0.2637  
##  Median : 68.00   Median : 0.0   Median : 0.000   Median :0.4004  
##  Mean   : 52.75   Mean   :23.1   Mean   : 3.301   Mean   :0.3589  
##  3rd Qu.: 78.00   3rd Qu.:54.3   3rd Qu.: 5.300   3rd Qu.:0.4785  
##  Max.   :258.00   Max.   :86.2   Max.   :23.200   Max.   :1.1182  
##       date                    
##  Min.   :2015-08-04 09:22:19  
##  1st Qu.:2015-08-22 07:22:00  
##  Median :2015-08-30 01:15:00  
##  Mean   :2015-08-28 21:02:08  
##  3rd Qu.:2015-09-04 15:22:30  
##  Max.   :2015-09-08 12:19:00
## ODIN_03
odin_03 <- read.table("/home/gustavo/data/CONA/ODIN/deployment/odin_03.data",
                      header=T, quote="")

odin_03$date=as.POSIXct(paste(odin_03$Date,odin_03$Time),tz='NZST')
odin_03$Time<-NULL
odin_03$Date<-NULL
odin_03$Batt<-5*odin_03$Batt/1024
summary(odin_03)
##       Dust              RH             Temp            Batt       
##  Min.   : 141.0   Min.   :27.40   Min.   :-1.90   Min.   :0.5176  
##  1st Qu.: 332.0   1st Qu.:53.50   1st Qu.: 3.10   1st Qu.:0.7520  
##  Median : 371.0   Median :62.30   Median : 7.50   Median :0.8057  
##  Mean   : 369.4   Mean   :62.92   Mean   : 7.98   Mean   :0.7895  
##  3rd Qu.: 400.0   3rd Qu.:74.30   3rd Qu.:11.40   3rd Qu.:0.8398  
##  Max.   :4736.0   Max.   :96.30   Max.   :28.60   Max.   :3.7598  
##       date                    
##  Min.   :2015-08-04 08:51:35  
##  1st Qu.:2015-08-08 15:13:15  
##  Median :2015-08-12 21:23:30  
##  Mean   :2015-08-19 05:17:05  
##  3rd Qu.:2015-09-04 04:30:45  
##  Max.   :2015-09-08 10:44:00
## ODIN_04
odin_04 <- read.table("/home/gustavo/data/CONA/ODIN/deployment/odin_04.data",
                      header=T, quote="")

odin_04$date=as.POSIXct(paste(odin_04$Date,odin_04$Time),tz='NZST')
odin_04$Time<-NULL
odin_04$Date<-NULL
odin_04$Batt<-5*odin_04$Batt/1024
summary(odin_04)
##       Dust           RH             Temp             Batt       
##  Min.   :  0   Min.   :28.30   Min.   :-3.000   Min.   :0.3223  
##  1st Qu.: 34   1st Qu.:57.70   1st Qu.: 3.800   1st Qu.:0.6494  
##  Median : 34   Median :68.70   Median : 7.200   Median :0.7764  
##  Mean   : 30   Mean   :68.43   Mean   : 7.764   Mean   :0.7364  
##  3rd Qu.: 39   3rd Qu.:80.10   3rd Qu.:10.500   3rd Qu.:0.8545  
##  Max.   :131   Max.   :99.90   Max.   :27.000   Max.   :1.0156  
##       date                    
##  Min.   :2015-08-04 08:51:51  
##  1st Qu.:2015-08-13 03:31:45  
##  Median :2015-08-21 22:16:30  
##  Mean   :2015-08-21 22:16:30  
##  3rd Qu.:2015-08-30 17:00:15  
##  Max.   :2015-09-08 11:44:00
## ODIN_05
odin_05 <- read.table("/home/gustavo/data/CONA/ODIN/deployment/odin_05.data",
                      header=T, quote="")

odin_05$date=as.POSIXct(paste(odin_05$Date,odin_05$Time),tz='NZST')
odin_05$Time<-NULL
odin_05$Date<-NULL
odin_05$Batt<-5*odin_05$Batt/1024
summary(odin_05)
##       Dust               RH             Temp             Batt       
##  Min.   :  14.00   Min.   : 0.00   Min.   :-2.600   Min.   :0.5469  
##  1st Qu.:  43.00   1st Qu.:52.00   1st Qu.: 3.900   1st Qu.:0.7520  
##  Median :  48.00   Median :60.40   Median : 7.500   Median :0.7861  
##  Mean   :  48.97   Mean   :60.62   Mean   : 8.003   Mean   :0.7782  
##  3rd Qu.:  53.00   3rd Qu.:71.70   3rd Qu.:10.800   3rd Qu.:0.8154  
##  Max.   :3735.00   Max.   :99.90   Max.   :29.500   Max.   :1.3281  
##       date                    
##  Min.   :2000-01-01 00:00:01  
##  1st Qu.:2015-08-13 02:56:15  
##  Median :2015-08-21 21:47:30  
##  Mean   :2012-06-25 16:00:40  
##  3rd Qu.:2015-08-30 16:38:45  
##  Max.   :2015-09-08 11:28:00
## ODIN_06
odin_06 <- read.table("/home/gustavo/data/CONA/ODIN/deployment/odin_06.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_06$date=as.POSIXct(paste(odin_06$Date,odin_06$Time),tz='NZST')
odin_06$Time<-NULL
odin_06$Date<-NULL
odin_06$Batt<-5*odin_06$Batt/1024
summary(odin_06)
##       Dust              RH            Temp             Batt         
##  Min.   :  9.00   Min.   :27.9   Min.   :-2.300   Min.   :0.004883  
##  1st Qu.: 53.00   1st Qu.:58.4   1st Qu.: 4.100   1st Qu.:0.156250  
##  Median : 58.00   Median :67.9   Median : 7.500   Median :0.375977  
##  Mean   : 55.99   Mean   :67.8   Mean   : 7.636   Mean   :0.371918  
##  3rd Qu.: 58.00   3rd Qu.:78.4   3rd Qu.:10.300   3rd Qu.:0.581055  
##  Max.   :122.00   Max.   :99.9   Max.   :26.800   Max.   :0.961914  
##       date                    
##  Min.   :2015-08-04 08:30:58  
##  1st Qu.:2015-08-13 03:09:45  
##  Median :2015-08-21 21:50:30  
##  Mean   :2015-08-21 21:50:52  
##  3rd Qu.:2015-08-30 16:32:15  
##  Max.   :2015-09-08 11:12:45
## ODIN_07.
odin_07 <- read.table("/home/gustavo/data/CONA/ODIN/deployment/odin_07.data",
                      header=T, quote="")

odin_07$date=as.POSIXct(paste(odin_07$Date,odin_07$Time),tz='NZST')
odin_07$Time<-NULL
odin_07$Date<-NULL
odin_07$Batt<-5*odin_07$Batt/1024
summary(odin_07)
##       Dust               RH             Temp             Batt        
##  Min.   :  29.00   Min.   :26.40   Min.   :-3.100   Min.   :0.08789  
##  1st Qu.:  53.00   1st Qu.:50.20   1st Qu.: 3.800   1st Qu.:0.30273  
##  Median :  58.00   Median :58.60   Median : 7.300   Median :0.56641  
##  Mean   :  59.18   Mean   :57.45   Mean   : 7.777   Mean   :0.52134  
##  3rd Qu.:  63.00   3rd Qu.:66.00   3rd Qu.:10.600   3rd Qu.:0.73730  
##  Max.   :2021.00   Max.   :77.40   Max.   :28.000   Max.   :1.97266  
##       date                    
##  Min.   :2015-08-04 08:29:47  
##  1st Qu.:2015-08-13 03:18:00  
##  Median :2015-08-21 22:11:00  
##  Mean   :2015-08-21 22:13:07  
##  3rd Qu.:2015-08-30 17:06:00  
##  Max.   :2015-09-08 12:02:00
# Load ECan data

download.file(url = "http://data.ecan.govt.nz/data/29/Air/Air%20quality%20data%20for%20a%20monitored%20site%20(Hourly)/CSV?SiteId=5&StartDate=14%2F08%2F2015&EndDate=10%2F09%2F2015",destfile = "ecan_data.csv",method = "curl")
system("sed -i 's/a.m./AM/g' ecan_data.csv")
system("sed -i 's/p.m./PM/g' ecan_data.csv")
ecan_data_raw <- read.csv("ecan_data.csv",stringsAsFactors=FALSE)
ecan_data_raw$date<-as.POSIXct(ecan_data_raw$DateTime,format = "%d/%m/%Y %I:%M:%S %p",tz='NZST')
ecan_data<-as.data.frame(ecan_data_raw[,c('date','PM10.FDMS','Temperature..2m')])

## Merging the data
# 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

names(odin_02)<-c('Dust.02','RH.02','Temperature.02','Batt.02','date')
names(odin_03)<-c('Dust.03','RH.03','Temperature.03','Batt.03','date')
names(odin_04)<-c('Dust.04','RH.04','Temperature.04','Batt.04','date')
names(odin_05)<-c('Dust.05','RH.05','Temperature.05','Batt.05','date')
names(odin_06)<-c('Dust.06','RH.06','Temperature.06','Batt.06','date')
names(odin_07)<-c('Dust.07','RH.07','Temperature.07','Batt.07','date')

odin <- merge(odin_02,odin_03,by = 'date', all = TRUE)
odin <- merge(odin,odin_04,by='date',all=TRUE)
odin <- merge(odin,odin_05,by='date',all=TRUE)
odin <- merge(odin,odin_06,by='date',all=TRUE)
odin <- merge(odin,odin_07,by='date',all=TRUE)
odin <- selectByDate(odin,start = '2015-08-15',end = '2015-09-10')
## Warning in checkPrep(mydata, vars, "default", remove.calm = FALSE,
## strip.white = FALSE): Detected data with Daylight Saving Time, converting
## to UTC/GMT
odin.10min<-timeAverage(odin,avg.time='10 min')
all_merged.1min<-merge(odin,ecan_data,by='date',all=TRUE)
all_merged.10min<-timeAverage(all_merged.1min,avg.time = '10 min')
timePlot(all_merged.10min,pollutant = c('Temperature..2m',
                                        'Temperature.02',
                                        'Temperature.03',
                                        'Temperature.04',
                                        'Temperature.05',
                                        'Temperature.06',
                                        'Temperature.07'))

## Time sync

lag_test=ccf(all_merged.10min$Temperature.05,
             all_merged.10min$Temperature..2m,
             na.action=na.pass,
             lag.max=100,
             type='covariance',
             ylab='Correlation',
             main='Temperature correlation as function of clock lag')

odin_lag=lag_test$lag[which.max(lag_test$acf)]

# correct timing
odin$date=odin$date-odin_lag*10*60
odin.10min<-timeAverage(odin,avg.time='10 min')
all_merged.10min<-merge(odin.10min,ecan_data,by='date',all=TRUE)
lag_test=ccf(all_merged.10min$Temperature.05,
             all_merged.10min$Temperature..2m,
             na.action=na.pass,
             lag.max=100,
             type='covariance',
             ylab='Correlation',
             main='Temperature correlation as function of clock lag')

## Remove drift from ODIN raw data

# Estimate the baseline from a simple linear regression

all_merged.10min$ODIN_drift.02<-predict(lm(all_merged.10min$Dust.02~seq(all_merged.10min$Dust.02)),newdata = all_merged.10min)
all_merged.10min$ODIN_drift.03<-predict(lm(all_merged.10min$Dust.03~seq(all_merged.10min$Dust.03)),newdata = all_merged.10min)
all_merged.10min$ODIN_drift.04<-predict(lm(all_merged.10min$Dust.04~seq(all_merged.10min$Dust.04)),newdata = all_merged.10min)
all_merged.10min$ODIN_drift.05<-predict(lm(all_merged.10min$Dust.05~seq(all_merged.10min$Dust.05)),newdata = all_merged.10min)
all_merged.10min$ODIN_drift.06<-predict(lm(all_merged.10min$Dust.06~seq(all_merged.10min$Dust.06)),newdata = all_merged.10min)
all_merged.10min$ODIN_drift.07<-predict(lm(all_merged.10min$Dust.07~seq(all_merged.10min$Dust.07)),newdata = all_merged.10min)

# Remove the baseline drift from the raw ODIN data
all_merged.10min$Dust.02.raw <- all_merged.10min$Dust.02
all_merged.10min$Dust.02.detrend<-all_merged.10min$Dust.02.raw - all_merged.10min$ODIN_drift.02

all_merged.10min$Dust.03.raw <- all_merged.10min$Dust.03
all_merged.10min$Dust.03.detrend<-all_merged.10min$Dust.03.raw - all_merged.10min$ODIN_drift.03

all_merged.10min$Dust.04.raw <- all_merged.10min$Dust.04
all_merged.10min$Dust.04.detrend<-all_merged.10min$Dust.04.raw - all_merged.10min$ODIN_drift.04

all_merged.10min$Dust.05.raw <- all_merged.10min$Dust.05
all_merged.10min$Dust.05.detrend<-all_merged.10min$Dust.05.raw - all_merged.10min$ODIN_drift.05

all_merged.10min$Dust.06.raw <- all_merged.10min$Dust.06
all_merged.10min$Dust.06.detrend<-all_merged.10min$Dust.06.raw - all_merged.10min$ODIN_drift.06

all_merged.10min$Dust.07.raw <- all_merged.10min$Dust.07
all_merged.10min$Dust.07.detrend<-all_merged.10min$Dust.07.raw - all_merged.10min$ODIN_drift.07

## Testing not correcting drift
all_merged.10min$Dust.02.detrend<-all_merged.10min$Dust.02.raw
all_merged.10min$Dust.03.detrend<-all_merged.10min$Dust.03.raw
all_merged.10min$Dust.04.detrend<-all_merged.10min$Dust.04.raw
all_merged.10min$Dust.05.detrend<-all_merged.10min$Dust.05.raw
all_merged.10min$Dust.06.detrend<-all_merged.10min$Dust.06.raw
# all_merged.10min$Dust.07.detrend<-all_merged.10min$Dust.07.raw

## Remove ODIN_02 data that doesn't have valid temperature with it
no_TRH_sensor.02<-(all_merged.10min$RH.02==0)|(is.na(all_merged.10min$RH.02))
all_merged.10min$Temperature.02[no_TRH_sensor.02] <- NA

## Calculate the temperature interference
all_merged.10min$Temperature.02.bin<-cut(all_merged.10min$Temperature.02,breaks = c(0,5,10,15,20,25),labels = c('2.5','7.5','12.5','17.5','22.5'))
all_merged.10min$Temperature.03.bin<-cut(all_merged.10min$Temperature.03,breaks = c(0,5,10,15,20,25),labels = c('2.5','7.5','12.5','17.5','22.5'))
all_merged.10min$Temperature.04.bin<-cut(all_merged.10min$Temperature.04,breaks = c(0,5,10,15,20,25),labels = c('2.5','7.5','12.5','17.5','22.5'))
all_merged.10min$Temperature.05.bin<-cut(all_merged.10min$Temperature.05,breaks = c(0,5,10,15,20,25),labels = c('2.5','7.5','12.5','17.5','22.5'))
all_merged.10min$Temperature.06.bin<-cut(all_merged.10min$Temperature.06,breaks = c(0,5,10,15,20,25),labels = c('2.5','7.5','12.5','17.5','22.5'))
all_merged.10min$Temperature.07.bin<-cut(all_merged.10min$Temperature.07,breaks = c(0,5,10,15,20,25),labels = c('2.5','7.5','12.5','17.5','22.5'))
Temp <- c(2.5,7.5,12.5,17.5,22.5)

Dust.02<-tapply(all_merged.10min$Dust.02.detrend,all_merged.10min$Temperature.02.bin,quantile,0.25)
Dust.03<-tapply(all_merged.10min$Dust.03.detrend,all_merged.10min$Temperature.03.bin,quantile,0.25)
Dust.04<-tapply(all_merged.10min$Dust.04.detrend,all_merged.10min$Temperature.04.bin,quantile,0.25)
Dust.05<-tapply(all_merged.10min$Dust.05.detrend,all_merged.10min$Temperature.05.bin,quantile,0.25)
Dust.06<-tapply(all_merged.10min$Dust.06.detrend,all_merged.10min$Temperature.06.bin,quantile,0.25)
Dust.07<-tapply(all_merged.10min$Dust.07.detrend,all_merged.10min$Temperature.07.bin,quantile,0.25)

TC_Dust.02 <- data.frame(Dust.02.detrend = Dust.02,Temperature.02 = Temp)
TC_Dust.03 <- data.frame(Dust.03.detrend = Dust.03,Temperature.03 = Temp)
TC_Dust.04 <- data.frame(Dust.04.detrend = Dust.04,Temperature.04 = Temp)
TC_Dust.05 <- data.frame(Dust.05.detrend = Dust.05,Temperature.05 = Temp)
TC_Dust.06 <- data.frame(Dust.06.detrend = Dust.06,Temperature.06 = Temp)
TC_Dust.07 <- data.frame(Dust.07.detrend = Dust.07,Temperature.07 = Temp)

# Now we calculate the linear regression for the minimum dust response in each temperature bin and subtract it from the detrended data

summary(odin.02_T<-lm(data = TC_Dust.02,Dust.02.detrend~Temperature.02))
## 
## Call:
## lm(formula = Dust.02.detrend ~ Temperature.02, data = TC_Dust.02)
## 
## Residuals:
##     2.5     7.5    12.5    17.5    22.5 
## -0.8700  0.1475  1.3650  0.3075 -0.9500 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    60.09125    1.00035   60.07 1.02e-05 ***
## Temperature.02  1.10150    0.06966   15.81  0.00055 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.101 on 3 degrees of freedom
## Multiple R-squared:  0.9881, Adjusted R-squared:  0.9842 
## F-statistic: 250.1 on 1 and 3 DF,  p-value: 0.0005498
summary(odin.03_T<-lm(data = TC_Dust.03,Dust.03.detrend~Temperature.03))
## 
## Call:
## lm(formula = Dust.03.detrend ~ Temperature.03, data = TC_Dust.03)
## 
## Residuals:
##    2.5    7.5   12.5   17.5   22.5 
## -8.335 13.985 -9.470 10.325 -6.505 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    258.3325    11.7688  21.951 0.000207 ***
## Temperature.03   4.6910     0.8195   5.724 0.010581 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.96 on 3 degrees of freedom
## Multiple R-squared:  0.9161, Adjusted R-squared:  0.8882 
## F-statistic: 32.77 on 1 and 3 DF,  p-value: 0.01058
summary(odin.04_T<-lm(data = TC_Dust.04,Dust.04.detrend~Temperature.04))
## 
## Call:
## lm(formula = Dust.04.detrend ~ Temperature.04, data = TC_Dust.04)
## 
## Residuals:
##   2.5   7.5  12.5  17.5  22.5 
##  0.01 -0.10  0.19 -0.12  0.02 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    32.935000   0.129518  254.29 1.34e-07 ***
## Temperature.04  0.422000   0.009018   46.79 2.15e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1426 on 3 degrees of freedom
## Multiple R-squared:  0.9986, Adjusted R-squared:  0.9982 
## F-statistic:  2190 on 1 and 3 DF,  p-value: 2.149e-05
summary(odin.05_T<-lm(data = TC_Dust.05,Dust.05.detrend~Temperature.05))
## 
## Call:
## lm(formula = Dust.05.detrend ~ Temperature.05, data = TC_Dust.05)
## 
## Residuals:
##    2.5    7.5   12.5   17.5   22.5 
## -0.090  0.290 -0.055 -0.400  0.255 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    43.19250    0.29676   145.5 7.15e-07 ***
## Temperature.05  0.46900    0.02066    22.7 0.000187 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3267 on 3 degrees of freedom
## Multiple R-squared:  0.9942, Adjusted R-squared:  0.9923 
## F-statistic: 515.1 on 1 and 3 DF,  p-value: 0.0001873
summary(odin.06_T<-lm(data = TC_Dust.06,Dust.06.detrend~Temperature.06))
## 
## Call:
## lm(formula = Dust.06.detrend ~ Temperature.06, data = TC_Dust.06)
## 
## Residuals:
##   2.5   7.5  12.5  17.5  22.5 
## -0.10  0.35 -0.20 -0.25  0.20 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    50.32500    0.27500  183.00  3.6e-07 ***
## Temperature.06  0.51000    0.01915   26.63 0.000116 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3028 on 3 degrees of freedom
## Multiple R-squared:  0.9958, Adjusted R-squared:  0.9944 
## F-statistic: 709.4 on 1 and 3 DF,  p-value: 0.0001161
summary(odin.07_T<-lm(data = TC_Dust.07,Dust.07.detrend~Temperature.07))
## 
## Call:
## lm(formula = Dust.07.detrend ~ Temperature.07, data = TC_Dust.07)
## 
## Residuals:
##      2.5      7.5     12.5     17.5     22.5 
## -0.34099  0.10404  0.57362 -0.09539 -0.24128 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -8.02053    0.37940  -21.14 0.000232 ***
## Temperature.07  0.74162    0.02642   28.07 9.92e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4177 on 3 degrees of freedom
## Multiple R-squared:  0.9962, Adjusted R-squared:  0.9949 
## F-statistic: 788.1 on 1 and 3 DF,  p-value: 9.923e-05
all_merged.10min$Dust.02.corr <- all_merged.10min$Dust.02.detrend - predict(odin.02_T,newdata = all_merged.10min)
all_merged.10min$Dust.03.corr <- all_merged.10min$Dust.03.detrend - predict(odin.03_T,newdata = all_merged.10min)
all_merged.10min$Dust.04.corr <- all_merged.10min$Dust.04.detrend - predict(odin.04_T,newdata = all_merged.10min)
all_merged.10min$Dust.05.corr <- all_merged.10min$Dust.05.detrend - predict(odin.05_T,newdata = all_merged.10min)
all_merged.10min$Dust.06.corr <- all_merged.10min$Dust.06.detrend - predict(odin.06_T,newdata = all_merged.10min)
all_merged.10min$Dust.07.corr <- all_merged.10min$Dust.07.detrend - predict(odin.07_T,newdata = all_merged.10min)


timePlot(all_merged.10min,pollutant = c('PM10.FDMS',
                                      'Dust.02.corr',
                                      'Dust.03.corr',
                                      'Dust.04.corr',
                                      'Dust.05.corr',
                                      'Dust.06.corr',
                                      'Dust.07.corr'
                                      )
         ,name.pol = c('PM10.FDMS',
                       'ODIN.02',
                       'ODIN.03',
                       'ODIN.04',
                       'ODIN.05',
                       'ODIN.06',
                       'ODIN.07')
         ,ylab = 'Sensor Response'
         ,group = FALSE
         ,avg.time = '60 min'
         ,main = '60 min')

timePlot(all_merged.10min,pollutant = c('PM10.FDMS'
                                        ,'Dust.02.corr'
                                        ,'Dust.03.corr'
                                        ,'Dust.04.corr'
                                        ,'Dust.05.corr'
                                        ,'Dust.06.corr'
                                        ,'Dust.07.corr')
         ,group = TRUE
         ,normalise = 'mean'
         ,avg.time = '1 day'
         ,main = '24 hour time series'
)

TV_norm <- timeVariation(all_merged.10min,pollutant = c('PM10.FDMS'
                                                        ,'Dust.02.corr'
                                                        ,'Dust.03.corr'
                                                        ,'Dust.04.corr'
                                                        ,'Dust.05.corr'
                                                        ,'Dust.06.corr'
                                                        ,'Dust.07.corr'
)
,normalise = TRUE
,plot = FALSE)

ggplot(TV_norm$data$hour)+
  geom_ribbon(aes(x=hour,ymin=Lower,ymax=Upper),fill='red', alpha = 0.3)+
  geom_line(aes(x=hour,y=Mean))+
  facet_grid(variable~.)+
  ggtitle('Average diurnal variation')+
  xlab('NZST hour')+
  ylab('Normalised value')