Skip to contents

This article contains self-contained recipes for using mqor to evaluate data against model-quality objectives.

Create Target Diagrams

Obtain Test Dataset

The code in this section could be replaced by any method for getting “MQOR-format” data into R.

# create temporary directory
tmp <- tempdir()

# download demo files
download_demo_files(dir = tmp)

# format for mqor
data_short <-
  read_mqor(
    file_data = file.path(tmp, "delta_shortterm.csv"),
    file_attributes = file.path(tmp, "delta_attributes.csv")
  )

data_long <- 
  read_mqor(
    file_data = file.path(tmp, "delta_longterm.csv"),
    file_attributes = file.path(tmp, "delta_attributes.csv")
  )

# make sure every observation has a corresponding modelled value, and vice-versa
data_short <- validate_mod_obs_pairs(data_short)
data_long <- validate_mod_obs_pairs(data_long)

Nitrogen Dioxide (Hourly)

# create no2 stats
no2_short_stats <-
  summarise_mqo_stats(
    data_short,
    pollutant = "NO2",
    term = "short",
    dict = mqo_dict(site = "stat_abbreviation")
  )

no2_long_stats <-
  summarise_mqo_stats(
    data_long,
    pollutant = "NO2",
    term = "long",
    dict = mqo_dict(site = "stat_abbreviation")
  )

# create target diagram
plot_mqi_scatter(
  stats_shortterm = no2_short_stats,
  stats_longterm = no2_long_stats
)

Particulate Matter (Daily)

# get mean daily data
data_daily <-
  data_short |>
  summarise_daily(statistic = "mean")

# create statistics objects
pm10_short_stats <-
  summarise_mqo_stats(
    data_daily,
    pollutant = "PM10",
    term = "short",
    dict = mqo_dict(site = "stat_abbreviation")
  )

pm10_long_stats <-
  summarise_mqo_stats(
    data_long,
    pollutant = "PM10",
    term = "long",
    dict = mqo_dict(site = "stat_abbreviation")
  )

# create target diagram
plot_mqi_scatter(
  stats_shortterm = pm10_short_stats,
  stats_longterm = pm10_long_stats
)

Ozone (Max Daily 8hour)

# get 8 hour rolling ozone, then get daily max
data_8hr <-
  data_short |>
  mutate_rolling_mean(window_size = 8L) |>
  summarise_daily(statistic = "max")

# need a "seasonal" average for ozone - lets call it May to July
data_seasonal <-
  data_short |>
  filter_month(months = 5:7) |>
  summarise_annual()

# create statistics objects
o3_short_stats <-
  summarise_mqo_stats(
    data_8hr,
    pollutant = "O3",
    term = "short",
    dict = mqo_dict(site = "stat_abbreviation")
  )

o3_long_stats <-
  summarise_mqo_stats(
    data_seasonal,
    pollutant = "O3",
    term = "long",
    dict = mqo_dict(site = "stat_abbreviation")
  )

# create target diagram
plot_mqi_scatter(
  stats_shortterm = o3_short_stats,
  stats_longterm = o3_long_stats
)