epiparameter icon indicating copy to clipboard operation
epiparameter copied to clipboard

what input can I provide to `dispersion` in `convert_summary_stats_to_params()`

Open avallecam opened this issue 1 year ago • 0 comments

Trying to solve this problem, is there a way I can prioritize convert_summary_stats_to_params() over extract_param()?

library(epiparameter)
library(tidyverse)

# How to get the mean and sd values 
# for this influenza distribution?

influenza_generation <- 
  epidist_db(disease = "influenza",
             epi_dist = "generation")
#> Returning 1 results that match the criteria (1 are parameterised). 
#> Use subset to filter by entry variables or single_epidist to return a single entry. 
#> To retrieve the short citation for each use the 'get_citation' function

influenza_generation_discrete <- 
  discretise(influenza_generation)

# problem
# the summary statistics do not have mean and sd
influenza_generation$summary_stats
#> $quantiles
#>   5  95 
#> 0.9 5.1 
#> 
#> $median
#> [1] 2.7
#> 
#> $median_ci_limits
#> [1] 2.0 3.5
#> 
#> $median_ci
#> [1] 95
influenza_generation$summary_stats$median
#> [1] 2.7
influenza_generation$summary_stats$quantiles
#>   5  95 
#> 0.9 5.1

# solution
# extract parameters from percentiles
influenza_extracted <- extract_param(
  type = "percentiles",
  values = c(influenza_generation$summary_stats$quantiles[1],
             influenza_generation$summary_stats$quantiles[2]),
  distribution = "lnorm",
  percentiles = c(0.05,0.95)
)
#> Stochastic numerical optimisation used. 
#> Rerun function multiple times to check global optimum is found

influenza_extracted
#>   meanlog     sdlog 
#> 0.7619400 0.5272806

# question: 
# what input is expected for dispersion?

# I tried quantiles, but is not in the set
convert_summary_stats_to_params(
  distribution = "lnorm",
  median = influenza_generation$summary_stats$median,
  quantiles = influenza_generation$summary_stats$quantiles
)
#> Error in chk_ss(x): Assertion on 'names(x)' failed: Must be a subset of {'mean','median','mode','var','sd','cv','skewness','ex_kurtosis','dispersion'}, but has additional elements {'quantiles'}.

# I tried interquartile range, but failed
convert_summary_stats_to_params(
  distribution = "lnorm",
  median = influenza_generation$summary_stats$median,
  dispersion = influenza_generation$summary_stats$quantiles
)
#> Error in (function (...) : Cannot calculate lognormal parameters from given input

Created on 2024-02-01 with reprex v2.0.2

avallecam avatar Feb 01 '24 21:02 avallecam