Proposed model
Two-component mixture model for test result Z with Zj(j = {I, S}) being the latent mixing component having density fj(zj|θj) and with πTRUE(a) being the age-dependent mixing probability can be represented as
f(z|zI, zS, a) = (1 − πTRUE(a))fS(zS|θS) + πTRUE(a)fI(zI|θI)
The mean E(Z|a) thus equals
μ(a) = (1 − πTRUE(a))μS + πTRUE(a)μI
From which the true prevalence can be calculated by
$$ \pi_{\text{TRUE}}(a) = \frac{\mu(a) - \mu_S}{\mu_I - \mu_S} $$
Force of infection can then be calculated by
$$ \lambda_{TRUE} = \frac{\mu'(a)}{\mu_I - \mu(a)} $$
Fitting data
To fit the mixture data, use mixture_model
function
df <- vzv_be_2001_2003[vzv_be_2001_2003$age < 40.5,]
df <- df[order(df$age),]
data <- df$VZVmIUml
model <- mixture_model(antibody_level = data)
#> Warning in mix(data, starting_values, dist = "norm"): The optimization process
#> terminated because either the estimates are approximate local optimal solution
#> or steptol is too small
model$info
#>
#> Parameters:
#> pi mu sigma
#> 1 0.1088 2.349 0.6804
#> 2 0.8912 6.439 0.9437
#>
#> Distribution:
#> [1] "norm"
#>
#> Constraints:
#> conpi conmu consigma
#> "NONE" "NONE" "NONE"
sero-prevalence and FOI can then be esimated using function
estimate_from_mixture