
ubair is an R package for Statistical Investigationof the Impact of External Conditions on Air Quality: it uses thestatistical software R to analyze and visualize the impact of externalfactors, such as traffic restrictions, hazards, and political measures,on air quality. It aims to provide experts with a transparent comparisonof modeling approaches and to support data-driven evaluations for policyadvisory purposes.
runinstall.packages("ubair") or via source code fromhttps://gitlab.opencode.de/uba-ki-lab/ubair
For a more detailed explanation of the package, you can access thevignettes:
vignette("user_sample_1", package = "ubair"), if thepackage was installed with vignetteslibrary(ubair)params<-load_params()env_data<- sample_data_DESN025# Plot meteo dataplot_station_measurements(env_data, params$meteo_variables)

application_start<- lubridate::ymd("20191201")# This coincides with the start of the reference windowdate_effect_start<- lubridate::ymd_hm("20200323 00:00")# This splits the forecast into reference and effectapplication_end<- lubridate::ymd("20200504")# This coincides with the end of the effect windowbuffer<-24*14# 14 days bufferdt_prepared<-prepare_data_for_modelling(env_data, params)dt_prepared<- dt_prepared[complete.cases(dt_prepared)]split_data<-split_data_counterfactual( dt_prepared, application_start, application_end)res<-run_counterfactual(split_data, params,detrending_function ="linear",model_type ="lightgbm",alpha =0.9,log_transform =TRUE,calc_shaps =TRUE)#> [LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.001115 seconds.#> You can set `force_row_wise=true` to remove the overhead.#> And if memory is not enough, you can set `force_col_wise=true`.#> [LightGBM] [Info] Total Bins 1557#> [LightGBM] [Info] Number of data points in the train set: 104486, number of used features: 9#> [LightGBM] [Info] Start training from score -0.000000predictions<- res$predictionplot_counterfactual(predictions, params,window_size =14, date_effect_start,buffer = buffer,plot_pred_interval =TRUE)
round(calc_performance_metrics(predictions, date_effect_start,buffer = buffer),2)#> RMSE MSE MAE MAPE Bias #> 7.38 54.48 5.38 0.18 -2.73 #> R2 Coverage lower Coverage upper Coverage Correlation #> 0.74 0.97 0.95 0.92 0.89 #> MFB FGE #> -0.05 0.19round(calc_summary_statistics(predictions, date_effect_start,buffer = buffer),2)| true | prediction | |
|---|---|---|
| min | 3.36 | 5.58 |
| max | 111.90 | 59.71 |
| var | 212.96 | 128.16 |
| mean | 30.80 | 28.07 |
| 5-percentile | 9.29 | 10.73 |
| 25-percentile | 19.85 | 19.40 |
| median/50-percentile | 29.60 | 27.09 |
| 75-percentile | 40.54 | 36.27 |
| 95-percentile | 56.80 | 47.69 |
estimate_effect_size(predictions, date_effect_start,buffer = buffer,verbose =TRUE)#> The external effect changed the target value on average by -6.294 compared to the reference time window. This is a -26.37% relative change.#> $absolute_effect#> [1] -6.294028#> #> $relative_effect#> [1] -0.2637shapviz::sv_importance(res$importance,kind ="bee")
xvars<-c("TMP","WIG","GLO","WIR")shapviz::sv_dependence(res$importance,v = xvars)
Install the development version of ubair:
install.packages("renv")renv::restore()devtools::build()devtools::load_all()pip install pre-commitIf you add new dependencies toubair package, make sure toupdate the renv.lock file:
renv::snapshot()Before you commit your changes update documentation, ensure stylecomplies with tidyverse styleguide and all tests run without error
# update documentation and check package integritydevtools::check()# apply tidyverse style (also applied as precommit hook)usethis::use_tidy_style()# you can check for existing lintr warnings bydevtools::lint()# run testsdevtools::test()# build README.md if any changes have been made to README.Rmddevtools::build_readme()in .pre-commit-hook.yaml pre-commit rules are defined and appliedbefore each commmit. This includes: split - run styler to format code intidyverse style - run roxygen to update doc - check if readme is up todate - run lintr to finally check code style format
If precommit fails, check the automatically applied changes, stagethem and retry to commit.
Install covr to run this.
cov<- covr::package_coverage(type ="all")cov_list<- covr::coverage_to_list(cov)data.table::data.table(part =c("Total",names(cov_list$filecoverage)),coverage =c(cov_list$totalcoverage,as.vector(cov_list$filecoverage)))covr::report(cov)Jore Noa AverbeckJoreNoa.Averbeck@uba.de
Raphael FrankeRaphael.Franke@uba.de
Imke Voßimke.voss@uba.de