Overview

This document presents a summary of the PM2.5 data during the co-location of ODIN, ES-642 and Beta Attenuation Monitor at Auckland’s Waterview tunnel in November 2018. The main goal is to evaluate compare the response of the different sensors to traffic emissions. ## Prepare the environment

# Load packages
library(ggplot2)
library(openair)
# Fetch and load data
load(url('https://ndownloader.figshare.com/files/17860082'))

You can download the data here:

https://ndownloader.figshare.com/files/17860082

Numeric summary

summary(colo.data[,c('PM2.5.BAM','PM2.5.odin','PM2.5.grimm','PM2.5.mote')],digits=2)
##    PM2.5.BAM      PM2.5.odin    PM2.5.grimm     PM2.5.mote  
##  Min.   :-9.6   Min.   : 2.6   Min.   : 4.3   Min.   : 2.1  
##  1st Qu.:19.5   1st Qu.: 6.0   1st Qu.: 8.0   1st Qu.: 6.5  
##  Median :31.1   Median : 9.2   Median :13.3   Median : 9.6  
##  Mean   :36.4   Mean   :11.9   Mean   :14.3   Mean   :11.6  
##  3rd Qu.:53.1   3rd Qu.:15.8   3rd Qu.:19.6   3rd Qu.:15.9  
##  Max.   :90.9   Max.   :35.4   Max.   :40.0   Max.   :52.1  
##  NA's   :36     NA's   :24     NA's   :1      NA's   :9

Graphic summary

ODIN vs ES-642

scatterPlot(colo.data,x='PM2.5.odin',y='PM2.5.mote',linear = TRUE)

Now using a linear fit, what is the prediction confidence interval between odin and ES-642

odin.mote.lm <- lm(data=colo.data,PM2.5.mote ~ PM2.5.odin + 1)
pred.int <- predict(odin.mote.lm,newdata = colo.data, interval = "prediction",level = 0.90)
plot1.data <- cbind(colo.data, pred.int)
ggplot(plot1.data, aes(PM2.5.odin, PM2.5.mote)) +
  geom_point() +
  stat_smooth(method = lm) +
  geom_line(aes(y = lwr), color = "red", linetype = "dashed")+
  geom_line(aes(y = upr), color = "red", linetype = "dashed")
## Warning: Removed 33 rows containing non-finite values (stat_smooth).
## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing missing values (geom_path).

## Warning: Removed 24 rows containing missing values (geom_path).

ODIN against BAM

scatterPlot(colo.data,x='PM2.5.odin',y='PM2.5.BAM',linear = TRUE)

odin.bam.lm <- lm(data=colo.data,PM2.5.BAM ~ PM2.5.odin + 1)
pred.int <- predict(odin.bam.lm,newdata = colo.data, interval = "prediction",level = 0.90)
plot2.data <- cbind(colo.data, pred.int)
ggplot(plot2.data, aes(PM2.5.odin, PM2.5.BAM)) +
  geom_point() +
  stat_smooth(method = lm) +
  geom_line(aes(y = lwr), color = "red", linetype = "dashed")+
  geom_line(aes(y = upr), color = "red", linetype = "dashed")
## Warning: Removed 60 rows containing non-finite values (stat_smooth).
## Warning: Removed 60 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing missing values (geom_path).

## Warning: Removed 24 rows containing missing values (geom_path).

ES-642 against BAM

scatterPlot(colo.data,x='PM2.5.mote',y='PM2.5.BAM',linear = TRUE)

odin.bam.lm <- lm(data=colo.data,PM2.5.BAM ~ PM2.5.mote + 1)
pred.int <- predict(odin.bam.lm,newdata = colo.data, interval = "prediction",level = 0.90)
plot3.data <- cbind(colo.data, pred.int)
ggplot(plot3.data, aes(PM2.5.mote, PM2.5.BAM)) +
  geom_point() +
  stat_smooth(method = lm) +
  geom_line(aes(y = lwr), color = "red", linetype = "dashed")+
  geom_line(aes(y = upr), color = "red", linetype = "dashed")
## Warning: Removed 45 rows containing non-finite values (stat_smooth).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 9 rows containing missing values (geom_path).

## Warning: Removed 9 rows containing missing values (geom_path).