diff --git a/preview/pr309/404.html b/preview/pr309/404.html index 67dc7106..a2b410b5 100644 --- a/preview/pr309/404.html +++ b/preview/pr309/404.html @@ -20,7 +20,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/CODE_OF_CONDUCT.html b/preview/pr309/CODE_OF_CONDUCT.html index 5e47d805..15af2e41 100644 --- a/preview/pr309/CODE_OF_CONDUCT.html +++ b/preview/pr309/CODE_OF_CONDUCT.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/CONTRIBUTING.html b/preview/pr309/CONTRIBUTING.html index 57fb505d..5af70760 100644 --- a/preview/pr309/CONTRIBUTING.html +++ b/preview/pr309/CONTRIBUTING.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/articles/enteric_fever_example.html b/preview/pr309/articles/enteric_fever_example.html index 3f07e77a..5057e96d 100644 --- a/preview/pr309/articles/enteric_fever_example.html +++ b/preview/pr309/articles/enteric_fever_example.html @@ -20,7 +20,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/articles/index.html b/preview/pr309/articles/index.html index 68e57ddf..621774a3 100644 --- a/preview/pr309/articles/index.html +++ b/preview/pr309/articles/index.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/articles/methodology.html b/preview/pr309/articles/methodology.html index 0e59712a..f2ed7dc3 100644 --- a/preview/pr309/articles/methodology.html +++ b/preview/pr309/articles/methodology.html @@ -22,7 +22,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/articles/scrubTyphus_example.html b/preview/pr309/articles/scrubTyphus_example.html index 5ab99c6f..705a5d81 100644 --- a/preview/pr309/articles/scrubTyphus_example.html +++ b/preview/pr309/articles/scrubTyphus_example.html @@ -20,7 +20,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/articles/serocalculator.html b/preview/pr309/articles/serocalculator.html index 3e5b2bf2..bbb5f2bc 100644 --- a/preview/pr309/articles/serocalculator.html +++ b/preview/pr309/articles/serocalculator.html @@ -24,7 +24,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/articles/simulate_xsectionalData.html b/preview/pr309/articles/simulate_xsectionalData.html index 1a3e8add..56cdcdde 100644 --- a/preview/pr309/articles/simulate_xsectionalData.html +++ b/preview/pr309/articles/simulate_xsectionalData.html @@ -20,7 +20,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 @@ -422,7 +422,7 @@ estimate incidence#> #> Elapsed time: #> user system elapsed -#> 0.436 0.000 0.436 +#> 0.434 0.000 0.435 We can extract summary statistics with summary(): summary(est1) @@ -540,7 +540,7 @@ Estimate incidence in each cluster#> Setting up parallel processing with `num_cores` = 3. #> Elapsed time for parallelized code: #> user system elapsed -#> 0.130 0.049 15.675 +#> 0.141 0.024 17.206 summary(ests) produces a tibble() with some extra meta-data: diff --git a/preview/pr309/authors.html b/preview/pr309/authors.html index 9eed03dd..94cc0dcb 100644 --- a/preview/pr309/authors.html +++ b/preview/pr309/authors.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 @@ -76,14 +76,14 @@ Citation Teunis P, Lai K, Orwa C, Aiemjoy K, Morrison D (2024). serocalculator: Estimating Infection Rates from Serological Data. -R package version 1.2.0.9016, +R package version 1.2.0.9017, https://ucd-serg.github.io/serocalculator/, https://github.com/UCD-SERG/serocalculator. @Manual{, title = {serocalculator: Estimating Infection Rates from Serological Data}, author = {Peter Teunis and Kristina Lai and Chris Orwa and Kristen Aiemjoy and Douglas Ezra Morrison}, year = {2024}, - note = {R package version 1.2.0.9016, + note = {R package version 1.2.0.9017, https://ucd-serg.github.io/serocalculator/}, url = {https://github.com/UCD-SERG/serocalculator}, } diff --git a/preview/pr309/index.html b/preview/pr309/index.html index 92d83336..c5ac4c96 100644 --- a/preview/pr309/index.html +++ b/preview/pr309/index.html @@ -22,7 +22,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/news/index.html b/preview/pr309/news/index.html index 466785fb..54a9284b 100644 --- a/preview/pr309/news/index.html +++ b/preview/pr309/news/index.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 @@ -59,8 +59,9 @@ New featuresAdded template for pull requests (from https://github.com/bcgov/ssdtools) (#265) -Developer-facing changes -initialized lintr with lintr::use_lint() (#278) +Internal changes +Added online preview builds for PRs that change the pkgdown website (#309) +initialized lintr with lintr::use_lint() (#278) created unit test for df_to_array() (#276) fixed dplyr::select() deprecation warning in df_to_array() (#276) Added devtag to package (using devtag::use_devtag()) (#292) diff --git a/preview/pr309/pkgdown.yml b/preview/pr309/pkgdown.yml index 1d45d39c..eab1b69d 100644 --- a/preview/pr309/pkgdown.yml +++ b/preview/pr309/pkgdown.yml @@ -7,7 +7,7 @@ articles: articles/scrubTyphus_example: scrubTyphus_example.html articles/serocalculator: serocalculator.html articles/simulate_xsectionalData: simulate_xsectionalData.html -last_built: 2024-10-15T00:10Z +last_built: 2024-10-15T00:23Z urls: reference: https:/ucd-serg.github.io/serocalculator/preview/pr309/reference article: https:/ucd-serg.github.io/serocalculator/preview/pr309/articles diff --git a/preview/pr309/reference/ab.html b/preview/pr309/reference/ab.html index 761e5d99..a5facb75 100644 --- a/preview/pr309/reference/ab.html +++ b/preview/pr309/reference/ab.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/as_curve_params.html b/preview/pr309/reference/as_curve_params.html index 5d278ebb..47f81806 100644 --- a/preview/pr309/reference/as_curve_params.html +++ b/preview/pr309/reference/as_curve_params.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/as_noise_params.html b/preview/pr309/reference/as_noise_params.html index 0dbfc96c..7373f2c3 100644 --- a/preview/pr309/reference/as_noise_params.html +++ b/preview/pr309/reference/as_noise_params.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/as_pop_data.html b/preview/pr309/reference/as_pop_data.html index 5c03ec03..9f1e594a 100644 --- a/preview/pr309/reference/as_pop_data.html +++ b/preview/pr309/reference/as_pop_data.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/autoplot.curve_params.html b/preview/pr309/reference/autoplot.curve_params.html index f35bdfad..ce98281e 100644 --- a/preview/pr309/reference/autoplot.curve_params.html +++ b/preview/pr309/reference/autoplot.curve_params.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/autoplot.pop_data.html b/preview/pr309/reference/autoplot.pop_data.html index 68e0bf97..3328fb1f 100644 --- a/preview/pr309/reference/autoplot.pop_data.html +++ b/preview/pr309/reference/autoplot.pop_data.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/autoplot.seroincidence.by.html b/preview/pr309/reference/autoplot.seroincidence.by.html index 04bc99e0..0bbbe224 100644 --- a/preview/pr309/reference/autoplot.seroincidence.by.html +++ b/preview/pr309/reference/autoplot.seroincidence.by.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/autoplot.seroincidence.html b/preview/pr309/reference/autoplot.seroincidence.html index 0b5032ee..63a0795e 100644 --- a/preview/pr309/reference/autoplot.seroincidence.html +++ b/preview/pr309/reference/autoplot.seroincidence.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/autoplot.summary.seroincidence.by.html b/preview/pr309/reference/autoplot.summary.seroincidence.by.html index 8d03524c..4649aea5 100644 --- a/preview/pr309/reference/autoplot.summary.seroincidence.by.html +++ b/preview/pr309/reference/autoplot.summary.seroincidence.by.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/check_pop_data.html b/preview/pr309/reference/check_pop_data.html index cfd6fe78..6dc0e586 100644 --- a/preview/pr309/reference/check_pop_data.html +++ b/preview/pr309/reference/check_pop_data.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/df.to.array.html b/preview/pr309/reference/df.to.array.html index 6bf3077d..746bc68f 100644 --- a/preview/pr309/reference/df.to.array.html +++ b/preview/pr309/reference/df.to.array.html @@ -11,7 +11,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/df_to_array.html b/preview/pr309/reference/df_to_array.html index e1846fa2..586a303a 100644 --- a/preview/pr309/reference/df_to_array.html +++ b/preview/pr309/reference/df_to_array.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/dot-nll.html b/preview/pr309/reference/dot-nll.html index 494b9f60..c174e975 100644 --- a/preview/pr309/reference/dot-nll.html +++ b/preview/pr309/reference/dot-nll.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/est.incidence.by.html b/preview/pr309/reference/est.incidence.by.html index b8a45cc6..fe9ae3eb 100644 --- a/preview/pr309/reference/est.incidence.by.html +++ b/preview/pr309/reference/est.incidence.by.html @@ -9,7 +9,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/est.incidence.html b/preview/pr309/reference/est.incidence.html index 3f55f5a5..b2e8e58f 100644 --- a/preview/pr309/reference/est.incidence.html +++ b/preview/pr309/reference/est.incidence.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/f_dev.html b/preview/pr309/reference/f_dev.html index 0d274b5a..6c17e029 100644 --- a/preview/pr309/reference/f_dev.html +++ b/preview/pr309/reference/f_dev.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/f_dev0.html b/preview/pr309/reference/f_dev0.html index cd3195e4..74fc216a 100644 --- a/preview/pr309/reference/f_dev0.html +++ b/preview/pr309/reference/f_dev0.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/fdev.html b/preview/pr309/reference/fdev.html index a27e7f75..efa6440f 100644 --- a/preview/pr309/reference/fdev.html +++ b/preview/pr309/reference/fdev.html @@ -11,7 +11,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/getAdditionalData.html b/preview/pr309/reference/getAdditionalData.html index fffee696..96f27e97 100644 --- a/preview/pr309/reference/getAdditionalData.html +++ b/preview/pr309/reference/getAdditionalData.html @@ -11,7 +11,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/get_additional_data.html b/preview/pr309/reference/get_additional_data.html index 3d6eed97..ed734e01 100644 --- a/preview/pr309/reference/get_additional_data.html +++ b/preview/pr309/reference/get_additional_data.html @@ -17,7 +17,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/graph.curve.params.html b/preview/pr309/reference/graph.curve.params.html index ee8685dc..57ccdcb5 100644 --- a/preview/pr309/reference/graph.curve.params.html +++ b/preview/pr309/reference/graph.curve.params.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/graph_loglik.html b/preview/pr309/reference/graph_loglik.html index e79086bc..470415bc 100644 --- a/preview/pr309/reference/graph_loglik.html +++ b/preview/pr309/reference/graph_loglik.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/index.html b/preview/pr309/reference/index.html index c0e135bf..8a150883 100644 --- a/preview/pr309/reference/index.html +++ b/preview/pr309/reference/index.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/ldpar.html b/preview/pr309/reference/ldpar.html index 1dc36be9..e349d989 100644 --- a/preview/pr309/reference/ldpar.html +++ b/preview/pr309/reference/ldpar.html @@ -15,7 +15,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/llik.html b/preview/pr309/reference/llik.html index 375e2a5b..de6d146a 100644 --- a/preview/pr309/reference/llik.html +++ b/preview/pr309/reference/llik.html @@ -15,7 +15,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/load_curve_params.html b/preview/pr309/reference/load_curve_params.html index 2fecb064..9ba395ae 100644 --- a/preview/pr309/reference/load_curve_params.html +++ b/preview/pr309/reference/load_curve_params.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/load_noise_params.html b/preview/pr309/reference/load_noise_params.html index 220c82f4..06e39cb9 100644 --- a/preview/pr309/reference/load_noise_params.html +++ b/preview/pr309/reference/load_noise_params.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/load_pop_data.html b/preview/pr309/reference/load_pop_data.html index de968316..76537b8e 100644 --- a/preview/pr309/reference/load_pop_data.html +++ b/preview/pr309/reference/load_pop_data.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/log_likelihood.html b/preview/pr309/reference/log_likelihood.html index bad58619..91b669fd 100644 --- a/preview/pr309/reference/log_likelihood.html +++ b/preview/pr309/reference/log_likelihood.html @@ -9,7 +9,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/mk_baseline.html b/preview/pr309/reference/mk_baseline.html index 9a323c2c..06e0515c 100644 --- a/preview/pr309/reference/mk_baseline.html +++ b/preview/pr309/reference/mk_baseline.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/mkbaseline.html b/preview/pr309/reference/mkbaseline.html index 8e7cad58..d9d13962 100644 --- a/preview/pr309/reference/mkbaseline.html +++ b/preview/pr309/reference/mkbaseline.html @@ -11,7 +11,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/plot_curve_params_one_ab.html b/preview/pr309/reference/plot_curve_params_one_ab.html index 4f0a49c9..a6c492d6 100644 --- a/preview/pr309/reference/plot_curve_params_one_ab.html +++ b/preview/pr309/reference/plot_curve_params_one_ab.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/print.seroincidence.by.html b/preview/pr309/reference/print.seroincidence.by.html index d65b5584..3b468640 100644 --- a/preview/pr309/reference/print.seroincidence.by.html +++ b/preview/pr309/reference/print.seroincidence.by.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/print.seroincidence.html b/preview/pr309/reference/print.seroincidence.html index 7930ee68..04ec02f5 100644 --- a/preview/pr309/reference/print.seroincidence.html +++ b/preview/pr309/reference/print.seroincidence.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/print.summary.seroincidence.by.html b/preview/pr309/reference/print.summary.seroincidence.by.html index d4550d32..ef2dea6e 100644 --- a/preview/pr309/reference/print.summary.seroincidence.by.html +++ b/preview/pr309/reference/print.summary.seroincidence.by.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/reexports.html b/preview/pr309/reference/reexports.html index b4613c4f..29f35c27 100644 --- a/preview/pr309/reference/reexports.html +++ b/preview/pr309/reference/reexports.html @@ -21,7 +21,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/row_longitudinal_parameter.html b/preview/pr309/reference/row_longitudinal_parameter.html index 7f44a19f..99baa224 100644 --- a/preview/pr309/reference/row_longitudinal_parameter.html +++ b/preview/pr309/reference/row_longitudinal_parameter.html @@ -9,7 +9,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/serocalculator.html b/preview/pr309/reference/serocalculator.html index 82d1db6d..9544c2cf 100644 --- a/preview/pr309/reference/serocalculator.html +++ b/preview/pr309/reference/serocalculator.html @@ -13,7 +13,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/sim.cs.html b/preview/pr309/reference/sim.cs.html index e15a6d78..0310f2cd 100644 --- a/preview/pr309/reference/sim.cs.html +++ b/preview/pr309/reference/sim.cs.html @@ -9,7 +9,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/sim.cs.multi.html b/preview/pr309/reference/sim.cs.multi.html index 58504943..0d2e7ed4 100644 --- a/preview/pr309/reference/sim.cs.multi.html +++ b/preview/pr309/reference/sim.cs.multi.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/simcs.tinf.html b/preview/pr309/reference/simcs.tinf.html index 8ef79fab..902e54ca 100644 --- a/preview/pr309/reference/simcs.tinf.html +++ b/preview/pr309/reference/simcs.tinf.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/simresp.tinf.html b/preview/pr309/reference/simresp.tinf.html index 77b3a0f6..9dea77b4 100644 --- a/preview/pr309/reference/simresp.tinf.html +++ b/preview/pr309/reference/simresp.tinf.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/strata.html b/preview/pr309/reference/strata.html index ad10db2e..efae5eba 100644 --- a/preview/pr309/reference/strata.html +++ b/preview/pr309/reference/strata.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/strata.seroincidence.by.html b/preview/pr309/reference/strata.seroincidence.by.html index 742dbec1..3538ef53 100644 --- a/preview/pr309/reference/strata.seroincidence.by.html +++ b/preview/pr309/reference/strata.seroincidence.by.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/stratify_data.html b/preview/pr309/reference/stratify_data.html index ecb3215e..2d19a09a 100644 --- a/preview/pr309/reference/stratify_data.html +++ b/preview/pr309/reference/stratify_data.html @@ -9,7 +9,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/sub-.seroincidence.by.html b/preview/pr309/reference/sub-.seroincidence.by.html index 351e6fe8..fe0cbfd1 100644 --- a/preview/pr309/reference/sub-.seroincidence.by.html +++ b/preview/pr309/reference/sub-.seroincidence.by.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/summary.pop_data.html b/preview/pr309/reference/summary.pop_data.html index 514f7ab5..d1685ce3 100644 --- a/preview/pr309/reference/summary.pop_data.html +++ b/preview/pr309/reference/summary.pop_data.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/summary.seroincidence.by.html b/preview/pr309/reference/summary.seroincidence.by.html index 0ac07c01..e0edc971 100644 --- a/preview/pr309/reference/summary.seroincidence.by.html +++ b/preview/pr309/reference/summary.seroincidence.by.html @@ -9,7 +9,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/summary.seroincidence.html b/preview/pr309/reference/summary.seroincidence.html index 904ce55b..bd2538c4 100644 --- a/preview/pr309/reference/summary.seroincidence.html +++ b/preview/pr309/reference/summary.seroincidence.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/reference/warn.missing.strata.html b/preview/pr309/reference/warn.missing.strata.html index 4e3a39bc..58226760 100644 --- a/preview/pr309/reference/warn.missing.strata.html +++ b/preview/pr309/reference/warn.missing.strata.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/search.json b/preview/pr309/search.json index e2cede87..06195479 100644 --- a/preview/pr309/search.json +++ b/preview/pr309/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement . complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to serocalculator","title":"Contributing to serocalculator","text":"outlines propose change serocalculator. detailed discussion contributing tidyverse packages, please see development contributing guide code review principles.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to serocalculator","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to serocalculator","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed). See guide create great issue advice.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to serocalculator","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"UCD-SERG/serocalculator\", fork = TRUE). Install development dependencies devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html. GitHub automatically check PR see package still functional Mac OS, Windows, Linux; , receive email describing problems. help decoding errors, try resource: https://github.com/r-lib/actions?tab=readme-ov-file#--find-help.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to serocalculator","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to serocalculator","text":"Please note serocalculator project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Enteric Fever Seroincidence Vignette","text":"vignette provides users example analysis using serocalculator package reproducing analysis : Estimating typhoid incidence community-based serosurveys: multicohort study (Aiemjoy et al. (2022)). review methods underlying analysis walk example enteric fever incidence Pakistan. Note simplified version analysis, results differ slightly presented publication. example, users determine seroincidence enteric fever cross-sectional serosurveys conducted part SeroEpidemiology Environmental Surveillance (SEES) enteric fever study Bangladesh, Nepal, Pakistan. Longitudinal antibody responses modeled 1420 blood culture-confirmed enteric fever cases enrolled countries.","code":""},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"load-packages","dir":"Articles","previous_headings":"Methods","what":"Load packages","title":"Enteric Fever Seroincidence Vignette","text":"first step conducting analysis load necessary packages. haven’t installed already, need loading: See Installation instructions details. serocalculator package installed, load R environment using library(), along packages may need data management; example, load tidyverse forcats:","code":"install.packages(\"serocalculator\") library(serocalculator) library(tidyverse) library(forcats)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"load-data","dir":"Articles","previous_headings":"","what":"Load data","title":"Enteric Fever Seroincidence Vignette","text":"Pathogen-specific sample datasets, noise parameters, longitudinal antibody dynamics serocalculator available Serocalculator Data Repository Open Science Framework (OSF). pull data directly R environment. Note dataset specific formatting variable name requirements.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"load-and-prepare-longitudinal-parameter-data","dir":"Articles","previous_headings":"Load data","what":"Load and prepare longitudinal parameter data","title":"Enteric Fever Seroincidence Vignette","text":"first load longitudinal curve parameters set antibody decay parameters. example, parameters modeled Bayesian hierarchical models fit two-phase power-function decay models longitudinal antibody responses among confirmed enteric fever cases. Formatting Specifications: Data imported “wide” dataframe one column parameter one row iteration posterior distribution antigen isotype. Column names must exactly match follow naming conventions: Note variable names case-sensitive","code":"# Import longitudinal antibody parameters from OSF curves <- \"https://osf.io/download/rtw5k/\" %>% load_curve_params()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"visualize-curve-parameters","dir":"Articles","previous_headings":"Load data","what":"Visualize curve parameters","title":"Enteric Fever Seroincidence Vignette","text":"can graph decay curves autoplot() method:","code":"# Visualize curve parameters curves %>% filter(antigen_iso == \"HlyE_IgA\" | antigen_iso == \"HlyE_IgG\") %>% autoplot()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"load-and-prepare-cross-sectional-data","dir":"Articles","previous_headings":"Load data","what":"Load and prepare cross-sectional data","title":"Enteric Fever Seroincidence Vignette","text":"Next, load sample cross-sectional data. use subset results SEES dataset. Ideally, representative sample general population without regard disease status. Later, limit analysis cross-sectional data Pakistan. selected hemolysin E (HlyE) target antigen IgG IgA target immunoglobulin isotypes. Users may select different serologic markers depending available data. original dataset, rename result age variables names required serocalculator. Formatting Specifications: Cross-sectional population data “long” dataframe one column variable one row antigen isotype resulted individual. individual one row results one antigen isotype. dataframe can additional variables, two required: Note variable names case sensitive","code":"#Import cross-sectional data from OSF and rename required variables xs_data <- readr::read_rds(\"https://osf.io/download//n6cp3/\") %>% as_pop_data()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"summarize-antibody-data","dir":"Articles","previous_headings":"Load data","what":"Summarize antibody data","title":"Enteric Fever Seroincidence Vignette","text":"can compute numerical summaries cross-sectional antibody data summary() method pop_data objects:","code":"xs_data %>% summary() #> #> n = 3336 #> #> Distribution of age: #> #> # A tibble: 1 × 7 #> n min first_quartile median mean third_quartile max #> #> 1 3336 0.6 5 10 10.5 15 25 #> #> Distributions of antigen-isotype measurements: #> #> # A tibble: 2 × 7 #> antigen_iso Min `1st Qu.` Median `3rd Qu.` Max `# NAs` #> #> 1 HlyE_IgA 0 0.851 1.74 3.66 133. 0 #> 2 HlyE_IgG 0 1.15 2.70 6.74 219. 0"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"visualize-antibody-data","dir":"Articles","previous_headings":"Load data","what":"Visualize antibody data","title":"Enteric Fever Seroincidence Vignette","text":"examine cross-sectional antibody data visualizing distribution quantitative antibody responses. , look distribution selected antigen isotype pairs, HlyE IgA HlyE IgG, across participating countries. see across countries, data highly skewed majority responses lower end data long tails. Let’s get better look distribution log transforming antibody response value. log transformed, data looks much normally distributed. cases, log transformation best way visualize serologic data. Let’s also take look antibody responses change age. plot, steeper slope indicates higher incidence. can see highest burden Bangladesh. Nepal slightly higher incidence older group (higher slope).","code":"#color palette country_pal <- c(\"#EA6552\", \"#8F4B86\", \"#0099B4FF\") xs_data %>% autoplot(strata = \"Country\", type = \"density\") + scale_fill_manual(values = country_pal) # Create log transformed plots xs_data %>% mutate(Country = fct_relevel(Country, \"Bangladesh\", \"Pakistan\", \"Nepal\")) %>% autoplot(strata = \"Country\", type = \"density\") + scale_fill_manual(values = country_pal) + scale_x_log10(labels = scales::label_comma()) #> Warning in scale_x_log10(labels = scales::label_comma()): log-10 #> transformation introduced infinite values. #> Warning: Removed 18 rows containing non-finite outside the scale range #> (`stat_density()`). #Plot antibody responses by age ggplot(data = xs_data %>% mutate(Country = fct_relevel( Country, \"Bangladesh\", \"Pakistan\", \"Nepal\" )), aes(x = age, y = value, color = Country)) + geom_point(size = 0.6, alpha = 0.7) + geom_smooth(method = \"lm\", se = FALSE) + scale_y_log10() + theme_linedraw() + labs(title = \"Quantitative Antibody Results by Age\", x = \"Age\", y = \"Value\") + scale_color_manual(values = country_pal)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"load-noise-parameters","dir":"Articles","previous_headings":"Load data","what":"Load noise parameters","title":"Enteric Fever Seroincidence Vignette","text":"Next, must set conditions based assumptions data errors may need accounted . differ based background knowledge data. biological noise, ν\\nu (“nu”), represents error cross-reactivity antibodies. defined 95th percentile distribution antibody responses antigen-isotype population exposure. Measurement noise, ε\\varepsilon (“epsilon”), represents measurement error laboratory testing process. defined CV (coefficient variation) ratio standard deviation mean replicates. Note CV ideally measured across plates rather within plate. Formatting Specifications: Noise parameter data dataframe one row antigen isotype columns noise parameter . Note variable names case-sensitive.","code":"# Import noise parameters from OSF noise <- url(\"https://osf.io/download//hqy4v/\") %>% readRDS()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"estimate-seroincidence","dir":"Articles","previous_headings":"","what":"Estimate Seroincidence","title":"Enteric Fever Seroincidence Vignette","text":"Now ready begin estimating seroincidence. conduct two separate analyses using two distinct functions, est.incidence est.incidence., calculate overall seroincidence stratified seroincidence, respectively.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"overall-seroincidence","dir":"Articles","previous_headings":"Estimate Seroincidence","what":"Overall Seroincidence","title":"Enteric Fever Seroincidence Vignette","text":"Using function est.incidence, filter sites Pakistan define datasets cross-sectional data (pop_data), longitudinal parameters (curve_param), noise parameters (noise_param). also define antigen-isotype pairs included estimate (antigen_isos). , chosen use two antigen isotypes, users can add additional pairs available.","code":"# Using est.incidence (no strata) est1 <- est.incidence( pop_data = xs_data %>% filter(Country == \"Pakistan\"), curve_param = curves, noise_param = noise %>% filter(Country == \"Pakistan\"), antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\") ) summary(est1) #> # A tibble: 1 × 10 #> est.start incidence.rate SE CI.lwr CI.upr coverage log.lik iterations #> #> 1 0.1 0.128 0.00682 0.115 0.142 0.95 -2376. 4 #> # ℹ 2 more variables: antigen.isos , nlm.convergence.code "},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"stratified-seroincidence","dir":"Articles","previous_headings":"Estimate Seroincidence","what":"Stratified Seroincidence","title":"Enteric Fever Seroincidence Vignette","text":"can also produce stratified seroincidence estimates. Users can select one stratification variables cross-sectional population dataset. Let’s compare estimates across countries age group. Note get warning uneven observations antigen isotypes, meaning participants results HlyE IgA HlyE IgG. warning indicates “Sample size stratum calculated minimum number observations across antigen isotypes”, participants antigen isotypes included. avoid , filter dataset include records specified antigen isotypes. set curve_strata_varnames = NULL avoid stratification “curves” dataset include strata variables. Without , warning appears: “curve_params missing strata variables, used unstratified”. stratify based variables exist longitudinal curve parameters dataset, specify variables using curve_strata_varnames, similar noise_strata_varnames used “noise” . Finally, let’s visualize seroincidence estimates country age category.","code":"#Using est.incidence.by (strata) est_country_age <- est.incidence.by( strata = c(\"Country\", \"ageCat\"), pop_data = xs_data, curve_params = curves, curve_strata_varnames = NULL, noise_params = noise, noise_strata_varnames = \"Country\", antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), num_cores = 8 # Allow for parallel processing to decrease run time ) #> Warning in count_strata(., strata_varnames): The number of observations in `data` varies between antigen isotypes, for at least one stratum. Sample size for each stratum will be calculated as the minimum number of observations across all antigen isotypes. #> Warning in check_parallel_cores(.): This computer appears to have 4 cores #> available. `est.incidence.by()` has reduced its `num_cores` argument to 3 to #> avoid destabilizing the computer. summary(est_country_age) #> Seroincidence estimated given the following setup: #> a) Antigen isotypes : HlyE_IgG, HlyE_IgA #> b) Strata : Country, ageCat #> #> Seroincidence estimates: #> # A tibble: 9 × 14 #> Stratum Country ageCat n est.start incidence.rate SE CI.lwr CI.upr #> #> 1 Stratum 1 Banglad… <5 101 0.1 0.400 0.0395 0.330 0.485 #> 2 Stratum 2 Banglad… 5-15 256 0.1 0.477 0.0320 0.418 0.544 #> 3 Stratum 3 Banglad… 16+ 44 0.1 0.449 0.0763 0.322 0.627 #> 4 Stratum 4 Nepal <5 171 0.1 0.0203 0.00444 0.0132 0.0311 #> 5 Stratum 5 Nepal 5-15 378 0.1 0.0355 0.00311 0.0299 0.0421 #> 6 Stratum 6 Nepal 16+ 211 0.1 0.0935 0.00776 0.0795 0.110 #> 7 Stratum 7 Pakistan <5 126 0.1 0.106 0.0136 0.0823 0.136 #> 8 Stratum 8 Pakistan 5-15 261 0.1 0.115 0.00845 0.0991 0.132 #> 9 Stratum 9 Pakistan 16+ 107 0.1 0.190 0.0204 0.154 0.235 #> # ℹ 5 more variables: coverage , log.lik , iterations , #> # antigen.isos , nlm.convergence.code # Plot seroincidence estimates ## Save summary(est_country_age) as a dataframe and sort by incidence rate est_country_agedf <- summary(est_country_age) %>% mutate( Country = fct_relevel(Country, \"Bangladesh\", \"Pakistan\", \"Nepal\"), ageCat = factor(ageCat) ) ## Create plot by country and age category ggplot(est_country_agedf, aes( y = fct_rev(ageCat), x = incidence.rate * 1000, #rescale incidence fill = Country )) + geom_bar(stat = \"identity\", position = position_dodge(), show.legend = TRUE) + geom_errorbar( aes(xmin = CI.lwr * 1000, xmax = CI.upr * 1000), #rescale CIs position = position_dodge(width = 0.9), width = .2 ) + labs(title = \"Enteric Fever Seroincidence by Country and Age\", x = \"Seroincidence rate per 1000 person-years\", y = \"Age Category\", fill = \"Country\") + theme_linedraw() + theme(axis.text.y = element_text(size = 11), axis.text.x = element_text(size = 11)) + scale_x_continuous(expand = c(0, 10)) + scale_fill_manual(values = country_pal)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"conclusions","dir":"Articles","previous_headings":"","what":"Conclusions","title":"Enteric Fever Seroincidence Vignette","text":"find Bangladesh highest overall seroincidence enteric fever rate 449 per 1000 person-years, well highest seroincidence age category. comparison, Nepal seroincidence rate 1 times lower Bangladesh (400 per 1000 person-years) lowest age-specific seroincidence rates three countries study. serocalculator provides efficient tool conduct analysis produce actionable results.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"Enteric Fever Seroincidence Vignette","text":"gratefully acknowledge study participants valuable time interest participating studies. Special thanks collaborators Sabin Vaccine Institute, Aga Khan University (Karachi, Pakistan), Child Health Research Foundation (Dhaka, Bangladesh), Dhulikhel Hospital, Kathmandu University Hospital (Dhulikhel, Nepal).","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/enteric_fever_example.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"Enteric Fever Seroincidence Vignette","text":"project supported grants National Institutes Health (NIH) National Institute Allergy Infectious Disease (R21AI176416), NIH Fogarty International Center (K01TW012177) Bill Melinda Gates Foundation.","code":""},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Methodology","text":"incidence rate disease specific time period rate individuals population acquiring disease time period [@Noordzij2010diseasemeasures]. Example: 10 new cases typhoid population 1000 persons one month time period, incidence rate time period 10 new cases per 1000 persons per month. mathematically, incidence rate given time point derivative (.e., current rate change time) expected cumulative count infections per person risk, time: ddt𝔼[C(t)n∣N(t)=n]\\frac{d}{dt} \\mathbb{E}\\left[\\frac{C(t)}{n} \\mid N(t) =n\\right] C(t)C(t) cumulative total number infections population interest, N(t)N(t) number individuals risk time tt. definitions, units incidence rate “# new infections per # persons risk per time duration”; example, “new infections per 1000 persons per year”. convenience, can rescale incidence rate make easier understand; example, might express incidence “# new infections per 1000 persons per year” “# new infections per 100,000 persons per day”, etc. perspective individual population: incidence rate (given time point (tt) instantaneous probability (density) becoming infected time point, given risk time point. , incidence rate hazard rate. Notation: let’s use λt\\lambda_{t} denote incidence rate time tt.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"defining-incidence","dir":"Articles","previous_headings":"","what":"Defining incidence","title":"Methodology","text":"incidence rate disease specific time period rate individuals population acquiring disease time period [@Noordzij2010diseasemeasures]. Example: 10 new cases typhoid population 1000 persons one month time period, incidence rate time period 10 new cases per 1000 persons per month.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"mathematical-definition-of-incidence","dir":"Articles","previous_headings":"","what":"Mathematical definition of incidence","title":"Methodology","text":"mathematically, incidence rate given time point derivative (.e., current rate change time) expected cumulative count infections per person risk, time: ddt𝔼[C(t)n∣N(t)=n]\\frac{d}{dt} \\mathbb{E}\\left[\\frac{C(t)}{n} \\mid N(t) =n\\right] C(t)C(t) cumulative total number infections population interest, N(t)N(t) number individuals risk time tt.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"scale-of-incidence-rates","dir":"Articles","previous_headings":"","what":"Scale of incidence rates","title":"Methodology","text":"definitions, units incidence rate “# new infections per # persons risk per time duration”; example, “new infections per 1000 persons per year”. convenience, can rescale incidence rate make easier understand; example, might express incidence “# new infections per 1000 persons per year” “# new infections per 100,000 persons per day”, etc.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"incidence-from-an-individuals-perspective","dir":"Articles","previous_headings":"","what":"Incidence from an individual’s perspective","title":"Methodology","text":"perspective individual population: incidence rate (given time point (tt) instantaneous probability (density) becoming infected time point, given risk time point. , incidence rate hazard rate. Notation: let’s use λt\\lambda_{t} denote incidence rate time tt.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"estimating-incidence-from-cross-sectional-antibody-surveys","dir":"Articles","previous_headings":"","what":"Estimating incidence from cross-sectional antibody surveys","title":"Methodology","text":"Typically, difficult estimate changes single time point. However, can sometimes make assumptions allow us . particular, assume incidence rate constant time, can estimate incidence single cross-sectional survey. need two pieces notation formalize process. recruit participants population interest. survey participant, measure antibody levels (Y)(Y) disease interest participant recently infected time (T)(T)prior measured antibodies. participant never infected since birth, TT undefined. TT latent, unobserved variable. don’t directly observe TT; observe YY, hope tells us something TT λ\\lambda. assume : incidence rate approximately constant time across population (“constant homogenous incidence”) : λi,t=λ,∀,t\\lambda_{,t} = \\lambda, \\forall ,t (can analyze subpopulations separately make homogeneity plausible.) Participants always risk new infection, regardless recently infected (“lasting immunity”). (diseases like typhoid, -immunity assumption may hold exactly, hopefully approximately; modeling effects re-exposure active infection -list). assumptions: TT exponential distribution: 𝕡(T=t)=λexp{−λt}\\mathbb{p}(T=t) = \\lambda \\exp{\\left\\{-\\lambda t\\right\\}} precisely, distribution exponential truncated age observation (aa): 𝕡(T=t|=)=1t∈[0,]λexp{−λt}+1t=NAexp{−λa}\\mathbb{p}(T=t|=) = 1_{t \\[0,]}\\lambda \\exp{\\left\\{-\\lambda t\\right\\}} + 1_{t = \\text{NA}} \\exp{\\left\\{-\\lambda \\right\\}} rate parameter λ\\lambda incidence rate time--event model, looking backwards time survey date (blood sample collected). probability individual last infected tt days ago, p(T=t)p(T=t), equal probability infected time tt (.e., incidence rate time tt, λ\\lambda) times probability infected time tt, turns exp(−λt)\\exp(-\\lambda t). distribution TT truncated patient’s birth date; probability never infected exp{−λa}\\exp{\\left\\{-\\lambda \\right\\}}, aa patient’s age time survey. observe TT, estimate λ\\lambda using typical maximum likelihood approach. Starting likelihood: Taking logarithm likelihood: Taking derivative log-likelihood find score function: Setting score function equal 0 find score equation, solving score equation λ\\lambda find maximum likelihood estimate: ℒ*(λ)=∏=1n𝕡(T=ti)=∏=1nλexp(−λti)\\mathcal{L}^*(\\lambda) = \\prod_{=1}^n \\mathbb{p}(T=t_i) = \\prod_{=1}^n \\lambda \\exp(-\\lambda t_i) ℓ*(λ)=log{ℒ*(λ)}=∑=1nlog{λ}−λti\\ell^*(\\lambda) = \\log{\\left\\{\\mathcal{L}^*(\\lambda)\\right\\}} = \\sum_{=1}^n \\log{\\left\\{\\lambda\\right\\}} -\\lambda t_i ℓ*′(λ)=∑=1nλ−1−ti\\ell^{*'}(\\lambda) = \\sum_{=1}^n \\lambda^{-1} - t_i λ̂ML=n∑=1nti=1t‾\\hat{\\lambda}_{\\text{ML}} = \\frac{n}{\\sum_{=1}^n t_i} = \\frac{1}{\\bar{t}} MLE turns inverse mean. ’s look like: Figure 1: Example log(likelihood) curves standard error estimate approximately equal inverse rate curvature (2nd derivative, aka Hessian) log-likelihood function, maximum: curvature -> likelihood peak clearer -> smaller standard errors Unfortunately, don’t observe infection times TT; observe antibody levels Y{Y}. things get little complicated. short, hoping can estimate TT (time since last infection) YY (current antibody levels). , plug estimates t̂\\hat t_i likelihood , estimate λ\\lambda previously. ’re actually going something little nuanced; instead just using one value t̂\\hat t, going consider possible values tt individual. need link data actually observed incidence rate. likelihood individual’s observed data, 𝕡(Y=y)\\mathbb{p}(Y=y), can expressed integral joint likelihood YY TT (using Law Total Probability): 𝕡(Y=y)=∫t𝕡(Y=y,T=t)dt\\mathbb{p}(Y=y) = \\int_t \\mathbb{p}(Y=y,T=t)dt , can express joint probability p(Y=y,T=t)p(Y=y,T=t) product p(T=t)p(T=t) p(Y=y|T=t)p(Y=y|T=t) “antibody response curve infection”. : 𝕡(Y=y,T=t)=𝕡(Y=y|T=t)𝕡(T=t)\\mathbb{p}(Y=y,T=t) = \\mathbb{p}(Y=y|T=t) \\mathbb{p}(T=t) Figure 2: Antibody response curves, p(Y=y|T=t)p(Y=y|T=t), typhoid Substituting p(Y=y,T=t)=p(Y=y|T=t)P(T=t)p(Y=y,T=t) = p(Y=y|T=t)P(T=t) previous expression p(Y=y)p(Y=y): p(Y=y)=∫tp(Y=y|T=t)P(T=t)dt \\begin{aligned} p(Y=y) &= \\int_t p(Y=y|T=t)P(T=t) dt \\end{aligned} Now, likelihood observed data 𝐲=(y1,y2,...,yn)\\mathbf{y} = (y_1, y_2, ..., y_n) : ℒ(λ)=∏=1np(Y=yi)=∏=1n∫tp(Y=yi|T=t)pλ(T=t)dt \\begin{aligned} \\mathcal{L}(\\lambda) &= \\prod_{=1}^n p(Y=y_i) \\\\&= \\prod_{=1}^n \\int_t p(Y=y_i|T=t)p_\\lambda(T=t)dt\\\\ \\end{aligned} know p(Y=y|T=t)p(Y=y|T=t), can maximize ℒ(λ)\\mathcal{L}(\\lambda) λ\\lambda find “maximum likelihood estimate” (MLE) λ\\lambda, denoted λ̂\\hat\\lambda. likelihood YY involves product integrals, log-likelihood involves sum logs integrals: logℒ(λ)=log∏=1n∫tp(Y=yi|T=t)pλ(T=t)dt=∑=1nlog{∫tp(Y=yi|T=t)pλ(T=t)dt} \\begin{aligned} \\log \\mathcal{L} (\\lambda) &= \\log \\prod_{=1}^n \\int_t p(Y=y_i|T=t)p_\\lambda(T=t)dt\\\\ &= \\sum_{=1}^n \\log\\left\\{\\int_t p(Y=y_i|T=t)p_\\lambda(T=t)dt\\right\\}\\\\ \\end{aligned} derivative expression doesn’t come cleanly, use numerical method (specifically, Newton-type algorithm, implemented stats::nlm()) find MLE corresponding standard error.","code":"library(serocalculator) library(dplyr) Attaching package: 'dplyr' The following objects are masked from 'package:stats': filter, lag The following objects are masked from 'package:base': intersect, setdiff, setequal, union # Import longitudinal antibody parameters from OSF curves <- \"https://osf.io/download/rtw5k/\" %>% load_curve_params() %>% filter(iter < 50) # Import cross-sectional data from OSF and rename required variables: xs_data <- \"https://osf.io/download//n6cp3/\" %>% load_pop_data() noise <- url(\"https://osf.io/download//hqy4v/\") %>% readRDS() lik_HlyE_IgA <- graph_loglik( pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = \"HlyE_IgA\", log_x = TRUE ) lik_HlyE_IgG <- graph_loglik( previous_plot = lik_HlyE_IgA, pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = \"HlyE_IgG\", log_x = TRUE ) lik_both <- graph_loglik( previous_plot = lik_HlyE_IgG, pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), log_x = TRUE ) print(lik_both)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"cross-sectional-antibody-surveys","dir":"Articles","previous_headings":"","what":"Cross-sectional antibody surveys","title":"Methodology","text":"Typically, difficult estimate changes single time point. However, can sometimes make assumptions allow us . particular, assume incidence rate constant time, can estimate incidence single cross-sectional survey. need two pieces notation formalize process. recruit participants population interest. survey participant, measure antibody levels (Y)(Y) disease interest participant recently infected time (T)(T)prior measured antibodies. participant never infected since birth, TT undefined. TT latent, unobserved variable. don’t directly observe TT; observe YY, hope tells us something TT λ\\lambda.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"modeling-assumptions","dir":"Articles","previous_headings":"","what":"Modeling assumptions","title":"Methodology","text":"assume : incidence rate approximately constant time across population (“constant homogenous incidence”) : λi,t=λ,∀,t\\lambda_{,t} = \\lambda, \\forall ,t (can analyze subpopulations separately make homogeneity plausible.) Participants always risk new infection, regardless recently infected (“lasting immunity”). (diseases like typhoid, -immunity assumption may hold exactly, hopefully approximately; modeling effects re-exposure active infection -list).","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"time-since-infection-and-incidence","dir":"Articles","previous_headings":"","what":"Time since infection and incidence","title":"Methodology","text":"assumptions: TT exponential distribution: 𝕡(T=t)=λexp{−λt}\\mathbb{p}(T=t) = \\lambda \\exp{\\left\\{-\\lambda t\\right\\}} precisely, distribution exponential truncated age observation (aa): 𝕡(T=t|=)=1t∈[0,]λexp{−λt}+1t=NAexp{−λa}\\mathbb{p}(T=t|=) = 1_{t \\[0,]}\\lambda \\exp{\\left\\{-\\lambda t\\right\\}} + 1_{t = \\text{NA}} \\exp{\\left\\{-\\lambda \\right\\}} rate parameter λ\\lambda incidence rate time--event model, looking backwards time survey date (blood sample collected). probability individual last infected tt days ago, p(T=t)p(T=t), equal probability infected time tt (.e., incidence rate time tt, λ\\lambda) times probability infected time tt, turns exp(−λt)\\exp(-\\lambda t). distribution TT truncated patient’s birth date; probability never infected exp{−λa}\\exp{\\left\\{-\\lambda \\right\\}}, aa patient’s age time survey.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"likelihood-of-latent-infection-times","dir":"Articles","previous_headings":"","what":"Likelihood of latent infection times","title":"Methodology","text":"observe TT, estimate λ\\lambda using typical maximum likelihood approach. Starting likelihood: Taking logarithm likelihood: Taking derivative log-likelihood find score function: Setting score function equal 0 find score equation, solving score equation λ\\lambda find maximum likelihood estimate: ℒ*(λ)=∏=1n𝕡(T=ti)=∏=1nλexp(−λti)\\mathcal{L}^*(\\lambda) = \\prod_{=1}^n \\mathbb{p}(T=t_i) = \\prod_{=1}^n \\lambda \\exp(-\\lambda t_i) ℓ*(λ)=log{ℒ*(λ)}=∑=1nlog{λ}−λti\\ell^*(\\lambda) = \\log{\\left\\{\\mathcal{L}^*(\\lambda)\\right\\}} = \\sum_{=1}^n \\log{\\left\\{\\lambda\\right\\}} -\\lambda t_i ℓ*′(λ)=∑=1nλ−1−ti\\ell^{*'}(\\lambda) = \\sum_{=1}^n \\lambda^{-1} - t_i λ̂ML=n∑=1nti=1t‾\\hat{\\lambda}_{\\text{ML}} = \\frac{n}{\\sum_{=1}^n t_i} = \\frac{1}{\\bar{t}} MLE turns inverse mean.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"example-log-likelihood-curves","dir":"Articles","previous_headings":"","what":"Example log-likelihood curves","title":"Methodology","text":"’s look like: Figure 1: Example log(likelihood) curves","code":"library(serocalculator) library(dplyr) Attaching package: 'dplyr' The following objects are masked from 'package:stats': filter, lag The following objects are masked from 'package:base': intersect, setdiff, setequal, union # Import longitudinal antibody parameters from OSF curves <- \"https://osf.io/download/rtw5k/\" %>% load_curve_params() %>% filter(iter < 50) # Import cross-sectional data from OSF and rename required variables: xs_data <- \"https://osf.io/download//n6cp3/\" %>% load_pop_data() noise <- url(\"https://osf.io/download//hqy4v/\") %>% readRDS() lik_HlyE_IgA <- graph_loglik( pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = \"HlyE_IgA\", log_x = TRUE ) lik_HlyE_IgG <- graph_loglik( previous_plot = lik_HlyE_IgA, pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = \"HlyE_IgG\", log_x = TRUE ) lik_both <- graph_loglik( previous_plot = lik_HlyE_IgG, pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), log_x = TRUE ) print(lik_both)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"standard-error","dir":"Articles","previous_headings":"","what":"standard error","title":"Methodology","text":"standard error estimate approximately equal inverse rate curvature (2nd derivative, aka Hessian) log-likelihood function, maximum: curvature -> likelihood peak clearer -> smaller standard errors","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"likelihood-of-observed-data","dir":"Articles","previous_headings":"","what":"Likelihood of observed data","title":"Methodology","text":"Unfortunately, don’t observe infection times TT; observe antibody levels Y{Y}. things get little complicated. short, hoping can estimate TT (time since last infection) YY (current antibody levels). , plug estimates t̂\\hat t_i likelihood , estimate λ\\lambda previously. ’re actually going something little nuanced; instead just using one value t̂\\hat t, going consider possible values tt individual. need link data actually observed incidence rate. likelihood individual’s observed data, 𝕡(Y=y)\\mathbb{p}(Y=y), can expressed integral joint likelihood YY TT (using Law Total Probability): 𝕡(Y=y)=∫t𝕡(Y=y,T=t)dt\\mathbb{p}(Y=y) = \\int_t \\mathbb{p}(Y=y,T=t)dt , can express joint probability p(Y=y,T=t)p(Y=y,T=t) product p(T=t)p(T=t) p(Y=y|T=t)p(Y=y|T=t) “antibody response curve infection”. : 𝕡(Y=y,T=t)=𝕡(Y=y|T=t)𝕡(T=t)\\mathbb{p}(Y=y,T=t) = \\mathbb{p}(Y=y|T=t) \\mathbb{p}(T=t)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"antibody-response-curves","dir":"Articles","previous_headings":"","what":"Antibody response curves","title":"Methodology","text":"Figure 2: Antibody response curves, p(Y=y|T=t)p(Y=y|T=t), typhoid","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"","what":"Putting it all together","title":"Methodology","text":"Substituting p(Y=y,T=t)=p(Y=y|T=t)P(T=t)p(Y=y,T=t) = p(Y=y|T=t)P(T=t) previous expression p(Y=y)p(Y=y): p(Y=y)=∫tp(Y=y|T=t)P(T=t)dt \\begin{aligned} p(Y=y) &= \\int_t p(Y=y|T=t)P(T=t) dt \\end{aligned}","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"composing-the-likelihood","dir":"Articles","previous_headings":"","what":"Composing the likelihood","title":"Methodology","text":"Now, likelihood observed data 𝐲=(y1,y2,...,yn)\\mathbf{y} = (y_1, y_2, ..., y_n) : ℒ(λ)=∏=1np(Y=yi)=∏=1n∫tp(Y=yi|T=t)pλ(T=t)dt \\begin{aligned} \\mathcal{L}(\\lambda) &= \\prod_{=1}^n p(Y=y_i) \\\\&= \\prod_{=1}^n \\int_t p(Y=y_i|T=t)p_\\lambda(T=t)dt\\\\ \\end{aligned} know p(Y=y|T=t)p(Y=y|T=t), can maximize ℒ(λ)\\mathcal{L}(\\lambda) λ\\lambda find “maximum likelihood estimate” (MLE) λ\\lambda, denoted λ̂\\hat\\lambda.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"finding-the-mle-numerically","dir":"Articles","previous_headings":"","what":"Finding the MLE numerically","title":"Methodology","text":"likelihood YY involves product integrals, log-likelihood involves sum logs integrals: logℒ(λ)=log∏=1n∫tp(Y=yi|T=t)pλ(T=t)dt=∑=1nlog{∫tp(Y=yi|T=t)pλ(T=t)dt} \\begin{aligned} \\log \\mathcal{L} (\\lambda) &= \\log \\prod_{=1}^n \\int_t p(Y=y_i|T=t)p_\\lambda(T=t)dt\\\\ &= \\sum_{=1}^n \\log\\left\\{\\int_t p(Y=y_i|T=t)p_\\lambda(T=t)dt\\right\\}\\\\ \\end{aligned} derivative expression doesn’t come cleanly, use numerical method (specifically, Newton-type algorithm, implemented stats::nlm()) find MLE corresponding standard error.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"modeling-the-seroresponse-kinetics-curve","dir":"Articles","previous_headings":"","what":"Modeling the seroresponse kinetics curve","title":"Methodology","text":"Now, need model antibody response infection, 𝕡(Y=y|T=t)\\mathbb{p}(Y=y|T=t). current version serocalculator package uses two-phase model shape seroresponse [@Teunis_2016]. first phase model represents active infection period, uses simplified Lotka-Volterra predator-prey model [@volterra1928variations] pathogen prey antibodies predator: Notation: x(t)x(t): Pathogen concentration time tt y(t)y(t): Antibody concentration time tt Model: x′(t)=αx(t)−βy(t)x'(t) = \\alpha x(t) - \\beta y(t) y′(t)=δy(t)y'(t) = \\delta y(t) baseline antibody concentration y(0)=y0y(0) = y_{0} initial pathogen concentration x(0)=x0x(0) = x_{0}. Compared standard LV model: predation term β\\beta coefficient missing prey concentration x(t)x(t) factor; assume efficiency predation doesn’t depend pathogen concentration. differential equation predator density missing predator death rate term −γy(t)-\\gamma y(t); assume long pathogens present, antibody decay rate negligible compared growth rate. predator growth rate term δy(t)\\delta y(t) missing prey density factor x(t)x(t) assume long pathogens present, antibody concentration grows exponential rate. omissions made simplify estimation process, assumption negligible compared terms model. b(t)=0b(t) = 0 y′(t)=−αy(t)ry^{\\prime}(t) = -\\alpha y(t)^r Antibody decay different exponential (log–linear) decay. shape parameter r>1r > 1, log concentrations decrease rapidly infection terminated, decay slows low antibody concentrations maintained long period. r=1r = 1, model reduces exponential decay decay rate α\\alpha. serum antibody response y(t)y(t) can written y(t)=y+(t)+y−(t) y(t) = y_{+}(t) + y_{-}(t) y+(t)=y0eμt[0≤t% load_curve_params() %>% filter(iter < 50) curve1 = curves %>% filter( # iter %in% 1:10, iter == 5, antigen_iso == cur_ai) library(ggplot2) curve1 %>% serocalculator:::plot_curve_params_one_ab( log_y = FALSE ) + xlim(0, 100) + theme_minimal() + geom_vline( aes(xintercept = curve1$t1, col = \"t1\") ) + geom_hline( aes(yintercept = curve1$y0, col = \"y0\") ) + geom_hline( aes(yintercept = curve1$y1, col = \"y1\") ) + # geom_point( # data = curve1, # aes( # x = t1, # y = y1, # col = \"(t1,y1)\" # ) # ) + theme(legend.position = \"bottom\") + labs(col = \"\") Scale for x is already present. Adding another scale for x, which will replace the existing scale."},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"model-for-active-infection-period","dir":"Articles","previous_headings":"","what":"Model for active infection period","title":"Methodology","text":"first phase model represents active infection period, uses simplified Lotka-Volterra predator-prey model [@volterra1928variations] pathogen prey antibodies predator: Notation: x(t)x(t): Pathogen concentration time tt y(t)y(t): Antibody concentration time tt Model: x′(t)=αx(t)−βy(t)x'(t) = \\alpha x(t) - \\beta y(t) y′(t)=δy(t)y'(t) = \\delta y(t) baseline antibody concentration y(0)=y0y(0) = y_{0} initial pathogen concentration x(0)=x0x(0) = x_{0}. Compared standard LV model: predation term β\\beta coefficient missing prey concentration x(t)x(t) factor; assume efficiency predation doesn’t depend pathogen concentration. differential equation predator density missing predator death rate term −γy(t)-\\gamma y(t); assume long pathogens present, antibody decay rate negligible compared growth rate. predator growth rate term δy(t)\\delta y(t) missing prey density factor x(t)x(t) assume long pathogens present, antibody concentration grows exponential rate. omissions made simplify estimation process, assumption negligible compared terms model.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"model-for-post-infection-antibody-decay","dir":"Articles","previous_headings":"","what":"Model for post-infection antibody decay","title":"Methodology","text":"b(t)=0b(t) = 0 y′(t)=−αy(t)ry^{\\prime}(t) = -\\alpha y(t)^r Antibody decay different exponential (log–linear) decay. shape parameter r>1r > 1, log concentrations decrease rapidly infection terminated, decay slows low antibody concentrations maintained long period. r=1r = 1, model reduces exponential decay decay rate α\\alpha.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"putting-it-all-together-1","dir":"Articles","previous_headings":"","what":"Putting it all together","title":"Methodology","text":"serum antibody response y(t)y(t) can written y(t)=y+(t)+y−(t) y(t) = y_{+}(t) + y_{-}(t) y+(t)=y0eμt[0≤t% load_curve_params() %>% filter(iter < 50) curve1 = curves %>% filter( # iter %in% 1:10, iter == 5, antigen_iso == cur_ai) library(ggplot2) curve1 %>% serocalculator:::plot_curve_params_one_ab( log_y = FALSE ) + xlim(0, 100) + theme_minimal() + geom_vline( aes(xintercept = curve1$t1, col = \"t1\") ) + geom_hline( aes(yintercept = curve1$y0, col = \"y0\") ) + geom_hline( aes(yintercept = curve1$y1, col = \"y1\") ) + # geom_point( # data = curve1, # aes( # x = t1, # y = y1, # col = \"(t1,y1)\" # ) # ) + theme(legend.position = \"bottom\") + labs(col = \"\") Scale for x is already present. Adding another scale for x, which will replace the existing scale."},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"biological-noise","dir":"Articles","previous_headings":"","what":"Biological noise","title":"Methodology","text":"measure antibody concentrations blood sample, essentially counting molecules (using biochemistry). might miss antibodies (undercount, false negatives) also might incorrectly count molecules aren’t actually ones looking (overcount, false positives, cross-reactivity). concerned overcount (cross-reactivity) undercount. given antibody, can analytical work beforehand estimate distribution overcounts, add model p(Y=y|T=t)p(Y=y|T=t). Notation: yobsy_\\text{obs}: measured serum antibody concentration ytruey_\\text{true}: “true” serum antibody concentration ϵb\\epsilon_b: noise due probe cross-reactivity Model: yobs=ytrue+ϵby_\\text{obs} = y_\\text{true} + \\epsilon_b ϵb∼Unif(0,ν)\\epsilon_b \\sim \\text{Unif}(0, \\nu) ν\\nu needs pre-estimated using negative controls, typically using 95th percentile distribution antibody responses antigen-isotype population exposure.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/methodology.html","id":"measurement-noise","dir":"Articles","previous_headings":"","what":"Measurement noise","title":"Methodology","text":"also sources noise bioassays; user differences pipetting technique, random ELISA plate effects, etc. noise can cause overcount undercount. can also estimate magnitude noise source, include p(Y=y|T=t)p(Y=y|T=t). Measurement noise, ε\\varepsilon (“epsilon”), represents measurement error laboratory testing process. defined CV (coefficient variation) ratio standard deviation mean replicates. Note CV ideally measured across plates rather within plate.","code":""},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Scrub Typhus Seroincidence Vignette","text":"vignette reproduces analysis : Estimating seroincidence scrub typhus using antibody dynamics following infection (Aiemjoy et al. (Accepted Feb 2024)).","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"methods","dir":"Articles","previous_headings":"","what":"Methods","title":"Scrub Typhus Seroincidence Vignette","text":"serocalculator R package provides rapid computationally simple method calculating seroconversion rates, originally published Simonsen et al. (2009) Teunis et al. (2012), developed subsequent publications deGraaf et al. (2014), Teunis et al. (2016), Teunis Eijkeren (2020). short, longitudinal seroresponses confirmed cases known symptom onset date assumed represent time course human serum antibodies specific pathogen. Therefore, using longitudinal antibody dynamics cross–sectional sample antibodies human population, incidence estimate can calculated.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"the-seroincidence-estimator","dir":"Articles","previous_headings":"Methods","what":"The Seroincidence Estimator","title":"Scrub Typhus Seroincidence Vignette","text":"serocalculator package designed calculate incidence seroconversion using longitudinal seroresponse characteristics. distribution serum antibody concentrations cross–sectional population sample calculated function longitudinal seroresponse frequency seroconversion (seroincidence). Given seroresponse, marginal distribution antibody concentrations can fitted cross-sectional data thereby providing means estimate seroincidence.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"scrub-typhus-seroincidence","dir":"Articles","previous_headings":"","what":"Scrub Typhus Seroincidence","title":"Scrub Typhus Seroincidence Vignette","text":"Scrub typhus, vector-borne bacterial infection, important neglected disease globally. Accurately characterizing burden challenging due non-specific symptoms limited diagnostics. Prior seroepidemiology studies struggled find consensus cutoffs permit comparing estimates across contexts time. study, present novel approach require cutoff instead uses information antibody kinetics infection estimate seroincidence. use data three cohorts scrub typhus patients Chiang Rai, Thailand, Vellore, India characterize antibody kinetics infection two population serosurveys Kathmandu valley, Nepal, Tamil Nadu, India estimate seroincidence. samples tested IgM IgG responses Orientia tsutsugamushi-derived recombinant 56-kDa antigen using commercial ELISA kits. used Bayesian hierarchical models characterize antibody responses scrub typhus infection used joint distributions peak antibody titers decay rates estimate population-level incidence rates cross-sectional serosurveys.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"load-packages","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence","what":"Load packages","title":"Scrub Typhus Seroincidence Vignette","text":"first step conducting analysis load necessary packages. haven’t installed already, need loading. also need tidyverse mixtools packages installed data manipulation graphics operations perform vignette. Please see websites serocalculator, tidyverse, mixtools guidance installing packages R package library. three packages installed, can load active R session environment:","code":"library(serocalculator) library(tidyverse) library(mixtools)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"load-data","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence","what":"Load data","title":"Scrub Typhus Seroincidence Vignette","text":"Pathogen-specific sample datasets, noise parameters, longitudinal antibody dynamics serocalculator available Serocalculator Repository Open Science Framework (OSF). pull data directly R environment.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"load-and-prepare-longitudinal-parameter-data","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence > Load data","what":"Load and prepare longitudinal parameter data","title":"Scrub Typhus Seroincidence Vignette","text":"first load longitudinal curve parameters set antibody decay parameters. parameters modeled Bayesian hierarchical models fit two-phase power-function decay models longitudinal antibody responses among confirmed enteric fever cases.","code":"# Import longitudinal antibody parameters from OSF curves <- \"https://osf.io/download/u5gxh/\" %>% load_curve_params()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"visualize-curve-parameters","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence > Load data","what":"Visualize curve parameters","title":"Scrub Typhus Seroincidence Vignette","text":"can graph decay curves autoplot() method:","code":"curves %>% autoplot()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"load-and-prepare-cross-sectional-data","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence > Load data","what":"Load and prepare cross-sectional data","title":"Scrub Typhus Seroincidence Vignette","text":"Next, load sample cross-sectional data.","code":"# Import cross-sectional data from OSF and rename required variables xs_data <- load_pop_data( file_path = \"https://osf.io/download/h5js4/\", age = \"Age\", value = \"result\", id = \"index_id\", standardize = TRUE )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"check-formatting","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence > Load data","what":"Check formatting","title":"Scrub Typhus Seroincidence Vignette","text":"can check xs_data correct formatting using check_pop_data() function:","code":"xs_data %>% check_pop_data(verbose = TRUE) #> data format is as expected."},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"summarize-antibody-data","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence > Load data","what":"Summarize antibody data","title":"Scrub Typhus Seroincidence Vignette","text":"can compute numerical summaries cross-sectional antibody data summary() method pop_data objects:","code":"xs_data %>% summary(strata = \"country\") #> Warning: There were 2 warnings in `dplyr::summarize()`. #> The first warning was: #> ℹ In argument: `across(...)`. #> ℹ In group 4: `antigen_iso = OT56kda_IgM` and `country = Nepal`. #> Caused by warning in `min()`: #> ! no non-missing arguments to min; returning Inf #> ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning. #> #> n = 1608 #> #> Distribution of age: #> #> # A tibble: 2 × 8 #> country n min first_quartile median mean third_quartile max #> #> 1 India 721 18 40 49 50.5 62 87 #> 2 Nepal 887 0.9 5.5 10.9 11.6 17.0 27.4 #> #> Distributions of antigen-isotype measurements: #> #> # A tibble: 4 × 8 #> antigen_iso country Min `1st Qu.` Median `3rd Qu.` Max `# NAs` #> #> 1 OT56kda_IgG India 0.05 0.111 0.222 2.56 3.81 0 #> 2 OT56kda_IgM India 0.051 0.1 0.139 0.229 3.60 0 #> 3 OT56kda_IgG Nepal 0.112 0.335 0.464 0.602 3.29 0 #> 4 OT56kda_IgM Nepal Inf NA NA NA -Inf 1105"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"visualize-antibody-data","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence > Load data","what":"Visualize antibody data","title":"Scrub Typhus Seroincidence Vignette","text":"Let’s also take look antibody responses change age.","code":"# Plot antibody responses by age autoplot(object = xs_data, type = \"age-scatter\", strata = \"Country\") #> Warning: Removed 1105 rows containing missing values or values outside the scale range #> (`geom_point()`)."},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"compile-noise-parameters","dir":"Articles","previous_headings":"Scrub Typhus Seroincidence","what":"Compile noise parameters","title":"Scrub Typhus Seroincidence Vignette","text":"Next, must set conditions based assumptions data errors may need accounted . differ based background knowledge data. biological noise, ν\\nu (“nu”), represents error cross-reactivity antibodies. Measurement noise, ε\\varepsilon (“epsilon”), represents error laboratory testing process. Formatting Specifications: Noise parameter data dataframe one row antigen isotype columns noise parameter . Note variable names case-sensitive.","code":"# biologic noise b_noise <- xs_data %>% group_by(antigen_iso) %>% filter(!is.na(value)) %>% filter(age < 40) %>% # restrict to young ages to capture recent exposures do({ set.seed(54321) # Fit the mixture model mixmod <- normalmixEM(.$value, k = 2, maxit = 1000) # k is the number of components, adjust as necessary # Assuming the first component is the lower distribution: lower_mu <- mixmod$mu[1] lower_sigma <- sqrt(mixmod$sigma[1]) # Calculate the 90th percentile of the lower distribution percentile75 <- qnorm(0.75, lower_mu, lower_sigma) # Return the results data.frame(antigen_iso = .$antigen_iso[1], percentile75 = percentile75) }) #> number of iterations= 35 #> number of iterations= 24 # define conditional parameters noise <- data.frame( antigen_iso = c(\"OT56kda_IgG\", \"OT56kda_IgM\"), nu = as.numeric(c(b_noise[2, 2], b_noise[1, 2])), # Biologic noise (nu) eps = c(0.2, 0.2), # M noise (eps) y.low = c(0.2, 0.2), # low cutoff (llod) y.high = c(200, 200) ) %>% # high cutoff (y.high) mutate(across(where(is.numeric), round, digits = 2))"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"estimate-seroincidence-by-study-site","dir":"Articles","previous_headings":"","what":"Estimate Seroincidence by study site","title":"Scrub Typhus Seroincidence Vignette","text":"Now ready begin estimating seroincidence. use est.incidence.calculate stratified seroincidence rates.","code":"# Using est.incidence.by (strata) est <- est.incidence.by( strata = c(\"country\"), pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = c(\"OT56kda_IgG\"), num_cores = 8 # Allow for parallel processing to decrease run time ) #> Warning in warn.missing.strata(data = curve_params, strata = strata %>% : curve_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning in warn.missing.strata(data = noise_params, strata = strata %>% : noise_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning in check_parallel_cores(.): This computer appears to have 4 cores #> available. `est.incidence.by()` has reduced its `num_cores` argument to 3 to #> avoid destabilizing the computer. summary(est) #> Seroincidence estimated given the following setup: #> a) Antigen isotypes : OT56kda_IgG #> b) Strata : country #> #> Seroincidence estimates: #> # A tibble: 2 × 13 #> Stratum country n est.start incidence.rate SE CI.lwr CI.upr coverage #> #> 1 Stratu… India 721 0.1 0.0202 0.00148 0.0175 0.0233 0.95 #> 2 Stratu… Nepal 1105 0.1 0.00854 0.00107 0.00668 0.0109 0.95 #> # ℹ 4 more variables: log.lik , iterations , antigen.isos , #> # nlm.convergence.code "},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"estimate-seroincidence-by-study-site-and-age-strata","dir":"Articles","previous_headings":"","what":"Estimate Seroincidence by study site and age strata","title":"Scrub Typhus Seroincidence Vignette","text":"Now ready begin estimating seroincidence. use est.incidence.calculate stratified seroincidence rates. Let’s visualize seroincidence estimates strata.","code":"# Using est.incidence.by (strata) est2 <- est.incidence.by( strata = c(\"country\", \"ageQ\"), pop_data = xs_data, curve_params = curves, noise_params = noise, antigen_isos = c(\"OT56kda_IgG\"), num_cores = 8 # Allow for parallel processing to decrease run time ) #> Warning in warn.missing.strata(data = curve_params, strata = strata %>% : curve_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning in warn.missing.strata(data = noise_params, strata = strata %>% : noise_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning in check_parallel_cores(.): This computer appears to have 4 cores #> available. `est.incidence.by()` has reduced its `num_cores` argument to 3 to #> avoid destabilizing the computer. summary(est2) #> Seroincidence estimated given the following setup: #> a) Antigen isotypes : OT56kda_IgG #> b) Strata : country, ageQ #> #> Seroincidence estimates: #> # A tibble: 5 × 14 #> Stratum country ageQ n est.start incidence.rate SE CI.lwr CI.upr #> #> 1 Stratum 1 India 18-29 59 0.1 0.00985 0.00330 0.00511 0.0190 #> 2 Stratum 2 India 30-49 302 0.1 0.0151 0.00178 0.0120 0.0190 #> 3 Stratum 3 India 50-89 360 0.1 0.0288 0.00290 0.0236 0.0350 #> 4 Stratum 4 Nepal 0-17 876 0.1 0.00606 0.00108 0.00428 0.00860 #> 5 Stratum 5 Nepal 18-29 229 0.1 0.0144 0.00259 0.0101 0.0205 #> # ℹ 5 more variables: coverage , log.lik , iterations , #> # antigen.isos , nlm.convergence.code # Plot seroincidence estimates # Save summary(est) as a dataframe estdf <- summary(est) %>% mutate(ageQ = \"Overall\") # Save summary(est2) as a dataframe est2df <- summary(est2) est_comb <- rbind(estdf, est2df) # Create barplot (rescale incidence rate and CIs) ggplot(est_comb) + aes(y = ageQ, x = incidence.rate * 1000, fill = country) + geom_bar(stat = \"identity\", position = position_dodge2(width = 0.8, preserve = \"single\")) + geom_linerange(aes(xmin = CI.lwr * 1000, xmax = CI.upr * 1000), position = position_dodge2(width = 0.8, preserve = \"single\")) + labs(title = \"Enteric Fever Seroincidence by Catchment Area\", x = \"Seroincience rate per 1000 person-years\", y = \"Catchment\") + theme_bw() + facet_wrap(~ country) + theme(axis.text.y = element_text(size = 11), axis.text.x = element_text(size = 11)) + scale_fill_manual(values = c(\"orange2\", \"#39558CFF\", \"red\"))"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"Scrub Typhus Seroincidence Vignette","text":"gratefully acknowledge study participants valuable time interest participating studies","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/scrubTyphus_example.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"Scrub Typhus Seroincidence Vignette","text":"work supported National Institutes Health Fogarty International Center (FIC) [K01 TW012177] National Institute Allergy Infectious Diseases (NIAID) [R21 1AI176416]","code":""},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/serocalculator.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Introduction to serocalculator","text":"serocalculator R package provides rapid computationally simple method calculating seroconversion rates, originally published Simonsen et al. (2009) Teunis et al. (2012), developed subsequent publications deGraaf et al. (2014), Teunis et al. (2016), Teunis Eijkeren (2020). short, longitudinal seroresponses confirmed cases known symptom onset date assumed represent time course human serum antibodies specific pathogen. Therefore, using longitudinal antibody dynamics cross–sectional sample antibodies human population, incidence estimate can calculated. details .","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/serocalculator.html","id":"a-proxy-for-infection","dir":"Articles","previous_headings":"Overview","what":"A Proxy for Infection","title":"Introduction to serocalculator","text":"exact time infection impossible measure individual, antibody levels measured cross–sectional population sample can translated estimate frequency seroconversions (infections) occur sampled population. presence many high antibody concentrations indicates many people population likely experienced infection recently, mostly low concentrations indicate low frequency infections sampled population. order interpret measured cross-sectional antibody concentrations terms incidence, must define antibody dynamic time understand generalized antibody response different times since infection. dynamic must quantified time include initial increase serum antibody concentration seroconversion occurs, followed gradual decrease antibodies wane. published studies, information time course serum antibody response obtained longitudinal follow–data cases symptomatic episode following infection. case, onset symptoms provides proxy time infection occurred.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/serocalculator.html","id":"the-seroincidence-estimator","dir":"Articles","previous_headings":"Overview","what":"The Seroincidence Estimator","title":"Introduction to serocalculator","text":"serocalculator package designed calculate incidence seroconversion using longitudinal seroresponse characteristics. distribution serum antibody concentrations cross–sectional population sample calculated function longitudinal seroresponse frequency seroconversion (seroincidence). Given seroresponse, marginal distribution antibody concentrations can fitted cross-sectional data thereby providing means estimate seroincidence.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/serocalculator.html","id":"the-serocalculator-app","dir":"Articles","previous_headings":"Overview","what":"The Serocalculator App","title":"Introduction to serocalculator","text":"serocalculator app web based tool takes 5 curve parameters (y0, y1, t1, alpha, r) draw single curve antibody concentration.","code":""},{"path":[]},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"load-model-parameters","dir":"Articles","previous_headings":"Simulate a single dataset","what":"load model parameters","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"load longitudinal parameters; modeled SEES cases across ages countries:","code":"library(serocalculator) library(tidyverse) #> ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ── #> ✔ dplyr 1.1.4 ✔ readr 2.1.5 #> ✔ forcats 1.0.0 ✔ stringr 1.5.1 #> ✔ ggplot2 3.5.1 ✔ tibble 3.2.1 #> ✔ lubridate 1.9.3 ✔ tidyr 1.3.1 #> ✔ purrr 1.0.2 #> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ── #> ✖ dplyr::filter() masks stats::filter() #> ✖ dplyr::lag() masks stats::lag() #> ℹ Use the conflicted package () to force all conflicts to become errors library(ggbeeswarm) # for plotting library(dplyr) dmcmc <- \"https://osf.io/download/rtw5k\" %>% load_curve_params() %>% dplyr::filter(iter < 500) # reduce number of mcmc samples for speed"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"visualize-antibody-decay-model","dir":"Articles","previous_headings":"Simulate a single dataset","what":"visualize antibody decay model","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"can graph individual MCMC samples posterior distribution model parameters using autoplot.curve_params() method autoplot() function: can use logarithmic scale x-axis desired: can graph median, 10%, 90% quantiles model using graph.curve.params() function:","code":"dmcmc %>% autoplot(n_curves = 50) dmcmc %>% autoplot(log_x = TRUE, n_curves = 50) # Specify the antibody-isotype responses to include in analyses antibodies <- c(\"HlyE_IgA\", \"HlyE_IgG\") dmcmc %>% graph.curve.params(antigen_isos = antibodies) %>% print() #> Warning: Removed 47 rows containing missing values or values outside the scale range #> (`geom_line()`)."},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"simulate-cross-sectional-data","dir":"Articles","previous_headings":"Simulate a single dataset","what":"Simulate cross-sectional data","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"","code":"# set seed to reproduce results set.seed(54321) # simulated incidence rate per person-year lambda <- 0.2 # range covered in simulations lifespan <- c(0, 10) # cross-sectional sample size nrep <- 100 # biologic noise distribution dlims <- rbind( \"HlyE_IgA\" = c(min = 0, max = 0.5), \"HlyE_IgG\" = c(min = 0, max = 0.5) ) # generate cross-sectional data csdata <- sim.cs( curve_params = dmcmc, lambda = lambda, n.smpl = nrep, age.rng = lifespan, antigen_isos = antibodies, n.mc = 0, renew.params = TRUE, add.noise = TRUE, noise_limits = dlims, format = \"long\" )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"noise-parameters","dir":"Articles","previous_headings":"Simulate a single dataset","what":"Noise parameters","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"need provide noise parameters analysis; , define directly code:","code":"library(tibble) cond <- tibble( antigen_iso = c(\"HlyE_IgG\", \"HlyE_IgA\"), nu = c(0.5, 0.5), # Biologic noise (nu) eps = c(0, 0), # M noise (eps) y.low = c(1, 1), # low cutoff (llod) y.high = c(5e6, 5e6) ) # high cutoff (y.high)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"visualize-data","dir":"Articles","previous_headings":"Simulate a single dataset","what":"Visualize data","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"can plot distribution antibody responses simulated data.","code":"ggplot(csdata, aes( x = as.factor(antigen_iso), y = value )) + geom_beeswarm( size = .2, alpha = .3, aes(color = antigen_iso), show.legend = FALSE ) + geom_boxplot(outlier.colour = NA, fill = NA) + scale_y_log10() + theme_linedraw() + labs(x = \"antigen - isotype\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"calculate-log-likelihood","dir":"Articles","previous_headings":"Simulate a single dataset","what":"calculate log-likelihood","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"can calculate log-likelihood data function incidence rate directly:","code":"ll_a <- log_likelihood( pop_data = csdata, curve_params = dmcmc, noise_params = cond, antigen_isos = \"HlyE_IgA\", lambda = 0.1 ) %>% print() #> [1] -240.1535 ll_g <- log_likelihood( pop_data = csdata, curve_params = dmcmc, noise_params = cond, antigen_isos = \"HlyE_IgG\", lambda = 0.1 ) %>% print() #> [1] -339.8803 ll_ag <- log_likelihood( pop_data = csdata, curve_params = dmcmc, noise_params = cond, antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), lambda = 0.1 ) %>% print() #> [1] -580.0338 print(ll_a + ll_g) #> [1] -580.0338"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"graph-log-likelihood","dir":"Articles","previous_headings":"Simulate a single dataset","what":"graph log-likelihood","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"can also graph log-likelihoods, even without finding MLEs, using graph_loglik():","code":"lik_HlyE_IgA <- graph_loglik( pop_data = csdata, curve_params = dmcmc, noise_params = cond, antigen_isos = \"HlyE_IgA\", log_x = TRUE ) lik_HlyE_IgG <- graph_loglik( previous_plot = lik_HlyE_IgA, pop_data = csdata, curve_params = dmcmc, noise_params = cond, antigen_isos = \"HlyE_IgG\", log_x = TRUE ) lik_both <- graph_loglik( previous_plot = lik_HlyE_IgG, pop_data = csdata, curve_params = dmcmc, noise_params = cond, antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), log_x = TRUE ) print(lik_both)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"estimate-incidence","dir":"Articles","previous_headings":"Simulate a single dataset","what":"estimate incidence","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"can estimate incidence est.incidence(): can extract summary statistics summary(): can plot log-likelihood curve autoplot(): can set x-axis logarithmic scale:","code":"est1 <- est.incidence( pop_data = csdata, curve_params = dmcmc, noise_params = cond, lambda_start = .1, build_graph = TRUE, verbose = TRUE, # print updates as the function runs print_graph = FALSE, # display the log-likelihood curve while #`est.incidence()` is running antigen_isos = antibodies ) #> nrow(curve_params) = 998 #> Initial negative log-likelihood: 580.033839865286 #> building likelihood graph #> about to call `nlm()` #> iteration = 0 #> Step: #> [1] 0 #> Parameter: #> [1] -2.302585 #> Function Value #> [1] 580.0338 #> Gradient: #> [1] -43.94475 #> #> iteration = 1 #> Step: #> [1] 0.4684939 #> Parameter: #> [1] -1.834091 #> Function Value #> [1] 565.4921 #> Gradient: #> [1] -18.4184 #> #> iteration = 2 #> Step: #> [1] 0.3380391 #> Parameter: #> [1] -1.496052 #> Function Value #> [1] 563.1786 #> Gradient: #> [1] 6.088605 #> #> iteration = 3 #> Step: #> [1] -0.08398361 #> Parameter: #> [1] -1.580036 #> Function Value #> [1] 562.9676 #> Gradient: #> [1] -0.665958 #> #> iteration = 4 #> Step: #> [1] 0.008280263 #> Parameter: #> [1] -1.571755 #> Function Value #> [1] 562.9636 #> Gradient: #> [1] -0.9964423 #> #> iteration = 5 #> Step: #> [1] 0.002099482 #> Parameter: #> [1] -1.569656 #> Function Value #> [1] 562.9634 #> Gradient: #> [1] 1.11877 #> #> iteration = 6 #> Step: #> [1] -1.66162e-05 #> Parameter: #> [1] -1.569673 #> Function Value #> [1] 562.9634 #> Gradient: #> [1] 0.1425471 #> #> iteration = 7 #> Parameter: #> [1] -1.569673 #> Function Value #> [1] 562.9634 #> Gradient: #> [1] -0.008628721 #> #> Last global step failed to locate a point lower than x. #> Either x is an approximate local minimum of the function, #> the function is too non-linear for this algorithm, #> or steptol is too large. #> Warning in est.incidence(pop_data = csdata, curve_params = dmcmc, noise_params = cond, : `nlm()` may not have reached the maximum likelihood estimate. #> `nlm()` completed with the following convergence code: #> 3: Last global step failed to locate a point lower than x. Either x is an approximate local minimum of the function, the function is too non-linear for this algorithm, or `stepmin` in `est.incidence()` (a.k.a. `steptol` in `nlm()`) is too large. #> #> Elapsed time: #> user system elapsed #> 0.436 0.000 0.436 summary(est1) #> # A tibble: 1 × 10 #> est.start incidence.rate SE CI.lwr CI.upr coverage log.lik iterations #> #> 1 0.1 0.208 0.0137 0.183 0.237 0.95 -563. 7 #> # ℹ 2 more variables: antigen.isos , nlm.convergence.code autoplot(est1) autoplot(est1, log_x = TRUE)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"simulate-multiple-clusters-with-different-lambdas","dir":"Articles","previous_headings":"","what":"Simulate multiple clusters with different lambdas","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"preceding code chunk, determined can use 3 CPU cores run computations parallel. can plot distributions simulated responses:","code":"library(parallel) n_cores <- max(1, parallel::detectCores() - 1) print(n_cores) #> [1] 3 # number of clusters nclus <- 10 # cross-sectional sample size nrep <- 100 # incidence rate in e lambdas <- c(.05, .1, .15, .2) sim_df <- sim.cs.multi( n_cores = n_cores, lambdas = lambdas, nclus = nclus, n.smpl = nrep, age.rng = lifespan, antigen_isos = antibodies, renew.params = TRUE, add.noise = TRUE, curve_params = dmcmc, noise_limits = dlims, format = \"long\" ) print(sim_df) #> # A tibble: 8,000 × 6 #> age id antigen_iso value lambda.sim cluster #> #> 1 3.53 1 HlyE_IgA 0.875 0.05 1 #> 2 3.53 1 HlyE_IgG 0.612 0.05 1 #> 3 2.27 2 HlyE_IgA 0.599 0.05 1 #> 4 2.27 2 HlyE_IgG 0.481 0.05 1 #> 5 9.05 3 HlyE_IgA 0.577 0.05 1 #> 6 9.05 3 HlyE_IgG 0.440 0.05 1 #> 7 5.94 4 HlyE_IgA 0.873 0.05 1 #> 8 5.94 4 HlyE_IgG 0.866 0.05 1 #> 9 9.88 5 HlyE_IgA 0.633 0.05 1 #> 10 9.88 5 HlyE_IgG 0.152 0.05 1 #> # ℹ 7,990 more rows sim_df %>% ggplot() + aes( x = as.factor(cluster), y = value ) + geom_beeswarm(size = .2, alpha = .3, aes(color = antigen_iso)) + geom_boxplot(outlier.colour = NA, fill = NA) + scale_y_log10() + facet_wrap(~ antigen_iso + lambda.sim, nrow = 2) + theme_linedraw()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"estimate-incidence-in-each-cluster","dir":"Articles","previous_headings":"Simulate multiple clusters with different lambdas","what":"Estimate incidence in each cluster","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"summary(ests) produces tibble() extra meta-data: can explore summary table interactively using DT::datatable() can plot likelihood single simulated cluster subsetting simulation ests calling plot(): can also plot log-likelihood curves several clusters (computer might struggle plot many ): log_x argument also works :","code":"ests <- est.incidence.by( pop_data = sim_df, curve_params = dmcmc, noise_params = cond, num_cores = n_cores, strata = c(\"lambda.sim\", \"cluster\"), curve_strata_varnames = NULL, noise_strata_varnames = NULL, verbose = TRUE, build_graph = TRUE, # slows down the function substantially antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\") ) #> Data has been stratified. #> Here are the strata that will be analyzed: #> # A tibble: 40 × 4 #> Stratum lambda.sim cluster n #> #> 1 Stratum 1 0.05 1 100 #> 2 Stratum 2 0.05 2 100 #> 3 Stratum 3 0.05 3 100 #> 4 Stratum 4 0.05 4 100 #> 5 Stratum 5 0.05 5 100 #> 6 Stratum 6 0.05 6 100 #> 7 Stratum 7 0.05 7 100 #> 8 Stratum 8 0.05 8 100 #> 9 Stratum 9 0.05 9 100 #> 10 Stratum 10 0.05 10 100 #> # ℹ 30 more rows #> Setting up parallel processing with `num_cores` = 3. #> Elapsed time for parallelized code: #> user system elapsed #> 0.130 0.049 15.675 summary(ests) #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Seroincidence estimated given the following setup: #> a) Antigen isotypes : HlyE_IgG, HlyE_IgA #> b) Strata : lambda.sim, cluster #> #> Seroincidence estimates: #> # A tibble: 40 × 14 #> Stratum lambda.sim cluster n est.start incidence.rate SE CI.lwr #> #> 1 Stratum 1 0.05 1 100 0.1 0.0680 0.0108 0.0498 #> 2 Stratum 2 0.05 2 100 0.1 0.0603 0.00949 0.0443 #> 3 Stratum 3 0.05 3 100 0.1 0.0556 0.00925 0.0401 #> 4 Stratum 4 0.05 4 100 0.1 0.0568 0.00972 0.0406 #> 5 Stratum 5 0.05 5 100 0.1 0.0350 0.00719 0.0234 #> 6 Stratum 6 0.05 6 100 0.1 0.0558 0.00915 0.0405 #> 7 Stratum 7 0.05 7 100 0.1 0.0687 0.0109 0.0503 #> 8 Stratum 8 0.05 8 100 0.1 0.0404 0.00787 0.0276 #> 9 Stratum 9 0.05 9 100 0.1 0.0458 0.00826 0.0322 #> 10 Stratum 10 0.05 10 100 0.1 0.0423 0.00791 0.0293 #> # ℹ 30 more rows #> # ℹ 6 more variables: CI.upr , coverage , log.lik , #> # iterations , antigen.isos , nlm.convergence.code library(DT) summary(ests) %>% DT::datatable() %>% DT::formatRound( columns = c( \"incidence.rate\", \"SE\", \"CI.lwr\", \"CI.upr\", \"log.lik\" ) ) #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced autoplot(ests[1]) autoplot(ests[1:5]) autoplot(ests[1:5], log_x = TRUE)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"nlm-convergence-codes","dir":"Articles","previous_headings":"Simulate multiple clusters with different lambdas > Estimate incidence in each cluster","what":"nlm() convergence codes","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"Make sure check nlm() exit codes (codes 3-5 indicate possible non-convergence): Solutions nlm() exit codes 3-5: 3: decrease stepmin argument est.incidence()/est.incidence.() 4: increase iterlim argument est.incidence()/est.incidence.() 5: increase stepmax argument est.incidence()/est.incidence.() can extract indices problematic strata, : clusters problems, can take look: fits don’t appear maximum likelihood, re-run clusters, adjusting nlm() settings appropriately, sure.","code":"summary(ests) %>% as_tibble() %>% # removes extra meta-data select(Stratum, nlm.convergence.code) %>% filter(nlm.convergence.code > 2) #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> # A tibble: 8 × 2 #> Stratum nlm.convergence.code #> #> 1 Stratum 12 3 #> 2 Stratum 13 3 #> 3 Stratum 21 3 #> 4 Stratum 29 3 #> 5 Stratum 31 3 #> 6 Stratum 34 3 #> 7 Stratum 36 3 #> 8 Stratum 39 3 problem_strata <- which(summary(ests)$nlm.convergence.code > 2) %>% print() #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> [1] 12 13 21 29 31 34 36 39 if (length(problem_strata) > 0) { autoplot(ests[problem_strata], log_x = TRUE) }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/articles/simulate_xsectionalData.html","id":"plot-distribution-of-estimates-by-simulated-incidence-rate","dir":"Articles","previous_headings":"Simulate multiple clusters with different lambdas","what":"plot distribution of estimates by simulated incidence rate","title":"Generate a simulated cross-sectional sample and estimate seroincidence","text":"Finally, can look simulation results:","code":"library(ggplot2) summary(ests) %>% autoplot(xvar = \"lambda.sim\") + ggplot2::geom_abline( ggplot2::aes(intercept = 0, slope = 1) ) #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced #> Warning in FUN(X[[i]], ...): `nlm()` produced a negative hessian; something is wrong with the numerical derivatives. #> The standard error of the incidence rate estimate cannot be calculated. #> Warning in sqrt(var.log.lambda): NaNs produced"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Peter Teunis. Author, copyright holder. Author method original code. Kristina Lai. Author, maintainer. Chris Orwa. Author. Kristen Aiemjoy. Author. Douglas Ezra Morrison. Author.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Teunis P, Lai K, Orwa C, Aiemjoy K, Morrison D (2024). serocalculator: Estimating Infection Rates Serological Data. R package version 1.2.0.9016, https://ucd-serg.github.io/serocalculator/, https://github.com/UCD-SERG/serocalculator.","code":"@Manual{, title = {serocalculator: Estimating Infection Rates from Serological Data}, author = {Peter Teunis and Kristina Lai and Chris Orwa and Kristen Aiemjoy and Douglas Ezra Morrison}, year = {2024}, note = {R package version 1.2.0.9016, https://ucd-serg.github.io/serocalculator/}, url = {https://github.com/UCD-SERG/serocalculator}, }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"serocalculator","dir":"","previous_headings":"","what":"Estimating Infection Rates from Serological Data","title":"Estimating Infection Rates from Serological Data","text":"Figure 1: QR code serocalculator website Antibody levels measured cross–sectional population sample can translated estimate frequency seroconversions (infections) occur sampled population. words, presence many high antibody titers indicates many individuals likely experienced infection recently burden disease high population, low titers indicate low frequency infections sampled population therefore lower burden disease. serocalculator package designed use longitudinal response characteristics using set modeled parameters characterizing longitudinal response selected serum antibodies. details underlying methods can found Getting Started.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"installing-r","dir":"","previous_headings":"","what":"Installing R","title":"Estimating Infection Rates from Serological Data","text":"serocalculator package designed used R, free, open-source software environment statistical computing graphics. end user package must access working installation R software. recommend installing base R Graphical User Interface (GUI) R RStudio. need download install R /RStudio, recommend following tutorial Hands Programming R Garrett Grolemund: Installing R RStudio: https://rstudio-education.github.io/hopr/starting.html","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"installing-the-serocalculator-package","dir":"","previous_headings":"","what":"Installing the Serocalculator Package","title":"Estimating Infection Rates from Serological Data","text":"serocalculator package must installed R first use.","code":"# Install package install.packages(\"serocalculator\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"post-installation","dir":"","previous_headings":"Installing the Serocalculator Package","what":"Post-installation","title":"Estimating Infection Rates from Serological Data","text":"Successful installation can confirmed loading package RStudio workspace exploring help files manuals distributed package: Additionally, package details can found executing following commands:","code":"# Load package \"seroincidence\". library(serocalculator) # Show R help for the package. ?serocalculator # Show description. packageDescription(\"serocalculator\") # Show citation. citation(\"serocalculator\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"development-version","dir":"","previous_headings":"Installing the Serocalculator Package","what":"Development Version","title":"Estimating Infection Rates from Serological Data","text":"install development version, must install devtools R package download serocalculator GitHub. Enter code R console install packages.","code":"# Install the devtools package and the development version of serocalculator install.packages(\"devtools\") devtools::install_github(\"ucd-serg/serocalculator\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"a-note-for-windows-users","dir":"","previous_headings":"Installing the Serocalculator Package > Development Version","what":"A Note for Windows Users","title":"Estimating Infection Rates from Serological Data","text":"launching development version serocalculator, Windows users need install Rtools, contains collection tools building employing R packages still development. can done either: devtools package installation, independently, devtools already installed.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"during-devtools-installation","dir":"","previous_headings":"Installing the Serocalculator Package > Development Version > A Note for Windows Users","what":"During devtools installation","title":"Estimating Infection Rates from Serological Data","text":"prompted install additional build tools, select “Yes” Rtools installed. [!NOTE] installing Rtools, may need restart RStudio continuing install serocalculator.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"independently","dir":"","previous_headings":"Installing the Serocalculator Package > Development Version > A Note for Windows Users","what":"Independently:","title":"Estimating Infection Rates from Serological Data","text":"Download Rtools https://cran.r-project.org/bin/windows/Rtools/ Run installer Rtools installation may see window asking “Select Additional Tasks”. select box “Edit system PATH”. devtools RStudio put Rtools PATH automatically needed. select box “Save version information registry”. selected default.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"getting-help","dir":"","previous_headings":"","what":"Getting Help","title":"Estimating Infection Rates from Serological Data","text":"questions using software package, please use Q&forum. encounter clear bug, please file issue minimal reproducible example GitHub. Another great resource Epidemiologist R Handbook, includes introductory page asking help R packages via GitHub: https://epirhandbook.com/en/getting-help.html","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/index.html","id":"contributing-to-this-project","dir":"","previous_headings":"","what":"Contributing to this project","title":"Estimating Infection Rates from Serological Data","text":"welcome contributions project - anything typo corrections new features. Please see Contributor guide information.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ab.html","id":null,"dir":"Reference","previous_headings":"","what":"kinetics of the antibody (ab) response (power function decay) — ab","title":"kinetics of the antibody (ab) response (power function decay) — ab","text":"kinetics antibody (ab) response (power function decay)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ab.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"kinetics of the antibody (ab) response (power function decay) — ab","text":"","code":"ab(t, par, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ab.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"kinetics of the antibody (ab) response (power function decay) — ab","text":"t age infection? par parameters ... arguments passed baseline()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ab.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"kinetics of the antibody (ab) response (power function decay) — ab","text":"matrix()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_curve_params.html","id":null,"dir":"Reference","previous_headings":"","what":"Load antibody decay curve parameter — as_curve_params","title":"Load antibody decay curve parameter — as_curve_params","text":"Load antibody decay curve parameter","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_curve_params.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load antibody decay curve parameter — as_curve_params","text":"","code":"as_curve_params(data, antigen_isos = NULL)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_curve_params.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load antibody decay curve parameter — as_curve_params","text":"data data.frame() tibble::tbl_df antigen_isos character() vector antigen isotypes used analyses","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_curve_params.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load antibody decay curve parameter — as_curve_params","text":"curve_data object (tibble::tbl_df extra attribute antigen_isos)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_curve_params.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load antibody decay curve parameter — as_curve_params","text":"","code":"library(magrittr) curve_data <- \"https://osf.io/download/rtw5k/\" %>% readr::read_rds() %>% as_curve_params() print(curve_data) #> # A tibble: 20,000 × 7 #> antigen_iso iter y0 y1 t1 alpha r #> #> 1 HlyE_IgA 1 2.48 63.5 9.52 0.000581 1.75 #> 2 HlyE_IgG 1 3.04 164. 6.55 0.00457 1.17 #> 3 LPS_IgA 1 0.748 103. 4.98 0.00308 1.58 #> 4 LPS_IgG 1 0.941 320. 6.14 0.00166 1.41 #> 5 Vi_IgG 1 8.46 4348. 3.07 0.0000340 1.06 #> 6 HlyE_IgA 2 3.86 288. 1.27 0.000459 2.66 #> 7 HlyE_IgG 2 1.82 154. 10.8 0.000921 1.30 #> 8 LPS_IgA 2 1.76 852. 2.49 0.000126 2.91 #> 9 LPS_IgG 2 0.434 20.6 4.29 0.00122 1.37 #> 10 Vi_IgG 2 18.8 345. 3.48 0.000142 1.02 #> # ℹ 19,990 more rows"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_noise_params.html","id":null,"dir":"Reference","previous_headings":"","what":"Load noise parameters — as_noise_params","title":"Load noise parameters — as_noise_params","text":"Load noise parameters","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_noise_params.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load noise parameters — as_noise_params","text":"","code":"as_noise_params(data, antigen_isos = NULL)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_noise_params.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load noise parameters — as_noise_params","text":"data data.frame() tibble::tbl_df antigen_isos character() vector antigen isotypes used analyses","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_noise_params.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load noise parameters — as_noise_params","text":"noise_params object (tibble::tbl_df extra attribute antigen_isos)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_noise_params.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load noise parameters — as_noise_params","text":"","code":"library(magrittr) noise_data <- \"https://osf.io/download//hqy4v/\" %>% readr::read_rds() %>% as_noise_params() print(noise_data) #> # A tibble: 16 × 7 #> antigen_iso Country y.low eps nu y.high Lab #> #> 1 HlyE_IgA Bangladesh 0.376 0.280 2.60 5000000 CHRF #> 2 HlyE_IgA Ghana 0.179 0.240 2.60 5000000 MGH #> 3 HlyE_IgA Nepal 0.853 0.238 2.60 5000000 DH #> 4 HlyE_IgA Pakistan 0.508 0.279 2.60 5000000 AKU #> 5 HlyE_IgG Bangladesh 0.787 0.306 2.36 5000000 CHRF #> 6 HlyE_IgG Ghana 0.645 0.164 2.36 5000000 MGH #> 7 HlyE_IgG Nepal 1.89 0.128 2.36 5000000 DH #> 8 HlyE_IgG Pakistan 1.59 0.146 2.36 5000000 AKU #> 9 LPS_IgA Bangladesh 0.660 0.299 2.14 5000000 CHRF #> 10 LPS_IgA Ghana 0.861 0.163 2.14 5000000 MGH #> 11 LPS_IgA Nepal 1.79 0.115 2.14 5000000 DH #> 12 LPS_IgA Pakistan 5.13 0.246 2.14 5000000 AKU #> 13 LPS_IgG Bangladesh 0.992 0.298 3.24 5000000 CHRF #> 14 LPS_IgG Ghana 0.885 0.195 3.24 5000000 MGH #> 15 LPS_IgG Nepal 0.647 0.179 3.24 5000000 DH #> 16 LPS_IgG Pakistan 4.84 0.273 3.24 5000000 AKU"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_pop_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Load a cross-sectional antibody survey data set — as_pop_data","title":"Load a cross-sectional antibody survey data set — as_pop_data","text":"Load cross-sectional antibody survey data set","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_pop_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load a cross-sectional antibody survey data set — as_pop_data","text":"","code":"as_pop_data( data, antigen_isos = NULL, age = \"Age\", value = \"result\", id = \"index_id\", standardize = TRUE )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_pop_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load a cross-sectional antibody survey data set — as_pop_data","text":"data data.frame() tibble::tbl_df antigen_isos character() vector antigen isotypes used analyses age character() identifying age column value character() identifying value column id character() identifying id column standardize logical() determine standardization columns","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_pop_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load a cross-sectional antibody survey data set — as_pop_data","text":"pop_data object (tibble::tbl_df extra attribute antigen_isos)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/as_pop_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load a cross-sectional antibody survey data set — as_pop_data","text":"","code":"library(magrittr) xs_data <- \"https://osf.io/download//n6cp3/\" %>% readr::read_rds() %>% as_pop_data() print(xs_data) #> # A tibble: 3,336 × 8 #> id Country cluster catchment age ageCat antigen_iso value #> #> 1 B1 Bangladesh Ward 2 N dhaka 4 <5 HlyE_IgA 7.24 #> 2 B2 Bangladesh Ward 2 N dhaka 4 <5 HlyE_IgG 24.0 #> 3 B3 Bangladesh Ward 2 N dhaka 3.7 <5 HlyE_IgA 0.836 #> 4 B4 Bangladesh Ward 2 N dhaka 3.7 <5 HlyE_IgG 3.17 #> 5 B5 Bangladesh Ward 2 N dhaka 10.6 5-15 HlyE_IgA 3.42 #> 6 B6 Bangladesh Ward 2 N dhaka 10.6 5-15 HlyE_IgG 14.3 #> 7 B7 Bangladesh Ward 2 N dhaka 16 16+ HlyE_IgA 8.84 #> 8 B8 Bangladesh Ward 2 N dhaka 16 16+ HlyE_IgG 14.2 #> 9 B9 Bangladesh Ward 2 N dhaka 16.5 16+ HlyE_IgA 10.3 #> 10 B10 Bangladesh Ward 2 N dhaka 16.5 16+ HlyE_IgG 29.4 #> # ℹ 3,326 more rows"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.curve_params.html","id":null,"dir":"Reference","previous_headings":"","what":"graph antibody decay curves by antigen isotype — autoplot.curve_params","title":"graph antibody decay curves by antigen isotype — autoplot.curve_params","text":"graph antibody decay curves antigen isotype","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.curve_params.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"graph antibody decay curves by antigen isotype — autoplot.curve_params","text":"","code":"# S3 method for class 'curve_params' autoplot( object, antigen_isos = unique(object$antigen_iso), ncol = min(3, length(antigen_isos)), ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.curve_params.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"graph antibody decay curves by antigen isotype — autoplot.curve_params","text":"object data.frame() curve parameters (one MCMC samples) antigen_isos antigen isotypes analyze (can subset curve_params) ncol many columns subfigures use panel plot ... Arguments passed plot_curve_params_one_ab verbose verbose output xlim range x values graph n_curves many curves plot (see details). n_points Number points interpolate along x axis (passed ggplot2::geom_function()) rows_to_graph rows curve_params plot (overrides n_curves). alpha (passed ggplot2::geom_function()) transparent curves : 0 = fully transparent (invisible) 1 = fully opaque log_x x-axis logarithmic scale (TRUE) linear scale (FALSE, default)? log_y Y-axis logarithmic scale (default, TRUE) linear scale (FALSE)?","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.curve_params.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"graph antibody decay curves by antigen isotype — autoplot.curve_params","text":"ggplot2::ggplot() object","code":""},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.curve_params.html","id":"rows-to-graph","dir":"Reference","previous_headings":"","what":"rows_to_graph","title":"graph antibody decay curves by antigen isotype — autoplot.curve_params","text":"Note directly specify rows_to_graph calling function, row numbers enumerated separately antigen isotype; words, purposes argument, row numbers start 1 antigen isotype. currently way specify different row numbers different antigen isotypes; want , call plot_curve_params_one_ab() directly antigen isotype combine resulting panels . subset curve_params manually, passing function, set n_curves argument Inf.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.curve_params.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"graph antibody decay curves by antigen isotype — autoplot.curve_params","text":"","code":"# \\donttest{ library(dplyr) #> #> Attaching package: ‘dplyr’ #> The following objects are masked from ‘package:stats’: #> #> filter, lag #> The following objects are masked from ‘package:base’: #> #> intersect, setdiff, setequal, union library(ggplot2) library(magrittr) curve = load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) %>% # Reduce dataset for this example autoplot() curve # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.pop_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot distribution of antibodies — autoplot.pop_data","title":"Plot distribution of antibodies — autoplot.pop_data","text":"autoplot() method pop_data objects","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.pop_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot distribution of antibodies — autoplot.pop_data","text":"","code":"# S3 method for class 'pop_data' autoplot(object, log = FALSE, type = \"density\", strata = NULL, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.pop_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot distribution of antibodies — autoplot.pop_data","text":"object pop_data object (load_pop_data()) log whether show antibody responses logarithmic scale type option choose type chart: current options \"density\" \"age-scatter\" strata name variable pop_data stratify (NULL stratification) ... unused","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.pop_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot distribution of antibodies — autoplot.pop_data","text":"ggplot2::ggplot object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.pop_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot distribution of antibodies — autoplot.pop_data","text":"","code":"library(dplyr) library(ggplot2) xs_data <- load_pop_data( file_path = \"https://osf.io/download//n6cp3/\", age = \"Age\", id = \"index_id\", value = \"result\", standardize = TRUE ) xs_data %>% autoplot(strata = \"Country\", type = \"density\") xs_data %>% autoplot(strata = \"Country\", type = \"age-scatter\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot seroincidence.by log-likelihoods — autoplot.seroincidence.by","title":"Plot seroincidence.by log-likelihoods — autoplot.seroincidence.by","text":"Plots log-likelihood curves stratum, seroincidence.objects","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot seroincidence.by log-likelihoods — autoplot.seroincidence.by","text":"","code":"# S3 method for class 'seroincidence.by' autoplot(object, ncol = min(3, length(object)), ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot seroincidence.by log-likelihoods — autoplot.seroincidence.by","text":"object '\"seroincidence.\"' object (est.incidence.()) ncol number columns use panel plots ... Arguments passed autoplot.seroincidence log_x x-axis logarithmic scale (TRUE) linear scale (FALSE, default)?","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.by.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot seroincidence.by log-likelihoods — autoplot.seroincidence.by","text":"object class \"ggarrange\", ggplot2::ggplot() list() ggplot2::ggplot()s.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.by.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot seroincidence.by log-likelihoods — autoplot.seroincidence.by","text":"","code":"library(dplyr) library(ggplot2) xs_data <- \"https://osf.io/download//n6cp3/\" %>% load_pop_data() curve <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Reduce dataset for the purposes of this example noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") est2 <- est.incidence.by( strata = c(\"catchment\"), pop_data = xs_data %>% filter(Country == \"Pakistan\"), curve_params = curve, noise_params = noise %>% filter(Country == \"Pakistan\"), antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), #num_cores = 8, #Allow for parallel processing to decrease run time build_graph = TRUE ) #> Warning: curve_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning: noise_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. # Plot the log-likelihood curve autoplot(est2)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the log-likelihood curve for the incidence rate estimate — autoplot.seroincidence","title":"Plot the log-likelihood curve for the incidence rate estimate — autoplot.seroincidence","text":"Plot log-likelihood curve incidence rate estimate","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the log-likelihood curve for the incidence rate estimate — autoplot.seroincidence","text":"","code":"# S3 method for class 'seroincidence' autoplot(object, log_x = FALSE, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the log-likelihood curve for the incidence rate estimate — autoplot.seroincidence","text":"object seroincidence object (est.incidence()) log_x x-axis logarithmic scale (TRUE) linear scale (FALSE, default)? ... unused","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the log-likelihood curve for the incidence rate estimate — autoplot.seroincidence","text":"ggplot2::ggplot()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.seroincidence.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot the log-likelihood curve for the incidence rate estimate — autoplot.seroincidence","text":"","code":"library(dplyr) library(ggplot2) xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") curve <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Reduce dataset for the purposes of this example noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") est1 <- est.incidence( pop_data = xs_data %>% filter(Country == \"Pakistan\"), curve_param = curve, noise_param = noise %>% filter(Country == \"Pakistan\"), antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), build_graph = TRUE ) # Plot the log-likelihood curve autoplot(est1)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.summary.seroincidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot method for summary.seroincidence.by objects — autoplot.summary.seroincidence.by","title":"Plot method for summary.seroincidence.by objects — autoplot.summary.seroincidence.by","text":"Plot method summary.seroincidence.objects","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.summary.seroincidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot method for summary.seroincidence.by objects — autoplot.summary.seroincidence.by","text":"","code":"# S3 method for class 'summary.seroincidence.by' autoplot(object, xvar, alpha = 0.7, shape = 1, width = 0.001, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.summary.seroincidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot method for summary.seroincidence.by objects — autoplot.summary.seroincidence.by","text":"object summary.seroincidence.object (generated applying summary() method output est.incidence.()). xvar name stratifying variable object alpha transparency points graph (1 = transparency, 0 = fully transparent) shape shape argument geom_point() width width jitter ... unused","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.summary.seroincidence.by.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot method for summary.seroincidence.by objects — autoplot.summary.seroincidence.by","text":"ggplot2::ggplot() object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/autoplot.summary.seroincidence.by.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot method for summary.seroincidence.by objects — autoplot.summary.seroincidence.by","text":"","code":"library(dplyr) library(ggplot2) xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") curve <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Reduce dataset for the purposes of this example noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") est2 <- est.incidence.by( strata = c(\"catchment\"), pop_data = xs_data %>% filter(Country == \"Pakistan\"), curve_params = curve, noise_params = noise %>% filter(Country == \"Pakistan\"), antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), #num_cores = 8 #Allow for parallel processing to decrease run time ) #> Warning: curve_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning: noise_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. est2sum <- summary(est2) autoplot(est2sum, \"catchment\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/check_pop_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Check the formatting of a cross-sectional antibody survey dataset. — check_pop_data","title":"Check the formatting of a cross-sectional antibody survey dataset. — check_pop_data","text":"Check formatting cross-sectional antibody survey dataset.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/check_pop_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check the formatting of a cross-sectional antibody survey dataset. — check_pop_data","text":"","code":"check_pop_data(pop_data, verbose = FALSE)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/check_pop_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check the formatting of a cross-sectional antibody survey dataset. — check_pop_data","text":"pop_data dataset check verbose whether print \"OK\" message checks pass","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/check_pop_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check the formatting of a cross-sectional antibody survey dataset. — check_pop_data","text":"NULL (invisibly)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/check_pop_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check the formatting of a cross-sectional antibody survey dataset. — check_pop_data","text":"","code":"library(dplyr) xs_data <- readr::read_rds(\"https://osf.io/download//n6cp3/\") %>% as_pop_data() check_pop_data(xs_data, verbose = TRUE) #> data format is as expected."},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df.to.array.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a data.frame (or tibble) into a multidimensional array — df.to.array","title":"Convert a data.frame (or tibble) into a multidimensional array — df.to.array","text":"df..array() renamed df_to_array() create consistent API.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df.to.array.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a data.frame (or tibble) into a multidimensional array — df.to.array","text":"","code":"df.to.array(df, dim_var_names, value_var_name = \"value\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df_to_array.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a data.frame (or tibble) into a multidimensional array — df_to_array","title":"Convert a data.frame (or tibble) into a multidimensional array — df_to_array","text":"Convert data.frame (tibble) multidimensional array","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df_to_array.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a data.frame (or tibble) into a multidimensional array — df_to_array","text":"","code":"df_to_array(df, dim_var_names, value_var_name = \"value\")"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df_to_array.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a data.frame (or tibble) into a multidimensional array — df_to_array","text":"df data.frame() (tibble::tibble()) long format (row contains one value intended array) dim_var_names character() vector variable names df. variables factors, warning produced. value_var_name character() variable containing variable name df contains values intended array.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df_to_array.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a data.frame (or tibble) into a multidimensional array — df_to_array","text":"array() dimensions defined variables df listed dim_var_names","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/df_to_array.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a data.frame (or tibble) into a multidimensional array — df_to_array","text":"","code":"library(dplyr) library(tidyr) #> #> Attaching package: ‘tidyr’ #> The following object is masked from ‘package:magrittr’: #> #> extract df <- iris %>% tidyr::pivot_longer( names_to = \"parameter\", cols = c(\"Sepal.Length\", \"Sepal.Width\", \"Petal.Width\", \"Petal.Length\") ) %>% mutate(parameter = factor(parameter, levels = unique(parameter))) arr <- df %>% serocalculator:::df_to_array( dim_var_names = c(\"parameter\", \"Species\")) ftable(arr[,,1:5]) #> obs 1 2 3 4 5 #> parameter Species #> Sepal.Length setosa 5.1 4.9 4.7 4.6 5.0 #> versicolor 7.0 6.4 6.9 5.5 6.5 #> virginica 6.3 5.8 7.1 6.3 6.5 #> Sepal.Width setosa 3.5 3.0 3.2 3.1 3.6 #> versicolor 3.2 3.2 3.1 2.3 2.8 #> virginica 3.3 2.7 3.0 2.9 3.0 #> Petal.Width setosa 0.2 0.2 0.2 0.2 0.2 #> versicolor 1.4 1.5 1.5 1.3 1.5 #> virginica 2.5 1.9 2.1 1.8 2.2 #> Petal.Length setosa 1.4 1.4 1.3 1.5 1.4 #> versicolor 4.7 4.5 4.9 4.0 4.6 #> virginica 6.0 5.1 5.9 5.6 5.8"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/dot-nll.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate negative log-likelihood — .nll","title":"Calculate negative log-likelihood — .nll","text":"log_likelihood(), except negated requiring lambda log scale (used combination nlm(), ensure optimization search stray negative values lambda).","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/dot-nll.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate negative log-likelihood — .nll","text":"","code":".nll(log.lambda, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/dot-nll.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate negative log-likelihood — .nll","text":"log.lambda natural logarithm incidence rate ... Arguments passed log_likelihood pop_data data.frame() cross-sectional serology data antibody age, additional columns antigen_isos Character vector listing one antigen isotypes. Values must match pop_data. curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_params data.frame() (tibble::tibble()) containing following variables, specifying noise parameters antigen isotype: antigen_iso: antigen isotype whose noise parameters specified row nu: biological noise eps: measurement noise y.low: lower limit detection current antigen isotype y.high: upper limit detection current antigen isotype verbose logical: TRUE, print verbose log information console","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/dot-nll.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate negative log-likelihood — .nll","text":"negative log-likelihood data current parameter values","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate Seroincidence — est.incidence.by","title":"Estimate Seroincidence — est.incidence.by","text":"Function estimate seroincidences based cross-section serology data longitudinal response model.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate Seroincidence — est.incidence.by","text":"","code":"est.incidence.by( pop_data, curve_params, noise_params, strata, curve_strata_varnames = strata, noise_strata_varnames = strata, antigen_isos = pop_data %>% pull(\"antigen_iso\") %>% unique(), lambda_start = 0.1, build_graph = FALSE, num_cores = 1L, verbose = FALSE, print_graph = FALSE, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate Seroincidence — est.incidence.by","text":"pop_data data.frame cross-sectional serology data per antibody age, additional columns corresponding element strata input curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_params data.frame() (tibble::tibble()) containing following variables, specifying noise parameters antigen isotype: antigen_iso: antigen isotype whose noise parameters specified row nu: biological noise eps: measurement noise y.low: lower limit detection current antigen isotype y.high: upper limit detection current antigen isotype strata character vector stratum-defining variables. Values must variable names pop_data. curve_strata_varnames subset strata. Values must variable names curve_params. Default = \"\". noise_strata_varnames subset strata. Values must variable names noise_params. Default = \"\". antigen_isos Character vector one antibody names. Values must match pop_data lambda_start starting guess incidence rate, years/event. build_graph whether graph log-likelihood function across range incidence rates (lambda values) num_cores Number processor cores use calculations computing strata. set 1 package parallel available, computations executed parallel. Default = 1L. verbose logical: TRUE, print verbose log information console print_graph whether display log-likelihood curve graph course running est.incidence() ... Arguments passed est.incidence, stats::nlm stepmin positive scalar providing minimum allowable relative step length. stepmax positive scalar gives maximum allowable scaled step length. stepmax used prevent steps cause optimization function overflow, prevent algorithm leaving area interest parameter space, detect divergence algorithm. stepmax chosen small enough prevent first two occurrences, larger anticipated reasonable step. typsize estimate size parameter minimum. fscale estimate size f minimum. ndigit number significant digits function f. gradtol positive scalar giving tolerance scaled gradient considered close enough zero terminate algorithm. scaled gradient measure relative change f direction p[] divided relative change p[]. iterlim positive integer specifying maximum number iterations performed program terminated. check.analyticals logical scalar specifying whether analytic gradients Hessians, supplied, checked numerical derivatives initial parameter values. can help detect incorrectly formulated gradients Hessians.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.by.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate Seroincidence — est.incidence.by","text":"strata meaningful inputs: object class \"seroincidence.\"; .e., list \"seroincidence\" objects est.incidence(), one stratum, meta-data attributes. strata missing, NULL, NA, \"\": object class \"seroincidence\".","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.by.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate Seroincidence — est.incidence.by","text":"strata left empty, warning produced, recommending use est.incidence() unstratified analyses, data passed est.incidence(). reason want use est.incidence.() strata instead calling est.incidence(), may use NA, NULL, \"\" strata argument avoid warning.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.by.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate Seroincidence — est.incidence.by","text":"","code":"library(dplyr) xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") curve <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Reduce dataset for the purposes of this example noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") est2 <- est.incidence.by( strata = c(\"catchment\"), pop_data = xs_data %>% filter(Country == \"Pakistan\"), curve_params = curve, noise_params = noise %>% filter(Country == \"Pakistan\"), antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), #num_cores = 8 # Allow for parallel processing to decrease run time iterlim = 5 # limit iterations for the purpose of this example ) #> Warning: curve_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. #> Warning: noise_params is missing all strata variables, and will be used unstratified. #> #> To avoid this warning, specify the desired set of stratifying variables in the `curve_strata_varnames` and `noise_strata_varnames` arguments to `est.incidence.by()`. summary(est2) #> Seroincidence estimated given the following setup: #> a) Antigen isotypes : HlyE_IgG, HlyE_IgA #> b) Strata : catchment #> #> Seroincidence estimates: #> # A tibble: 2 × 13 #> Stratum catchment n est.start incidence.rate SE CI.lwr CI.upr #> #> 1 Stratum 1 aku 294 0.1 0.118 0.00825 0.103 0.136 #> 2 Stratum 2 kgh 200 0.1 0.183 0.0139 0.157 0.212 #> # ℹ 5 more variables: coverage , log.lik , iterations , #> # antigen.isos , nlm.convergence.code "},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the maximum likelihood estimate of the incidence rate parameter — est.incidence","title":"Find the maximum likelihood estimate of the incidence rate parameter — est.incidence","text":"function models seroincidence using maximum likelihood estimation; , finds value seroincidence parameter maximizes likelihood (.e., joint probability) data.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the maximum likelihood estimate of the incidence rate parameter — est.incidence","text":"","code":"est.incidence( pop_data, curve_params, noise_params, antigen_isos = pop_data$antigen_iso %>% unique(), lambda_start = 0.1, stepmin = 1e-08, stepmax = 3, verbose = FALSE, build_graph = FALSE, print_graph = build_graph & verbose, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the maximum likelihood estimate of the incidence rate parameter — est.incidence","text":"pop_data data.frame cross-sectional serology data per antibody age, additional columns curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_params data.frame() (tibble::tibble()) containing following variables, specifying noise parameters antigen isotype: antigen_iso: antigen isotype whose noise parameters specified row nu: biological noise eps: measurement noise y.low: lower limit detection current antigen isotype y.high: upper limit detection current antigen isotype antigen_isos Character vector one antibody names. Values must match pop_data lambda_start starting guess incidence rate, years/event. stepmin positive scalar providing minimum allowable relative step length. stepmax positive scalar gives maximum allowable scaled step length. stepmax used prevent steps cause optimization function overflow, prevent algorithm leaving area interest parameter space, detect divergence algorithm. stepmax chosen small enough prevent first two occurrences, larger anticipated reasonable step. verbose logical: TRUE, print verbose log information console build_graph whether graph log-likelihood function across range incidence rates (lambda values) print_graph whether display log-likelihood curve graph course running est.incidence() ... Arguments passed stats::nlm typsize estimate size parameter minimum. fscale estimate size f minimum. ndigit number significant digits function f. gradtol positive scalar giving tolerance scaled gradient considered close enough zero terminate algorithm. scaled gradient measure relative change f direction p[] divided relative change p[]. iterlim positive integer specifying maximum number iterations performed program terminated. check.analyticals logical scalar specifying whether analytic gradients Hessians, supplied, checked numerical derivatives initial parameter values. can help detect incorrectly formulated gradients Hessians.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the maximum likelihood estimate of the incidence rate parameter — est.incidence","text":"\"seroincidence\" object, stats::nlm() fit object extra meta-data attributes lambda_start, antigen_isos, ll_graph","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/est.incidence.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Find the maximum likelihood estimate of the incidence rate parameter — est.incidence","text":"","code":"library(dplyr) xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") curves <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Reduce dataset for the purposes of this example noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") est1 <- est.incidence( pop_data = xs_data %>% filter(Country == \"Pakistan\"), curve_params = curves, noise_params = noise %>% filter(Country == \"Pakistan\"), antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), iterlim = 5 # limit iterations for the purpose of this example ) summary(est1) #> # A tibble: 1 × 10 #> est.start incidence.rate SE CI.lwr CI.upr coverage log.lik iterations #> #> 1 0.1 0.142 0.00725 0.128 0.156 0.95 -2378. 4 #> # ℹ 2 more variables: antigen.isos , nlm.convergence.code "},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","text":"Calculates negative log-likelihood (deviance) one antigen:isotype pair several values incidence (lambda).","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","text":"","code":"f_dev(lambda, csdata, lnpars, cond)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","text":"lambda numeric vector incidence parameters, events per person-year","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","text":"numeric vector negative log-likelihoods, corresponding elements input lambda","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","text":"Vectorized version f_dev0(); interface C lib serocalc.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and several values of incidence — f_dev","text":"","code":"# \\donttest{ library(dplyr) library(tibble) # load in longitudinal parameters curve_params = load_curve_params(\"https://osf.io/download/rtw5k\") xs_data <- \"https://osf.io/download//n6cp3/\" %>% load_pop_data() #Load noise params noise_params <- tibble( antigen_iso = c(\"HlyE_IgG\", \"HlyE_IgA\"), nu = c(0.5, 0.5), # Biologic noise (nu) eps = c(0, 0), # M noise (eps) y.low = c(1, 1), # low cutoff (llod) y.high = c(5e6, 5e6)) # high cutoff (y.high) cur_antibody = \"HlyE_IgA\" cur_data = xs_data %>% dplyr::filter( .data$catchment == \"dhaka\", .data$antigen_iso == cur_antibody) %>% dplyr::slice_head(n = 100) cur_curve_params = curve_params %>% dplyr::filter(.data$antigen_iso == cur_antibody) %>% dplyr::slice_head(n = 100) cur_noise_params = noise_params %>% dplyr::filter(.data$antigen_iso == cur_antibody) if(!is.element('d', names(cur_curve_params))) { cur_curve_params = cur_curve_params %>% dplyr::mutate( alpha = .data$alpha * 365.25, d = .data$r - 1) } lambdas = seq(.1, .2, by = .01) f_dev( lambda = lambdas, csdata = cur_data, lnpars = cur_curve_params, cond = cur_noise_params ) #> [1] 390.8284 383.8554 377.6242 372.0178 366.9449 362.3328 358.1226 354.2657 #> [9] 350.7216 347.4560 344.4397 # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev0.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","text":"Calculate negative log-likelihood (deviance) one antigen:isotype pair incidence rate","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","text":"","code":"f_dev0(lambda, csdata, lnpars, cond)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev0.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","text":"lambda numeric() incidence parameter, events per person-year csdata cross-sectional sample data containing variables value age lnpars longitudinal antibody decay model parameters alpha, y1, d cond measurement noise parameters nu, eps, y.low, y.high","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev0.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","text":"numeric() negative log-likelihood, corresponding input lambda","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev0.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","text":"interface C lib serocalc.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/f_dev0.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate negative log-likelihood (deviance) for one antigen:isotype pair and incidence rate — f_dev0","text":"","code":"library(dplyr) library(tibble) # load in longitudinal parameters curve_params = load_curve_params(\"https://osf.io/download/rtw5k\") xs_data <- \"https://osf.io/download//n6cp3/\" %>% load_pop_data() #Load noise params noise_params <- tibble( antigen_iso = c(\"HlyE_IgG\", \"HlyE_IgA\"), nu = c(0.5, 0.5), # Biologic noise (nu) eps = c(0, 0), # M noise (eps) y.low = c(1, 1), # low cutoff (llod) y.high = c(5e6, 5e6)) # high cutoff (y.high) cur_antibody = \"HlyE_IgA\" cur_data <- xs_data %>% dplyr::filter( .data$catchment == \"dhaka\", .data$antigen_iso == cur_antibody) %>% dplyr::slice_head(n = 100) cur_curve_params <- curve_params %>% dplyr::filter(.data$antigen_iso == cur_antibody) %>% dplyr::slice_head(n = 100) cur_noise_params <- noise_params %>% dplyr::filter(.data$antigen_iso == cur_antibody) if(!is.element('d', names(cur_curve_params))) { cur_curve_params <- cur_curve_params %>% dplyr::mutate( alpha = .data$alpha * 365.25, d = .data$r - 1) } lambda = 0.1 f_dev0( lambda = lambda, csdata = cur_data, lnpars = cur_curve_params, cond = cur_noise_params ) #> [1] 390.8284"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/fdev.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate negative log-likelihood (deviance) — fdev","title":"Calculate negative log-likelihood (deviance) — fdev","text":"fdev() renamed f_dev() create consistent API.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/fdev.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate negative log-likelihood (deviance) — fdev","text":"","code":"fdev(lambda, csdata, lnpars, cond)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/getAdditionalData.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Additional Data — getAdditionalData","title":"Get Additional Data — getAdditionalData","text":"getAdditionalData() renamed get_additional_data() create consistent API.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/getAdditionalData.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Additional Data — getAdditionalData","text":"","code":"getAdditionalData(fileURL, savePath = NULL)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/get_additional_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Additional Data — get_additional_data","title":"Get Additional Data — get_additional_data","text":"Retrieves additional data internet. data format must .RDS zipped .RDS. purpose function download data longitudinal response parameters online repository cross-sectional population data. Data package available : https://osf.io/ne8pc/files/osfstorage can save data chosen directory using optional savePath argument. Specify file path file name. Large datasets may timeout. , can increase download time updating maximum timeout time code . (Ex: increase 300 1000) options(timeout = max(300, getOption(\"timeout\")))","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/get_additional_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Additional Data — get_additional_data","text":"","code":"get_additional_data(fileURL, savePath = NULL)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/get_additional_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get Additional Data — get_additional_data","text":"fileURL URL file downloaded. savePath Folder directory filename save downloaded unzipped (needed) file. File saved argument NULL. Optional. Default = NULL.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/get_additional_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Additional Data — get_additional_data","text":"R object stored file indicated fileURL input Data object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/get_additional_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get Additional Data — get_additional_data","text":"","code":"if (FALSE) { # \\dontrun{ curve_param_samples <- get_additional_data( fileURL = \"https://osf.io/download/bhfvx\" ) # optionally, save the data to disk curve_param_samples <- get_additional_data( fileURL = \"https://osf.io/download/bhfvx\", savePath = \"~/Downloads/curv_params.rds\" ) } # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph.curve.params.html","id":null,"dir":"Reference","previous_headings":"","what":"Graph estimated antibody decay curve — graph.curve.params","title":"Graph estimated antibody decay curve — graph.curve.params","text":"Graph estimated antibody decay curve","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph.curve.params.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Graph estimated antibody decay curve — graph.curve.params","text":"","code":"graph.curve.params( curve_params, antigen_isos = unique(curve_params$antigen_iso), verbose = FALSE )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph.curve.params.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Graph estimated antibody decay curve — graph.curve.params","text":"curve_params data.frame() containing MCMC samples antibody decay curve parameters antigen_isos antigen isotypes verbose verbose output","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph.curve.params.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Graph estimated antibody decay curve — graph.curve.params","text":"ggplot2::ggplot() object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph.curve.params.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Graph estimated antibody decay curve — graph.curve.params","text":"","code":"if (FALSE) { # \\dontrun{ plot1 <- graph.curve.params(curve_params) print(plot1) } # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph_loglik.html","id":null,"dir":"Reference","previous_headings":"","what":"Graph log-likelihood of data — graph_loglik","title":"Graph log-likelihood of data — graph_loglik","text":"Graph log-likelihood data","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph_loglik.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Graph log-likelihood of data — graph_loglik","text":"","code":"graph_loglik( pop_data, curve_params, noise_params, antigen_isos = pop_data %>% get_biomarker_levels(), x = 10^seq(-3, 0, by = 0.1), highlight_points = NULL, highlight_point_names = \"highlight_points\", log_x = FALSE, previous_plot = NULL, curve_label = paste(antigen_isos, collapse = \" + \"), ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph_loglik.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Graph log-likelihood of data — graph_loglik","text":"pop_data data.frame() cross-sectional serology data antibody age, additional columns curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_params data.frame() (tibble::tibble()) containing following variables, specifying noise parameters antigen isotype: antigen_iso: antigen isotype whose noise parameters specified row nu: biological noise eps: measurement noise y.low: lower limit detection current antigen isotype y.high: upper limit detection current antigen isotype antigen_isos Character vector listing one antigen isotypes. Values must match pop_data. x sequence lambda values graph highlight_points possible highlighted value highlight_point_names labels highlighted points log_x x-axis logarithmic scale (TRUE) linear scale (FALSE, default)? previous_plot NULL, current data added existing graph curve_label NULL, add label curve ... Arguments passed log_likelihood verbose logical: TRUE, print verbose log information console","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph_loglik.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Graph log-likelihood of data — graph_loglik","text":"ggplot2::ggplot()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/graph_loglik.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Graph log-likelihood of data — graph_loglik","text":"","code":"library(dplyr) library(tibble) # Load cross-sectional data xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") # Load curve parameters and subset for the purposes of this example dmcmc <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Load noise parameters cond <- tibble( antigen_iso = c(\"HlyE_IgG\", \"HlyE_IgA\"), nu = c(0.5, 0.5), # Biologic noise (nu) eps = c(0, 0), # M noise (eps) y.low = c(1, 1), # Low cutoff (llod) y.high = c(5e6, 5e6)) # High cutoff (y.high) # Graph the log likelihood lik_HlyE_IgA <- # nolint: object_name_linter graph_loglik( pop_data = xs_data, curve_params = dmcmc, noise_params = cond, antigen_isos = \"HlyE_IgA\", log_x = TRUE ) lik_HlyE_IgA # nolint: object_name_linter"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ldpar.html","id":null,"dir":"Reference","previous_headings":"","what":"extract a row from longitudinal parameter set — ldpar","title":"extract a row from longitudinal parameter set — ldpar","text":"take random sample longitudinal parameter set given age infection, list antibodies ldpar() renamed row_longitudinal_parameter() create consistent API.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ldpar.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"extract a row from longitudinal parameter set — ldpar","text":"","code":"ldpar(age, antigen_isos, nmc, npar, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ldpar.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"extract a row from longitudinal parameter set — ldpar","text":"age age infection antigen_isos antigen isotypes nmc mcmc sample use npar number parameters ... passed simpar()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/ldpar.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"extract a row from longitudinal parameter set — ldpar","text":"array parameters: c(y0,b0,mu0,mu1,c1,alpha,shape)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/llik.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate log-likelihood — llik","title":"Calculate log-likelihood — llik","text":"Calculates log-likelihood set cross-sectional antibody response data, given incidence rate (lambda) value. llik() renamed log_likelihood() create consistent API.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/llik.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate log-likelihood — llik","text":"","code":"llik(...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_curve_params.html","id":null,"dir":"Reference","previous_headings":"","what":"Load antibody decay curve parameter samples — load_curve_params","title":"Load antibody decay curve parameter samples — load_curve_params","text":"Load antibody decay curve parameter samples","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_curve_params.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load antibody decay curve parameter samples — load_curve_params","text":"","code":"load_curve_params(file_path, antigen_isos = NULL)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_curve_params.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load antibody decay curve parameter samples — load_curve_params","text":"file_path path RDS file containing MCMC samples antibody decay curve parameters y0, y1, t1, alpha, r, stored data.frame() tibble::tbl_df antigen_isos character() vector antigen isotypes used analyses","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_curve_params.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load antibody decay curve parameter samples — load_curve_params","text":"curve_params object (tibble::tbl_df extra attribute antigen_isos)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_curve_params.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load antibody decay curve parameter samples — load_curve_params","text":"","code":"curve <- load_curve_params(\"https://osf.io/download/rtw5k/\") print(curve) #> # A tibble: 20,000 × 7 #> antigen_iso iter y0 y1 t1 alpha r #> #> 1 HlyE_IgA 1 2.48 63.5 9.52 0.000581 1.75 #> 2 HlyE_IgG 1 3.04 164. 6.55 0.00457 1.17 #> 3 LPS_IgA 1 0.748 103. 4.98 0.00308 1.58 #> 4 LPS_IgG 1 0.941 320. 6.14 0.00166 1.41 #> 5 Vi_IgG 1 8.46 4348. 3.07 0.0000340 1.06 #> 6 HlyE_IgA 2 3.86 288. 1.27 0.000459 2.66 #> 7 HlyE_IgG 2 1.82 154. 10.8 0.000921 1.30 #> 8 LPS_IgA 2 1.76 852. 2.49 0.000126 2.91 #> 9 LPS_IgG 2 0.434 20.6 4.29 0.00122 1.37 #> 10 Vi_IgG 2 18.8 345. 3.48 0.000142 1.02 #> # ℹ 19,990 more rows"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_noise_params.html","id":null,"dir":"Reference","previous_headings":"","what":"Load noise parameters — load_noise_params","title":"Load noise parameters — load_noise_params","text":"Load noise parameters","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_noise_params.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load noise parameters — load_noise_params","text":"","code":"load_noise_params(file_path, antigen_isos = NULL)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_noise_params.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load noise parameters — load_noise_params","text":"file_path path RDS file containing biologic measurement noise antibody decay curve parameters y.low, eps, nu, y.high, stored data.frame() tibble::tbl_df antigen_isos character() vector antigen isotypes used analyses","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_noise_params.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load noise parameters — load_noise_params","text":"noise object (tibble::tbl_df extra attribute antigen_isos)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_noise_params.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load noise parameters — load_noise_params","text":"","code":"noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") print(noise) #> # A tibble: 16 × 7 #> antigen_iso Country y.low eps nu y.high Lab #> #> 1 HlyE_IgA Bangladesh 0.376 0.280 2.60 5000000 CHRF #> 2 HlyE_IgA Ghana 0.179 0.240 2.60 5000000 MGH #> 3 HlyE_IgA Nepal 0.853 0.238 2.60 5000000 DH #> 4 HlyE_IgA Pakistan 0.508 0.279 2.60 5000000 AKU #> 5 HlyE_IgG Bangladesh 0.787 0.306 2.36 5000000 CHRF #> 6 HlyE_IgG Ghana 0.645 0.164 2.36 5000000 MGH #> 7 HlyE_IgG Nepal 1.89 0.128 2.36 5000000 DH #> 8 HlyE_IgG Pakistan 1.59 0.146 2.36 5000000 AKU #> 9 LPS_IgA Bangladesh 0.660 0.299 2.14 5000000 CHRF #> 10 LPS_IgA Ghana 0.861 0.163 2.14 5000000 MGH #> 11 LPS_IgA Nepal 1.79 0.115 2.14 5000000 DH #> 12 LPS_IgA Pakistan 5.13 0.246 2.14 5000000 AKU #> 13 LPS_IgG Bangladesh 0.992 0.298 3.24 5000000 CHRF #> 14 LPS_IgG Ghana 0.885 0.195 3.24 5000000 MGH #> 15 LPS_IgG Nepal 0.647 0.179 3.24 5000000 DH #> 16 LPS_IgG Pakistan 4.84 0.273 3.24 5000000 AKU"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_pop_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Load a cross-sectional antibody survey data set — load_pop_data","title":"Load a cross-sectional antibody survey data set — load_pop_data","text":"Load cross-sectional antibody survey data set","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_pop_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Load a cross-sectional antibody survey data set — load_pop_data","text":"","code":"load_pop_data(file_path, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_pop_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Load a cross-sectional antibody survey data set — load_pop_data","text":"file_path path RDS file containing cross-sectional antibody survey data set, stored data.frame() tibble::tbl_df ... Arguments passed as_pop_data data data.frame() tibble::tbl_df antigen_isos character() vector antigen isotypes used analyses age character() identifying age column id character() identifying id column value character() identifying value column standardize logical() determine standardization columns","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_pop_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Load a cross-sectional antibody survey data set — load_pop_data","text":"pop_data object (tibble::tbl_df extra attributes)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/load_pop_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Load a cross-sectional antibody survey data set — load_pop_data","text":"","code":"xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") print(xs_data) #> # A tibble: 3,336 × 8 #> id Country cluster catchment age ageCat antigen_iso value #> #> 1 B1 Bangladesh Ward 2 N dhaka 4 <5 HlyE_IgA 7.24 #> 2 B2 Bangladesh Ward 2 N dhaka 4 <5 HlyE_IgG 24.0 #> 3 B3 Bangladesh Ward 2 N dhaka 3.7 <5 HlyE_IgA 0.836 #> 4 B4 Bangladesh Ward 2 N dhaka 3.7 <5 HlyE_IgG 3.17 #> 5 B5 Bangladesh Ward 2 N dhaka 10.6 5-15 HlyE_IgA 3.42 #> 6 B6 Bangladesh Ward 2 N dhaka 10.6 5-15 HlyE_IgG 14.3 #> 7 B7 Bangladesh Ward 2 N dhaka 16 16+ HlyE_IgA 8.84 #> 8 B8 Bangladesh Ward 2 N dhaka 16 16+ HlyE_IgG 14.2 #> 9 B9 Bangladesh Ward 2 N dhaka 16.5 16+ HlyE_IgA 10.3 #> 10 B10 Bangladesh Ward 2 N dhaka 16.5 16+ HlyE_IgG 29.4 #> # ℹ 3,326 more rows"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/log_likelihood.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate log-likelihood — log_likelihood","title":"Calculate log-likelihood — log_likelihood","text":"Calculates log-likelihood set cross-sectional antibody response data, given incidence rate (lambda) value.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/log_likelihood.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate log-likelihood — log_likelihood","text":"","code":"log_likelihood( lambda, pop_data, curve_params, noise_params, antigen_isos = get_biomarker_levels(pop_data), verbose = FALSE, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/log_likelihood.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate log-likelihood — log_likelihood","text":"lambda numeric vector incidence parameters, events per person-year pop_data data.frame() cross-sectional serology data antibody age, additional columns curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_params data.frame() (tibble::tibble()) containing following variables, specifying noise parameters antigen isotype: antigen_iso: antigen isotype whose noise parameters specified row nu: biological noise eps: measurement noise y.low: lower limit detection current antigen isotype y.high: upper limit detection current antigen isotype antigen_isos Character vector listing one antigen isotypes. Values must match pop_data. verbose logical: TRUE, print verbose log information console ... additional arguments passed functions (currently used).","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/log_likelihood.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate log-likelihood — log_likelihood","text":"log-likelihood data current parameter values","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/log_likelihood.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate log-likelihood — log_likelihood","text":"","code":"library(dplyr) library(tibble) # load in longitudinal parameters dmcmc <- load_curve_params(\"https://osf.io/download/rtw5k\") xs_data <- \"https://osf.io/download//n6cp3/\" %>% load_pop_data() # Load noise params cond <- tibble( antigen_iso = c(\"HlyE_IgG\", \"HlyE_IgA\"), nu = c(0.5, 0.5), # Biologic noise (nu) eps = c(0, 0), # M noise (eps) y.low = c(1, 1), # low cutoff (llod) y.high = c(5e6, 5e6) ) # high cutoff (y.high) # Calculate log-likelihood ll_AG <- log_likelihood( pop_data = xs_data, curve_params = dmcmc, noise_params = cond, antigen_isos = c(\"HlyE_IgG\", \"HlyE_IgA\"), lambda = 0.1 ) %>% print() #> [1] -9268.824"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mk_baseline.html","id":null,"dir":"Reference","previous_headings":"","what":"generate random sample from baseline distribution — mk_baseline","title":"generate random sample from baseline distribution — mk_baseline","text":"generate random sample baseline distribution","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mk_baseline.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"generate random sample from baseline distribution — mk_baseline","text":"","code":"mk_baseline(kab, n = 1, blims, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mk_baseline.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"generate random sample from baseline distribution — mk_baseline","text":"kab index row antibody baseline limits read blims n number observations blims range possible baseline antibody levels ... currently used","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mk_baseline.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"generate random sample from baseline distribution — mk_baseline","text":"numeric() vector","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mkbaseline.html","id":null,"dir":"Reference","previous_headings":"","what":"generate random sample from baseline distribution — mkbaseline","title":"generate random sample from baseline distribution — mkbaseline","text":"mkbaseline() renamed mk_baseline() create consistent API.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mkbaseline.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"generate random sample from baseline distribution — mkbaseline","text":"","code":"mkbaseline(kab, n = 1, blims, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mkbaseline.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"generate random sample from baseline distribution — mkbaseline","text":"kab index row antibody baseline limits read blims n number observations blims range possible baseline antibody levels ... currently used","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/mkbaseline.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"generate random sample from baseline distribution — mkbaseline","text":"numeric() vector","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/plot_curve_params_one_ab.html","id":null,"dir":"Reference","previous_headings":"","what":"Graph an antibody decay curve model — plot_curve_params_one_ab","title":"Graph an antibody decay curve model — plot_curve_params_one_ab","text":"Graph antibody decay curve model","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/plot_curve_params_one_ab.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Graph an antibody decay curve model — plot_curve_params_one_ab","text":"","code":"plot_curve_params_one_ab( object, verbose = FALSE, alpha = 0.4, n_curves = 100, n_points = 1000, log_x = FALSE, log_y = TRUE, rows_to_graph = seq_len(min(n_curves, nrow(object))), xlim = c(10^-1, 10^3.1), ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/plot_curve_params_one_ab.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Graph an antibody decay curve model — plot_curve_params_one_ab","text":"object data.frame() curve parameters (one MCMC samples) verbose verbose output alpha (passed ggplot2::geom_function()) transparent curves : 0 = fully transparent (invisible) 1 = fully opaque n_curves many curves plot (see details). n_points Number points interpolate along x axis (passed ggplot2::geom_function()) log_x x-axis logarithmic scale (TRUE) linear scale (FALSE, default)? log_y Y-axis logarithmic scale (default, TRUE) linear scale (FALSE)? rows_to_graph rows curve_params plot (overrides n_curves). xlim range x values graph ... Arguments passed ggplot2::geom_function mapping Set aesthetic mappings created aes(). specified inherit.aes = TRUE (default), combined default mapping top level plot. must supply mapping plot mapping. data Ignored stat_function(), use. stat statistical transformation use data layer. using geom_*() function construct layer, stat argument can used override default coupling geoms stats. stat argument accepts following: Stat ggproto subclass, example StatCount. string naming stat. give stat string, strip function name stat_ prefix. example, use stat_count(), give stat \"count\". information ways specify stat, see layer stat documentation. position position adjustment use data layer. can used various ways, including prevent overplotting improving display. position argument accepts following: result calling position function, position_jitter(). method allows passing extra arguments position. string naming position adjustment. give position string, strip function name position_ prefix. example, use position_jitter(), give position \"jitter\". information ways specify position, see layer position documentation. na.rm FALSE, default, missing values removed warning. TRUE, missing values silently removed. show.legend logical. layer included legends? NA, default, includes aesthetics mapped. FALSE never includes, TRUE always includes. can also named logical vector finely select aesthetics display. inherit.aes FALSE, overrides default aesthetics, rather combining . useful helper functions define data aesthetics inherit behaviour default plot specification, e.g. borders().","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/plot_curve_params_one_ab.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Graph an antibody decay curve model — plot_curve_params_one_ab","text":"ggplot2::ggplot() object","code":""},{"path":[]},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/plot_curve_params_one_ab.html","id":"n-curves-and-rows-to-graph","dir":"Reference","previous_headings":"","what":"n_curves and rows_to_graph","title":"Graph an antibody decay curve model — plot_curve_params_one_ab","text":"cases, curve_params contain many rows MCMC samples samples plotted . Setting n_curves argument value smaller number rows curve_params cause function select first n_curves rows graph. Setting n_curves larger number rows ` result curves plotted. user directly specifies rows_to_graph argument, n_curves effect.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/plot_curve_params_one_ab.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Graph an antibody decay curve model — plot_curve_params_one_ab","text":"","code":"library(dplyr) # loads the `%>%` operator and `dplyr::filter()` load_curve_params(\"https://osf.io/download/rtw5k/\") %>% dplyr::filter(antigen_iso == \"HlyE_IgG\") %>% serocalculator:::plot_curve_params_one_ab()"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Print Method for seroincidence.by Object — print.seroincidence.by","title":"Print Method for seroincidence.by Object — print.seroincidence.by","text":"Custom print() function show output seroincidence calculator est.incidence.().","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print Method for seroincidence.by Object — print.seroincidence.by","text":"","code":"# S3 method for class 'seroincidence.by' print(x, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print Method for seroincidence.by Object — print.seroincidence.by","text":"x list containing output function est.incidence.(). ... Additional arguments affecting summary produced.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.by.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print Method for seroincidence.by Object — print.seroincidence.by","text":"","code":"if (FALSE) { # \\dontrun{ # Estimate seroincidence seroincidence <- est.incidence.by(...) # Print the seroincidence object to the console print(seroincidence) # Or simply type (appropriate print method will be invoked automatically) seroincidence } # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.html","id":null,"dir":"Reference","previous_headings":"","what":"Print Method for seroincidence Object — print.seroincidence","title":"Print Method for seroincidence Object — print.seroincidence","text":"Custom print() function show output seroincidence calculator est.incidence().","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print Method for seroincidence Object — print.seroincidence","text":"","code":"# S3 method for class 'seroincidence' print(x, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print Method for seroincidence Object — print.seroincidence","text":"x list containing output function est.incidence.(). ... Additional arguments affecting summary produced.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.seroincidence.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print Method for seroincidence Object — print.seroincidence","text":"","code":"if (FALSE) { # \\dontrun{ # Estimate seroincidence seroincidence <- est.incidence.by(...) # Print the seroincidence object to the console print(seroincidence) # Or simply type (appropriate print method will be invoked automatically) seroincidence } # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.summary.seroincidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Print Method for Seroincidence Summary Object — print.summary.seroincidence.by","title":"Print Method for Seroincidence Summary Object — print.summary.seroincidence.by","text":"Custom print() function \"summary.seroincidence.\" objects (constructed summary.seroincidence.())","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.summary.seroincidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print Method for Seroincidence Summary Object — print.summary.seroincidence.by","text":"","code":"# S3 method for class 'summary.seroincidence.by' print(x, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.summary.seroincidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print Method for Seroincidence Summary Object — print.summary.seroincidence.by","text":"x \"summary.seroincidence.\" object (constructed summary.seroincidence.()) ... Additional arguments affecting summary produced.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/print.summary.seroincidence.by.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print Method for Seroincidence Summary Object — print.summary.seroincidence.by","text":"","code":"if (FALSE) { # \\dontrun{ # Estimate seroincidence seroincidence <- est.incidence.by(...) # Calculate summary statistics for the seroincidence object seroincidenceSummary <- summary(seroincidence) # Print the summary of seroincidence object to the console print(seroincidenceSummary) # Or simply type (appropriate print method will be invoked automatically) seroincidenceSummary } # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"Objects exported from other packages — reexports","title":"Objects exported from other packages — reexports","text":"objects imported packages. Follow links see documentation. ggplot2 autoplot","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/row_longitudinal_parameter.html","id":null,"dir":"Reference","previous_headings":"","what":"extract a row from longitudinal parameter set — row_longitudinal_parameter","title":"extract a row from longitudinal parameter set — row_longitudinal_parameter","text":"take random sample longitudinal parameter set given age infection, list antibodies","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/row_longitudinal_parameter.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"extract a row from longitudinal parameter set — row_longitudinal_parameter","text":"","code":"row_longitudinal_parameter(age, antigen_isos, nmc, npar, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/row_longitudinal_parameter.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"extract a row from longitudinal parameter set — row_longitudinal_parameter","text":"age age infection antigen_isos antigen isotypes nmc mcmc sample use npar number parameters ... passed simpar()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/row_longitudinal_parameter.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"extract a row from longitudinal parameter set — row_longitudinal_parameter","text":"array parameters: c(y0,b0,mu0,mu1,c1,alpha,shape)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/serocalculator.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimating Infection Rates from Serological Data — serocalculator","title":"Estimating Infection Rates from Serological Data — serocalculator","text":"package translates antibody levels measured (cross-sectional) population sample estimate frequency seroconversions (infections) occur sampled population.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/serocalculator.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimating Infection Rates from Serological Data — serocalculator","text":"_PACKAGE","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/serocalculator.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Estimating Infection Rates from Serological Data — serocalculator","text":"Methods estimating seroincidence Teunis, P. F. M., J. C. H. van Eijkeren. \"Estimation seroconversion rates infectious diseases: Effects age noise.\" Statistics Medicine 39, . 21 (2020): 2799-2814. Teunis, P. F. M., J. C. H. van Eijkeren, W. F. de Graaf, . Bonačić Marinović, M. E. E. Kretzschmar. \"Linking seroresponse infection within-host heterogeneity antibody production.\" Epidemics 16 (2016): 33-39. Applications Aiemjoy, Kristen, Jessica C. Seidman, Senjuti Saha, Sira Jam Munira, Mohammad Saiful Islam Sajib, Syed Muktadir Al Sium, Anik Sarkar et al. \"Estimating typhoid incidence community-based serosurveys: multicohort study.\" Lancet Microbe 3, . 8 (2022): e578-e587. Aiemjoy, Kristen, John Rumunu, Juma John Hassen, Kirsten E. Wiens, Denise Garrett, Polina Kamenskaya, Jason B. Harris et al. \"Seroincidence enteric fever, Juba, South Sudan.\" Emerging infectious diseases 28, . 11 (2022): 2316. Monge, S., Teunis, P. F., Friesema, ., Franz, E., Ang, W., van Pelt, W., Mughini-Gras, L. \"Immune response-eliciting exposure Campylobacter vastly exceeds incidence clinically overt campylobacteriosis associated similar risk factors: nationwide serosurvey Netherlands\" Journal Infection, 2018, 1–7, doi:10.1016/j.jinf.2018.04.016 Kretzschmar, M., Teunis, P. F., Pebody, R. G. \"Incidence reproduction numbers pertussis: estimates serological social contact data five European countries\" PLoS Medicine 7, . 6 (June 1, 2010):e1000291. doi:10.1371/journal.pmed.1000291. Simonsen, J., Strid, M. ., Molbak, K., Krogfelt, K. ., Linneberg, ., Teunis, P. \"Sero-epidemiology tool study incidence Salmonella infections humans\" Epidemiology Infection 136, . 7 (July 1, 2008): 895–902. doi:10.1017/S0950268807009314 Simonsen, J., Teunis, P. F., van Pelt, W., van Duynhoven, Y., Krogfelt, K. ., Sadkowska-Todys, M., Molbak K. \"Usefulness seroconversion rates comparing infection pressures countries\" Epidemiology Infection, April 12, 2010, 1–8. doi:10.1017/S0950268810000750. Falkenhorst, G., Simonsen, J., Ceper, T. H., van Pelt, W., de Valk, H., Sadkowska-Todys, M., Zota, L., Kuusi, M., Jernberg, C., Rota, M. C., van Duynhoven, Y. T., Teunis, P. F., Krogfelt, K. ., Molbak, K. \"Serological cross-sectional studies salmonella incidence eight European countries: correlation incidence reported cases\" BMC Public Health 12, . 1 (July 15, 2012): 523–23. doi:10.1186/1471-2458-12-523. Teunis, P. F., Falkenhorst, G., Ang, C. W., Strid, M. ., De Valk, H., Sadkowska-Todys, M., Zota, L., Kuusi, M., Rota, M. C., Simonsen, J. B., Molbak, K., Van Duynhoven, Y. T., van Pelt, W. \"Campylobacter seroconversion rates selected countries European Union\" Epidemiology Infection 141, . 10 (2013): 2051–57. doi:10.1017/S0950268812002774. de Melker, H. E., Versteegh, F. G., Schellekens, J. F., Teunis, P. F., Kretzschmar, M. \"incidence Bordetella pertussis infections estimated population combination serological surveys\" Journal Infection 53, . 2 (August 1, 2006): 106–13. doi:10.1016/j.jinf.2005.10.020 Quantification seroresponse de Graaf, W. F., Kretzschmar, M. E., Teunis, P. F., Diekmann, O. \"two-phase within-host model immune response application serological profiles pertussis\" Epidemics 9 (2014):1–7. doi:10.1016/j.epidem.2014.08.002. Berbers, G. ., van de Wetering, M. S., van Gageldonk, P. G., Schellekens, J. F., Versteegh, F. G., Teunis, P.F. \"novel method evaluating natural vaccine induced serological responses Bordetella pertussis antigens\" Vaccine 31, . 36 (August 12, 2013): 3732–38. doi:10.1016/j.vaccine.2013.05.073. Versteegh, F. G., Mertens, P. L., de Melker, H. E., Roord, J. J., Schellekens, J. F., Teunis, P. F. \"Age-specific long-term course IgG antibodies pertussis toxin symptomatic infection Bordetella pertussis\" Epidemiology Infection 133, . 4 (August 1, 2005): 737–48. Teunis, P. F., van der Heijden, O. G., de Melker, H. E., Schellekens, J. F., Versteegh, F. G., Kretzschmar, M. E. \"Kinetics IgG antibody response pertussis toxin infection B. pertussis\" Epidemiology Infection 129, . 3 (December 10, 2002):479. doi:10.1017/S0950268802007896.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/serocalculator.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Estimating Infection Rates from Serological Data — serocalculator","text":"Peter Teunis p.teunis@emory.edu Doug Ezra Morrison demorrison@ucdavis.edu Kristen Aiemjoy kaiemjoy@ucdavis.edu Kristina Lai kwlai@ucdavis.edu","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate a cross-sectional serosurvey with noise — sim.cs","title":"Simulate a cross-sectional serosurvey with noise — sim.cs","text":"Makes cross-sectional data set (age, y(t) set) adds noise, desired.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate a cross-sectional serosurvey with noise — sim.cs","text":"","code":"sim.cs( lambda = 0.1, n.smpl = 100, age.rng = c(0, 20), age.fx = NA, antigen_isos, n.mc = 0, renew.params = FALSE, add.noise = FALSE, curve_params, noise_limits, format = \"wide\", verbose = FALSE, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate a cross-sectional serosurvey with noise — sim.cs","text":"lambda numeric() scalar indicating incidence rate (events per person-years) n.smpl number samples simulate age.rng age range sampled individuals, years age.fx specify curve parameters use age (nothing present?) antigen_isos Character vector one antibody names. Values must match curve_params. n.mc many MCMC samples use: n.mc 1:4000 fixed posterior sample used n.mc = 0, random sample chosen renew.params whether generate new parameter set infection renew.params = TRUE generates new parameter set infection renew.params = FALSE keeps one selected birth, updates baseline y0 add.noise logical() indicating whether add biological measurement noise curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_limits biologic noise distribution parameters format character() variable, containing either: \"long\" (one measurement per row) \"wide\" (one serum sample per row) verbose logical: TRUE, print verbose log information console ... Arguments passed simcs.tinf","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate a cross-sectional serosurvey with noise — sim.cs","text":"tibble::tbl_df containing simulated cross-sectional serosurvey data, columns: age: age (days) one column element antigen_iso input argument","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulate a cross-sectional serosurvey with noise — sim.cs","text":"","code":"# Load curve parameters dmcmc <- load_curve_params(\"https://osf.io/download/rtw5k\") # Specify the antibody-isotype responses to include in analyses antibodies <- c(\"HlyE_IgA\", \"HlyE_IgG\") # Set seed to reproduce results set.seed(54321) # Simulated incidence rate per person-year lambda <- 0.2; # Range covered in simulations lifespan <- c(0, 10); # Cross-sectional sample size nrep <- 100 # Biologic noise distribution dlims <- rbind( \"HlyE_IgA\" = c(min = 0, max = 0.5), \"HlyE_IgG\" = c(min = 0, max = 0.5) ) # Generate cross-sectional data csdata <- sim.cs( curve_params = dmcmc, lambda = lambda, n.smpl = nrep, age.rng = lifespan, antigen_isos = antibodies, n.mc = 0, renew.params = TRUE, add.noise = TRUE, noise_limits = dlims, format = \"long\" )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulate multiple data sets — sim.cs.multi","title":"Simulate multiple data sets — sim.cs.multi","text":"Simulate multiple data sets","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulate multiple data sets — sim.cs.multi","text":"","code":"sim.cs.multi( nclus = 10, lambdas = c(0.05, 0.1, 0.15, 0.2, 0.3), num_cores = max(1, parallel::detectCores() - 1), rng_seed = 1234, renew.params = TRUE, add.noise = TRUE, verbose = FALSE, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.multi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulate multiple data sets — sim.cs.multi","text":"nclus number clusters lambdas #incidence rate, events/person*year num_cores number cores use parallel computations rng_seed starting seed random number generator, passed rngtools::RNGseq() renew.params whether generate new parameter set infection renew.params = TRUE generates new parameter set infection renew.params = FALSE keeps one selected birth, updates baseline y0 add.noise logical() indicating whether add biological measurement noise verbose whether report verbose information ... Arguments passed sim.cs lambda numeric() scalar indicating incidence rate (events per person-years) n.smpl number samples simulate age.rng age range sampled individuals, years age.fx specify curve parameters use age (nothing present?) antigen_isos Character vector one antibody names. Values must match curve_params. n.mc many MCMC samples use: n.mc 1:4000 fixed posterior sample used n.mc = 0, random sample chosen noise_limits biologic noise distribution parameters format character() variable, containing either: \"long\" (one measurement per row) \"wide\" (one serum sample per row) curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sim.cs.multi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulate multiple data sets — sim.cs.multi","text":"tibble::tibble()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simcs.tinf.html","id":null,"dir":"Reference","previous_headings":"","what":"collect cross-sectional data — simcs.tinf","title":"collect cross-sectional data — simcs.tinf","text":"output: (age, y(t) set)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simcs.tinf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"collect cross-sectional data — simcs.tinf","text":"","code":"simcs.tinf( lambda, n.smpl, age.rng, age.fx = NA, antigen_isos, n.mc = 0, renew.params = FALSE, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simcs.tinf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"collect cross-sectional data — simcs.tinf","text":"lambda seroconversion rate (events/person-day) n.smpl number samples n.smpl (= nr simulated records) age.rng age range use simulating data, days age.fx age.fx parameter sample (age.fx = NA age infection) antigen_isos Character vector one antibody names. Values must match curve_params. n.mc n.mc 1:4000 fixed posterior sample used n.mc = 0 random sample chosen renew.params renew.params = TRUE generates new parameter set infection renew.params = FALSE keeps one selected birth, updates baseline y0 ... arguments passed simresp.tinf()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simcs.tinf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"collect cross-sectional data — simcs.tinf","text":"array()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simresp.tinf.html","id":null,"dir":"Reference","previous_headings":"","what":"simulate antibody kinetics of y over a time interval — simresp.tinf","title":"simulate antibody kinetics of y over a time interval — simresp.tinf","text":"simulate antibody kinetics y time interval","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simresp.tinf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"simulate antibody kinetics of y over a time interval — simresp.tinf","text":"","code":"simresp.tinf( lambda, t.end, age.fx, antigen_isos, n.mc = 0, renew.params, predpar, ... )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simresp.tinf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"simulate antibody kinetics of y over a time interval — simresp.tinf","text":"lambda seroconversion rate (1/days), t.end end time interval (beginning time 0) days(?) age.fx parameter estimates fixed age (age.fx years) . age.fx = NA age infection used. antigen_isos antigen isotypes n.mc posterior sample may selected (1:4000), n.mc = 0 posterior sample chosen random. renew.params infection, new parameter sample may generated (renew.params = TRUE). Otherwise (renew.params = FALSE), sample generated birth kept, baseline y0 carried prior infections. predpar array() dimensions named: antigen_iso parameter obs ... Arguments passed row_longitudinal_parameter, ab, mk_baseline age age infection nmc mcmc sample use npar number parameters t age infection? par parameters kab index row antibody baseline limits read blims n number observations blims range possible baseline antibody levels","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/simresp.tinf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"simulate antibody kinetics of y over a time interval — simresp.tinf","text":"function returns list() : t = times (days, birth day 0), b = bacteria level, antibody signal (used; probably meaningless), y = antibody level, antibody signal smp = whether infection involves big jump small jump t.inf = times infections occurred.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract strata from an object — strata","title":"Extract strata from an object — strata","text":"Generic method extracting strata objects. See strata.seroincidence.()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract strata from an object — strata","text":"","code":"strata(x)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract strata from an object — strata","text":"x object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract strata from an object — strata","text":"strata x","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.seroincidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract the Strata attribute from an object, if present — strata.seroincidence.by","title":"Extract the Strata attribute from an object, if present — strata.seroincidence.by","text":"Extract Strata attribute object, present","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.seroincidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract the Strata attribute from an object, if present — strata.seroincidence.by","text":"","code":"# S3 method for class 'seroincidence.by' strata(x)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.seroincidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract the Strata attribute from an object, if present — strata.seroincidence.by","text":"x R object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/strata.seroincidence.by.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract the Strata attribute from an object, if present — strata.seroincidence.by","text":"tibble::tibble() strata rows, NULL x \"strata\" attribute","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/stratify_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Split data by stratum — stratify_data","title":"Split data by stratum — stratify_data","text":"Split biomarker data, decay curve parameters, noise parameters prepare stratified incidence estimation.","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/stratify_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Split data by stratum — stratify_data","text":"","code":"stratify_data( data, curve_params, noise_params, strata_varnames = \"\", curve_strata_varnames = NULL, noise_strata_varnames = NULL, antigen_isos = data %>% attr(\"antigen_isos\") )"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/stratify_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Split data by stratum — stratify_data","text":"curve_params data.frame() containing MCMC samples parameters Bayesian posterior distribution longitudinal decay curve model. parameter columns must named: antigen_iso: character() vector indicating antigen-isotype combinations iter: integer() vector indicating MCMC sampling iterations y0: baseline antibody level $t=0$ ($y(t=0)$) y1: antibody peak level (ELISA units) t1: duration infection alpha: antibody decay rate (1/days current longitudinal parameter sets) r: shape factor antibody decay noise_params data.frame() (tibble::tibble()) containing following variables, specifying noise parameters antigen isotype: antigen_iso: antigen isotype whose noise parameters specified row nu: biological noise eps: measurement noise y.low: lower limit detection current antigen isotype y.high: upper limit detection current antigen isotype strata_varnames character() vector names variables data stratify curve_strata_varnames subset strata. Values must variable names curve_params. Default = \"\". noise_strata_varnames subset strata. Values must variable names noise_params. Default = \"\". antigen_isos Character vector one antibody names. Values must match pop_data","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/stratify_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Split data by stratum — stratify_data","text":"\"biomarker_data_and_params.list\" object (list extra attributes \"strata\", \"antigen_isos\", etc)","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/stratify_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Split data by stratum — stratify_data","text":"","code":"if (FALSE) { # \\dontrun{ library(dplyr) xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") curve <- load_curve_params(\"https://osf.io/download/rtw5k/\") %>% filter(antigen_iso %in% c(\"HlyE_IgA\", \"HlyE_IgG\")) %>% slice(1:100, .by = antigen_iso) # Reduce dataset for the purposes of this example noise <- load_noise_params(\"https://osf.io/download//hqy4v/\") stratified_data = stratify_data( data = xs_data, curve_params = curve, noise_params = noise, strata_varnames = \"catchment\", curve_strata_varnames = NULL, noise_strata_varnames = NULL ) } # }"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sub-.seroincidence.by.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract or replace parts of a seroincidence.by object — [.seroincidence.by","title":"Extract or replace parts of a seroincidence.by object — [.seroincidence.by","text":"Extract replace parts seroincidence.object","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sub-.seroincidence.by.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract or replace parts of a seroincidence.by object — [.seroincidence.by","text":"","code":"# S3 method for class 'seroincidence.by' x[i, ...]"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sub-.seroincidence.by.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract or replace parts of a seroincidence.by object — [.seroincidence.by","text":"x object subset/replace elements indices subset/replace ... passed [.list","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/sub-.seroincidence.by.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract or replace parts of a seroincidence.by object — [.seroincidence.by","text":"subset specified","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/summary.pop_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Summarize cross-sectional antibody survey data — summary.pop_data","title":"Summarize cross-sectional antibody survey data — summary.pop_data","text":"summary() method pop_data objects","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/summary.pop_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summarize cross-sectional antibody survey data — summary.pop_data","text":"","code":"# S3 method for class 'pop_data' summary(object, strata = NULL, ...) # S3 method for class 'summary.pop_data' print(x, ...)"},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/summary.pop_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summarize cross-sectional antibody survey data — summary.pop_data","text":"object pop_data object (as_pop_data()) strata character() specifying grouping column(s) ... unused x object class \"summary.pop_data\"; usually, result call summary.pop_data()","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/summary.pop_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summarize cross-sectional antibody survey data — summary.pop_data","text":"summary.pop_data object, list containing two summary tables: age_summary summarizing age ab_summary summarizing value, stratified antigen_iso","code":""},{"path":"https:/ucd-serg.github.io/serocalculator/preview/pr309/reference/summary.pop_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summarize cross-sectional antibody survey data — summary.pop_data","text":"","code":"library(dplyr) xs_data <- load_pop_data(\"https://osf.io/download//n6cp3/\") summary(xs_data, strata = \"Country\") #> #> n = 3336 #> #> Distribution of age: #> #> # A tibble: 3 × 8 #> Country n min first_quartile median mean third_quartile max #>
We can extract summary statistics with summary():
summary()
summary(est1) @@ -540,7 +540,7 @@ Estimate incidence in each cluster#> Setting up parallel processing with `num_cores` = 3. #> Elapsed time for parallelized code: #> user system elapsed -#> 0.130 0.049 15.675
summary(ests) produces a tibble() with some extra meta-data:
summary(ests)
tibble()
diff --git a/preview/pr309/authors.html b/preview/pr309/authors.html index 9eed03dd..94cc0dcb 100644 --- a/preview/pr309/authors.html +++ b/preview/pr309/authors.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 @@ -76,14 +76,14 @@ Citation Teunis P, Lai K, Orwa C, Aiemjoy K, Morrison D (2024). serocalculator: Estimating Infection Rates from Serological Data. -R package version 1.2.0.9016, +R package version 1.2.0.9017, https://ucd-serg.github.io/serocalculator/, https://github.com/UCD-SERG/serocalculator. @Manual{, title = {serocalculator: Estimating Infection Rates from Serological Data}, author = {Peter Teunis and Kristina Lai and Chris Orwa and Kristen Aiemjoy and Douglas Ezra Morrison}, year = {2024}, - note = {R package version 1.2.0.9016, + note = {R package version 1.2.0.9017, https://ucd-serg.github.io/serocalculator/}, url = {https://github.com/UCD-SERG/serocalculator}, } diff --git a/preview/pr309/index.html b/preview/pr309/index.html index 92d83336..c5ac4c96 100644 --- a/preview/pr309/index.html +++ b/preview/pr309/index.html @@ -22,7 +22,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 diff --git a/preview/pr309/news/index.html b/preview/pr309/news/index.html index 466785fb..54a9284b 100644 --- a/preview/pr309/news/index.html +++ b/preview/pr309/news/index.html @@ -7,7 +7,7 @@ serocalculator - 1.2.0.9016 + 1.2.0.9017 @@ -59,8 +59,9 @@ New featuresAdded template for pull requests (from https://github.com/bcgov/ssdtools) (#265)
Teunis P, Lai K, Orwa C, Aiemjoy K, Morrison D (2024). serocalculator: Estimating Infection Rates from Serological Data. -R package version 1.2.0.9016, +R package version 1.2.0.9017, https://ucd-serg.github.io/serocalculator/, https://github.com/UCD-SERG/serocalculator.
@Manual{, title = {serocalculator: Estimating Infection Rates from Serological Data}, author = {Peter Teunis and Kristina Lai and Chris Orwa and Kristen Aiemjoy and Douglas Ezra Morrison}, year = {2024}, - note = {R package version 1.2.0.9016, + note = {R package version 1.2.0.9017, https://ucd-serg.github.io/serocalculator/}, url = {https://github.com/UCD-SERG/serocalculator}, }
Added template for pull requests (from https://github.com/bcgov/ssdtools) (#265)
initialized lintr with lintr::use_lint() (#278)
lintr
lintr::use_lint()
Added online preview builds for PRs that change the pkgdown website (#309)
pkgdown
created unit test for df_to_array() (#276)
df_to_array()
fixed dplyr::select() deprecation warning in df_to_array() (#276)
dplyr::select()
Added devtag to package (using devtag::use_devtag()) (#292)
devtag
devtag::use_devtag()