Ashley's list of sensors to explore:
Below is a list of sensors and timeframes I was using to explore the results of applying different QC algorithms. I was primarily focused on examples where we see moderate to severe sensor noise from one or both channels (as opposed to more extreme/obvious sensor malfunctions, such as one channel reading zero). Sensor: “SCNP_17”, startdate = 20200501, enddate = 20200520 Sensor: “CARB_SMOKE_SLO_CDF”, startdate = 20200501, enddate = 20200520 Sensor: “1105 Trail View Place, Nipomo, CA”, startdate = 20200501, enddate = 20200520 Sensor: "CARB_Smoke_SBCAPCD_Santa Maria", startdate = 20200501, enddate = 20200520 Sensor: "CARB_SMOKE_SLO_CDF", startdate = 20200501, enddate = 20200520 Sensor: "SCAP_19", startdate = 20200501, enddate = 20200520 Sensor: "SCTV_31", startdate = 20200501, enddate = 20200520 Sensor: "RUSD_1 (Arlington HS)", startdate = 20200516, enddate = 20200521 GitHub IO examples: Sensor: “SCNP_20”, startdate = 20190411, enddate = 20190521 Sensor: "SCAP_46", startdate = 20190701, enddate = 20190710 GitHub IO example (Australian wildfire): Sensor: “Downer”, startdate = 20191225, enddate = 20200110
library(AirSensor) AirSensor::initializeMazamaSpatialUtils() setArchiveBaseUrl("https://airsensor.aqmd.gov/PurpleAir/v1") # SCAQMD sensors knitr::opts_chunk$set(fig.width = 10, fig.height = 5)
pas <- pas_load(archival = TRUE) pat <- pat_createNew( label = params$label, pas = pas, startdate = params$startdate, enddate = params$enddate )
pat_multiPlot(pat)
PurpleAir daily state-of-health (pat_dailySoH()
) applies six algorithms:
- PurpleAirSoH_dailyPctDC
- PurpleAirSoH_dailyPctReporting
- PurpleAirSoH_dailyPctValid
- PurpleAirSoH_dailyMetFit
- PurpleAirSoH_dailyABFit
- PurpleAirSoH_dailyABtTest
pat_dailySoHPlot(pat)
See ?pat_dailySoH
, ?PurpleAirSoH_dailyPctDC
, ?PurpleAirSoH_dailyPctReporting
, ?PurpleAirSoH_dailyPctValid
, ?PurpleAirSoH_dailyPctValid
, ?PurpleAirSoH_dailyMetFit
, ?PurpleAirSoH_dailyABFit
, and ?PurpleAirSoH_dailyABtTest
for more details.
Creates a pm25
timeseries by averaging aggregated data from the A and B channels and applying the following QC logic:
pat_monitorComparison(pat, FUN = AirSensor::PurpleAirQC_hourly_AB_00)
See ?AirSensor::PurpleAirQC_hourly_AB_00
for more details regarding the quality-control algorithm.
Creates a pm25
timeseries by averaging aggregated data from the A and B channels and applying the following QC logic:
pat_monitorComparison(pat, FUN = AirSensor::PurpleAirQC_hourly_AB_01)
See ?AirSensor::PurpleAirQC_hourly_AB_01
for more details regarding the quality-control algorithm.
Creates a pm25
timeseries by averaging aggregated data from the A and B channels and applying the following QC logic:
pat_monitorComparison(pat, FUN = AirSensor::PurpleAirQC_hourly_AB_02)
See ?AirSensor::PurpleAirQC_hourly_AB_02
for more details regarding the quality-control algorithm.
Creates a pm25
timeseries by averaging aggregated data from the A and B channels and applying the following QC logic:
pat_monitorComparison(pat, FUN = AirSensor::PurpleAirQC_hourly_AB_03)
See ?AirSensor::PurpleAirQC_hourly_AB_03
for more details regarding the quality-control algorithm.
qc_00 <- pat_createAirSensor(pat, FUN = PurpleAirQC_hourly_AB_00) qc_01 <- pat_createAirSensor(pat, FUN = PurpleAirQC_hourly_AB_01) qc_02 <- pat_createAirSensor(pat, FUN = PurpleAirQC_hourly_AB_02) qc_03 <- pat_createAirSensor(pat, FUN = PurpleAirQC_hourly_AB_03) # Using baseplot for a custom graphic layout(matrix(seq(3))) PWFSLSmoke::monitor_timeseriesPlot(qc_00, pch = 16, col = 'red') PWFSLSmoke::monitor_timeseriesPlot(qc_01, pch = 16, col = 'black', add = TRUE) title("QC_hourly_AB_01") PWFSLSmoke::monitor_timeseriesPlot(qc_00, pch = 16, col = 'red') PWFSLSmoke::monitor_timeseriesPlot(qc_02, pch = 16, col = 'black', add = TRUE) title("QC_hourly_AB_02") PWFSLSmoke::monitor_timeseriesPlot(qc_00, pch = 16, col = 'red') PWFSLSmoke::monitor_timeseriesPlot(qc_03, pch = 16, col = 'black', add = TRUE) title("QC_hourly_AB_03") layout(1)
Mazama Science
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.