@@ -1643,3 +1643,114 @@ test_that("pmcmc restarting covariance/scaling", {
16431643
16441644
16451645})
1646+
1647+
1648+
1649+ # ------------------------------------------------
1650+ test_that(" sero fitting works" , {
1651+
1652+ set.seed(12 )
1653+
1654+ Sys.setenv(" SQUIRE_PARALLEL_DEBUG" = " TRUE" )
1655+ data <- read.csv(squire_file(" extdata/example.csv" ),stringsAsFactors = FALSE )
1656+ interventions <- read.csv(squire_file(" extdata/example_intervention.csv" ))
1657+ int_unique <- interventions_unique(interventions )
1658+ reporting_fraction = 1
1659+ country = " Algeria"
1660+ pars_init = list (' start_date' = as.Date(" 2020-02-07" ),
1661+ ' R0' = 3 ,
1662+ ' Meff' = 2 ,
1663+ " rf" = 0.25 ) # correct rf for the data
1664+ pars_min = list (' start_date' = as.Date(" 2020-02-01" ),
1665+ ' R0' = 1e-10 ,
1666+ ' Meff' = 0.1 ,
1667+ " rf" = 0.1 )
1668+ pars_max = list (' start_date' = as.Date(" 2020-02-20" ),
1669+ ' R0' = 5 ,
1670+ ' Meff' = 5 ,
1671+ " rf" = 1 )
1672+ pars_discrete = list (' start_date' = TRUE ,
1673+ ' R0' = FALSE ,
1674+ ' Meff' = FALSE ,
1675+ ' rf' = FALSE )
1676+ pars_obs = list (phi_cases = 0.1 ,
1677+ k_cases = 2 ,
1678+ phi_death = 1 ,
1679+ k_death = 2 ,
1680+ exp_noise = 1e6 )
1681+
1682+ steps_per_day = 1
1683+ R0_change = int_unique $ change
1684+ date_R0_change = as.Date(int_unique $ dates_change )
1685+ date_contact_matrix_set_change = NULL
1686+ squire_model = squire ::: deterministic_model()
1687+ n_particles = 2
1688+ # proposal kernel covriance
1689+ proposal_kernel <- matrix (0.5 , ncol = length(pars_init ), nrow = length(pars_init ))
1690+ diag(proposal_kernel ) <- 1
1691+ rownames(proposal_kernel ) <- colnames(proposal_kernel ) <- names(pars_init )
1692+
1693+ sero_df <- data.frame (" samples" = 1000 , " sero_pos" = 10 ,
1694+ " date_start" = as.Date(" 2020-04-15" ),
1695+ " date_end" = as.Date(" 2020-04-19" ))
1696+ # seroconversion data from brazeay report 34
1697+ prob_conversion <- cumsum(dgamma(0 : 300 ,shape = 5 , rate = 1 / 2 ))/ max(cumsum(dgamma(0 : 300 ,shape = 5 , rate = 1 / 2 )))
1698+ sero_det <- cumsum(dweibull(0 : 300 , 3.669807 , scale = 143.7046 ))
1699+ sero_det <- prob_conversion - sero_det
1700+ sero_det [sero_det < 0 ] <- 0
1701+ sero_det <- sero_det / max(sero_det )
1702+
1703+ pars_obs $ sero_df <- sero_df
1704+ pars_obs $ sero_det <- sero_det
1705+
1706+ Sys.setenv(" SQUIRE_PARALLEL_DEBUG" = TRUE )
1707+ out <- pmcmc(data = data ,
1708+ n_mcmc = 5 ,
1709+ log_likelihood = NULL ,
1710+ log_prior = NULL ,
1711+ n_particles = 2 ,
1712+ steps_per_day = steps_per_day ,
1713+ output_proposals = FALSE ,
1714+ n_chains = 1 ,
1715+ replicates = 20 ,
1716+ burnin = 5 ,
1717+ squire_model = squire_model ,
1718+ pars_init = pars_init ,
1719+ pars_min = pars_min ,
1720+ pars_max = pars_max ,
1721+ pars_discrete = pars_discrete ,
1722+ pars_obs = pars_obs ,
1723+ proposal_kernel = proposal_kernel ,
1724+ R0_change = R0_change ,
1725+ date_R0_change = date_R0_change ,
1726+ country = country )
1727+
1728+ pars_init $ rf <- 1
1729+
1730+ out2 <- pmcmc(data = data ,
1731+ n_mcmc = 5 ,
1732+ log_likelihood = NULL ,
1733+ log_prior = NULL ,
1734+ n_particles = 2 ,
1735+ steps_per_day = steps_per_day ,
1736+ output_proposals = FALSE ,
1737+ n_chains = 1 ,
1738+ replicates = 20 ,
1739+ burnin = 5 ,
1740+ squire_model = squire_model ,
1741+ pars_init = pars_init ,
1742+ pars_min = pars_min ,
1743+ pars_max = pars_max ,
1744+ pars_discrete = pars_discrete ,
1745+ pars_obs = pars_obs ,
1746+ proposal_kernel = proposal_kernel ,
1747+ R0_change = R0_change ,
1748+ date_R0_change = date_R0_change ,
1749+ country = country )
1750+
1751+ expect_gt(sum(out $ pmcmc_results $ results $ log_likelihood ),
1752+ sum(out2 $ pmcmc_results $ results $ log_likelihood ))
1753+
1754+ expect_s3_class(plot(out , what = " deaths" , particle_fit = TRUE ), " gg" )
1755+
1756+ })
0 commit comments