Changes in version 0.4.0 - Added posterior_cumulative_incidence(), which returns posterior draws of the cumulative incidence of death and recovery over time since onset for given covariate patterns, or the daily cause-specific or subdistribution hazards. Hazard ratios between covariate patterns follow from these and vary over time. Changes in version 0.3.0 - Added a "Real-time CFR over time" vignette. On an outbreak whose CFR rises late, it compares weekly prob from a constant and a random-walk model with the predicted fatal fraction built from posterior_prob_death(), then refits the random walk after more follow-up. - The model parameter (and its prior) is renamed from cfr to prob, since it is a case fatality ratio only when the line list runs from onset to death; the same model can fit a hospital fatality ratio or other outcome probability for a differently defined line list. Use prob ~ ... in formula and prob_prior in fit_cfr(); summary() now reports a prob (or prob[]) row. cfr ~ ... and cfr_prior are still accepted and translated to prob, with a soft-deprecation warning. - fit_cfr() gains loss_prior, a prior on the probability that a case is lost to follow-up and its outcome never recorded. A fit that allows for loss estimates it alongside the outcome probability and the delays, and summary() reports it. Without it, cases that stay unresolved far longer than the delays allow either stretch the delay's tail or stop the sampler from starting. A single Beta() gives one probability whatever the outcome; list(death = 0, recovery = Beta(1, 1)) gives each outcome its own, fixed or estimated. Estimating both is a sensitivity analysis, since the data cannot tell them apart, and fit_cfr() warns. A loss_prior needs recorded recoveries and a recovery_delay to time them. - prepare_cfr_data() gains last_contact_date, the column holding the date a case with no recorded outcome was last known unresolved. Such a case is censored there instead of at the cut-off, in retrospective fits too. - prepare_cfr_data()'s obs_time accepts a vector of per-case cut-offs, or the name of a linelist column holding them, so a case reported by a site that cut off earlier is judged against its own cut-off rather than the latest one in the data. pp_check_cfr() replays each case's own cut-off when building its follow-up horizon. - Added posterior_prob_death(), returning draws of the posterior probability of death for each case: prob updated by Bayes' rule on a censored case's follow-up, or the deterministic outcome for a resolved case. Averaging these draws over cases by onset date gives a real-time CFR for each onset period without a time trend in prob. - A delay's max is now honoured: fit_cfr() truncates the fitted delay at the bound (LogNormal(..., max = 30)), simulate_linelist() draws from the truncated delay, and pp_check_cfr() replicates from it. Previously the bound was silently ignored. The bound applies to the recorded delay: it runs from 0 to max - 1 days, the same support distspec gives the delay object. fit_cfr() also stops, with a message naming the cases, when a recorded delay or an unresolved case falls outside the bounds and would otherwise fail inside Stan. - The survival term for an unresolved case is computed on the log scale (primarycensored_lcdf() and log1m_exp()) instead of log1m(). A case followed up for much longer than the delay rounds the CDF to 1, which made log1m() reject every draw with log1m: x is 1, but must be less than or equal to 1 and left the chains stuck at their starting values. - pp_check_cfr() now draws Weibull-family replicate delays from a Weibull distribution instead of a gamma, so posterior-predictive checks for a Weibull fit compare against the right spread of delays. - prepare_cfr_data() gives a case with no onset window of its own (NA in onset_lower/onset_upper) a one-day window at its onset date, where it was previously dropped as unusable. In real time, an onset window that closes after the case's cut-off is cut back to the cut-off. - prepare_cfr_data() stops when a requested covariate or an obs_time column is missing from the line list, and fit_cfr() warns when a recovery_delay has no recorded recoveries to time. Changes in version 0.2.1 - fit_cfr() warns and pp_check_cfr() no longer errors when a formula covariate has missing values: brms drops those cases before fitting, and the stored onset dates are now kept in step with the rows it actually used. - distspec is now on CRAN, so it is dropped from Remotes and installed from CRAN like the other dependencies. Changes in version 0.2.0 - fit_cfr() and simulate_linelist() support a Weibull() onset-to-death (and recovery) delay, alongside LogNormal() and Gamma(). - Delay parameterisation now uses distspec's exported natural_params() in place of an internal helper, tracking the distspec API. - Added a "Stratified and partially-pooled CFR" vignette covering no-, complete- and partial-pooling CFR fits and per-group summary() output. - pp_check_cfr() runs a posterior-predictive check on a fit: it draws replicate line-list outcomes from the posterior, replays the real-time truncation, and compares the observed death counts (plus recoveries in a two-outcome fit) and the observed onset-to-death delays against the replicates (#14). - summary() gains an ascertainment_ratio argument that corrects the CFR for outcome-dependent case ascertainment (fatal and non-fatal cases entering the line list at different rates). The ratio is supplied, defaulting to 1. - fit_cfr() accepts intercept-free CFR formulas (e.g. cfr ~ 0 + group, one estimated logit-CFR per group): the cfr_prior is placed on those coefficients rather than a non-existent intercept, so the fit no longer fails brms prior validation. - summary() reports a CFR per group for a cfr ~ group fit (one cfr[] row per group), rather than erroring or silently reporting only the reference level. Changes in version 0.1.0 First release. - fit_cfr() estimates a real-time case fatality ratio from line-list data with a Bayesian mixture-cure survival model. It is registered as an epidist model type, so the CFR and the onset-to-death delay both take brms formulas. - prepare_cfr_data() turns a line list into model inputs. It sorts each case, at a chosen observation cut-off, into an observed death, a resolved non-death, or a right-censored survivor. - The onset-to-death delay (LogNormal or Gamma) can be co-estimated or held fixed. Hold it fixed and you get the Ghani/Nishiura estimator. - Pass a recovery_date column and a two-outcome fit also times recoveries. - Put a brms formula on the CFR or the delay for covariates or a time-varying CFR. - simulate_linelist() builds line lists for testing and examples. - summary() and print() report the corrected CFR, the delay moments, convergence diagnostics, and a flag for when the CFR is only weakly identified.