Title: | Bayesian Estimation and Forecasting of Age-Specific Rates |
---|---|
Description: | Fast Bayesian estimation and forecasting of age-specific rates, probabilities, and means, based on 'Template Model Builder'. |
Authors: | John Bryant [aut, cre], Junni Zhang [aut], Bayesian Demography Limited [cph] |
Maintainer: | John Bryant <[email protected]> |
License: | MIT + file LICENSE |
Version: | 0.9.0 |
Built: | 2025-03-08 05:35:39 UTC |
Source: | https://github.com/bayesiandemography/bage |
Use an autoregressive process to model a main effect, or use multiple autoregressive processes to model an interaction. Typically used with time effects or with interactions that involve time.
AR( n_coef = 2, s = 1, shape1 = 5, shape2 = 5, along = NULL, con = c("none", "by") )
AR( n_coef = 2, s = 1, shape1 = 5, shape2 = 5, along = NULL, con = c("none", "by") )
n_coef |
Number of lagged terms in the
model, ie the order of the model. Default is |
s |
Scale for the prior for the innovations.
Default is |
shape1 , shape2
|
Parameters for beta-distribution prior
for coefficients. Defaults are |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If AR()
is used with an interaction, then
separate AR processes are constructed along
the 'along' variable, within each combination of the
'by' variables.
By default, the autoregressive processes
have order 2. Alternative choices can be
specified through the n_coef
argument.
Argument s
controls the size of innovations.
Smaller values for s
tend to give smoother estimates.
An object of class "bage_prior_ar"
.
When AR()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Internally, AR()
derives a value for that
gives every element of
a marginal
variance of
. Parameter
has a half-normal prior
The correlation coefficients
each have prior
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
AR()
is based on the TMB function
ARk
AR1()
Special case of AR()
. Can be more
numerically stable than higher-order models.
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
AR(n_coef = 3) AR(n_coef = 3, s = 2.4) AR(along = "cohort")
AR(n_coef = 3) AR(n_coef = 3, s = 2.4) AR(along = "cohort")
Use an autoregressive process of order 1 to model a main effect, or use multiple AR1 processes to model an interaction. Typically used with time effects or with interactions that involve time.
AR1( s = 1, shape1 = 5, shape2 = 5, min = 0.8, max = 0.98, along = NULL, con = c("none", "by") )
AR1( s = 1, shape1 = 5, shape2 = 5, min = 0.8, max = 0.98, along = NULL, con = c("none", "by") )
s |
Scale for the prior for the innovations.
Default is |
shape1 , shape2
|
Parameters for beta-distribution prior
for coefficients. Defaults are |
min , max
|
Minimum and maximum values
for autocorrelation coefficient.
Defaults are |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If AR()
is used with an interaction,
separate AR processes are constructed along
the 'along' variable, within each combination of the
'by' variables.
Arguments min
and max
can be used to specify
the permissible range for autocorrelation.
Argument s
controls the size of innovations. Smaller values
for s
tend to give smoother estimates.
An object of class "bage_prior_ar"
.
When AR1()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Internally, AR1()
derives a value for that
gives every element of
a marginal
variance of
. Parameter
has a half-normal prior
where s
is provided by the user.
Coefficient is constrained
to lie between
min
and max
.
Its prior distribution is
where
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
AR1()
is based on the TMB function
AR1
The defaults for min
and max
are based on the
defaults for forecast::ets()
.
AR()
Generalization of AR1()
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
AR1() AR1(min = 0, max = 1, s = 2.4) AR1(along = "cohort")
AR1() AR1(min = 0, max = 1, s = 2.4) AR1(along = "cohort")
Extract data and rates, probabilities, or means from a model object. The return value consists of the original data and one or more columns of modelled values.
## S3 method for class 'bage_mod' augment(x, quiet = FALSE, ...)
## S3 method for class 'bage_mod' augment(x, quiet = FALSE, ...)
x |
Object of class |
quiet |
Whether to suppress messages.
Default is |
... |
Unused. Included for generic consistency only. |
A tibble, with the original data plus one or more of the following columns:
.<outcome>
Corrected or extended version of
the outcome variable, in applications where the
outcome variable has missing values, or a data model
is being used.
.observed
'Direct' estimates of rates or
probabilities, ie counts divided by exposure or size
(in Poisson and binomial models.)
.fitted
Draws of rates, probabilities,
or means.
.expected
Draws of expected values for
rates or probabilities (in Poisson
that include exposure, or in binomial models.)
Uncertain quantities are represented using rvecs.
augment()
is typically called on a fitted
model. In this case, the modelled values are
draws from the joint posterior distribution for rates,
probabilities, or means.
augment()
can, however, be called on an
unfitted model. In this case, the modelled values
are draws from the joint prior distribution.
In other words, the modelled values are informed by
model priors, and by values for exposure
, size
, or weights
,
but not by observed outcomes.
augment()
automatically imputes any missing
values for the outcome variable. If outcome variable
var
has one or more NA
s, then augment
creates a variable .var
holding original and imputed values.
If the overall model includes a data model
for the outcome variable var
,
then augment()
creates a new variable .var
containing
estimates of the true value for the outcome.
components()
Extract values for hyper-parameters from a model
tidy()
Short summary of a model
mod_pois()
Specify a Poisson model
mod_binom()
Specify a binomial model
mod_norm()
Specify a normal model
fit()
Fit a model
is_fitted()
See if a model has been fitted
unfit()
Reset a model
datamods Overview of data models implemented in bage
## specify model mod <- mod_pois(divorces ~ age + sex + time, data = nzl_divorces, exposure = population) |> set_n_draw(n_draw = 100) ## smaller sample, so 'augment' faster ## draw from the prior distribution mod |> augment() ## fit model mod <- mod |> fit() ## draw from the posterior distribution mod |> augment() ## insert a missing value into outcome variable divorces_missing <- nzl_divorces divorces_missing$divorces[1] <- NA ## fitting model and calling 'augument' ## creates a new variable called '.divorces' ## holding observed and imputed values mod_pois(divorces ~ age + sex + time, data = divorces_missing, exposure = population) |> fit() |> augment() ## specifying a data model for the ## original data also leads to a new ## variable called '.divorces' mod_pois(divorces ~ age + sex + time, data = nzl_divorces, exposure = population) |> set_datamod_outcome_rr3() |> fit() |> augment()
## specify model mod <- mod_pois(divorces ~ age + sex + time, data = nzl_divorces, exposure = population) |> set_n_draw(n_draw = 100) ## smaller sample, so 'augment' faster ## draw from the prior distribution mod |> augment() ## fit model mod <- mod |> fit() ## draw from the posterior distribution mod |> augment() ## insert a missing value into outcome variable divorces_missing <- nzl_divorces divorces_missing$divorces[1] <- NA ## fitting model and calling 'augument' ## creates a new variable called '.divorces' ## holding observed and imputed values mod_pois(divorces ~ age + sex + time, data = divorces_missing, exposure = population) |> fit() |> augment() ## specifying a data model for the ## original data also leads to a new ## variable called '.divorces' mod_pois(divorces ~ age + sex + time, data = nzl_divorces, exposure = population) |> set_datamod_outcome_rr3() |> fit() |> augment()
Extract values for hyper-parameters from a model object. Hyper-parameters include main effects and interactions, dispersion and variance terms, and SVD or spline coefficients.
## S3 method for class 'bage_mod' components(object, quiet = FALSE, ...)
## S3 method for class 'bage_mod' components(object, quiet = FALSE, ...)
object |
Object of class |
quiet |
Whether to suppress messages.
Default is |
... |
Unused. Included for generic consistency only. |
A tibble with four columns columns:
The return value contains the following columns:
term
Model term that the hyper-parameter belongs to.
component
Component within term.
level
Element within component .
.fitted
An rvec containing
draws from the posterior distribution.
components()
is typically called on a fitted
model. In this case, the modelled values are
draws from the joint posterior distribution for the
hyper-parameters in the model.
components()
can, however, be called on an
unfitted model. In this case, the modelled values
are draws from the joint prior distribution.
In other words, the modelled values are informed by
model priors, and by any exposure
, size
, or weights
argument in the model, but not by the observed outcomes.
augment()
Extract data and values for rates,
means, or probabilities
tidy()
Extract a one-line summary of a model
mod_pois()
Specify a Poisson model
mod_binom()
Specify a binomial model
mod_norm()
Specify a normal model
fit()
Fit a model
is_fitted()
See if a model has been fitted
unfit()
Reset a model
## specify model mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) ## extract prior distribution ## of hyper-parameters mod |> components() ## fit model mod <- mod |> fit() ## extract posterior distribution ## of hyper-parameters mod |> components()
## specify model mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) ## extract prior distribution ## of hyper-parameters mod |> components() ## fit model mod <- mod |> fit() ## extract posterior distribution ## of hyper-parameters mod |> components()
Extract the matrix and offset used by a scaled SVD summary of a demographic database.
## S3 method for class 'bage_ssvd' components(object, n_comp = NULL, indep = NULL, age_labels = NULL, ...)
## S3 method for class 'bage_ssvd' components(object, n_comp = NULL, indep = NULL, age_labels = NULL, ...)
object |
An object of class |
n_comp |
The number of components.
The default is half the total number of
components of |
indep |
Whether to use independent or
joint SVDs for each sex/gender. If
no value is supplied, an SVD with no
sex/gender dimension is used. Note that the
default is different from |
age_labels |
Age labels for the desired age or age-sex profile. If no labels are supplied, the most detailed profile available is used. |
... |
Not currently used. |
A tibble with the offset and components.
HMD
Mortality rates from the
Human Mortality Database.
HFD
Fertility rates from the
Human Fertility Database.
generate() Randomly generate age-profiles, or age-sex profiles, based on a scaled SVD summary.
SVD()
SVD prior for terms involving age.
SVD_AR1()
, SVD_AR()
, SVD_RW()
, SVD_RW2()
Dynamic SVD priors for terms involving age and time.
poputils::age_labels()
Generate age labels.
## females and males combined components(LFP, n_comp = 3) ## females and males modelled independently components(LFP, indep = TRUE, n_comp = 3) ## joint model for females and males components(LFP, indep = FALSE, n_comp = 3) ## specify age groups labels <- poputils::age_labels(type = "five", min = 15, max = 60) components(LFP, age_labels = labels)
## females and males combined components(LFP, n_comp = 3) ## females and males modelled independently components(LFP, indep = TRUE, n_comp = 3) ## joint model for females and males components(LFP, indep = FALSE, n_comp = 3) ## specify age groups labels <- poputils::age_labels(type = "five", min = 15, max = 60) components(LFP, age_labels = labels)
Get information on computations performed by function fit()
.
The information includes the total time used for fitting, and
the time used for two particular tasks that can be slow:
running the optimizer stats::nlminb()
,
and drawing from the multivariate normal returned
by the TMB. It also includes values returned by the optimizer:
the number of iterations needed, and messages about convergence.
computations(object)
computations(object)
object |
A fitted object of class |
A tibble with the following variables:
time_total
Seconds used for whole fitting process.
time_optim
Seconds used for optimisiation.
time_report
Seconds used by function TMB::sdreport()
.
iter
Number of iterations required for optimization.
message
Message about convergence returned by optimizer.
mod_pois()
,mod_binom()
,mod_norm()
Specify a model
fit()
Fit a model
tidy()
Summarise a model
set_n_draw()
Specify number of posterior draws
mod <- mod_pois(divorces ~ age + sex + time, data = nzl_divorces, exposure = population) |> fit() computations(mod)
mod <- mod_pois(divorces ~ age + sex + time, data = nzl_divorces, exposure = population) |> fit() computations(mod)
The models for rates, probabilities, or means
created with functions mod_pois()
, mod_binom()
,
and mod_norm()
can be extended by adding data models,
also referred to as measurement error models.
Data models can be applied to the outcome variable,
the exposure variable (in Poisson models), or the
size variable (in binomial models).
Data models for outcome variable
Function | Assumptions about data | pois | binom | norm |
set_datamod_outcome_rr3() |
Outcome randomly rounded to base 3 | Yes | Yes | No |
Data models for exposure or size variable
None implemented yet
Calculate the posterior distribution for a model.
## S3 method for class 'bage_mod' fit( object, method = c("standard", "inner-outer"), vars_inner = NULL, optimizer = c("multi", "nlminb", "BFGS", "CG"), quiet = TRUE, start_oldpar = FALSE, ... )
## S3 method for class 'bage_mod' fit( object, method = c("standard", "inner-outer"), vars_inner = NULL, optimizer = c("multi", "nlminb", "BFGS", "CG"), quiet = TRUE, start_oldpar = FALSE, ... )
object |
A |
method |
Estimation method. Current
choices are |
vars_inner |
Names of variables to use
for inner model when |
optimizer |
Which optimizer to use.
Current choices are |
quiet |
Whether to suppress warnings and
progress messages from the optimizer.
Default is |
start_oldpar |
Whether the optimizer should start
at previous estimates. Used only
when |
... |
Not currently used. |
A bage_mod
object
"standard"
All parameters, other than
the lowest-level rates, probabilities, or
means are jointly estimated within TMB.
The default.
"inner-outer"
. Multiple-stage estimation,
which can be faster than "standard"
for
models with many parameters. In Step 1, the
data is aggregated across all dimensions other
than those specified in var_inner
, and a model
for the inner
variables is fitted to the data.
In Step 2, the data is aggregated across the
remaining variables, and a model for the
outer
variables is fitted to the data.
In Step 3, values for dispersion are calculated.
Parameter estimtes from steps 1, 2, and 3
are then combined. "inner-outer"
methods are
still experimental, and may change in future,
eg dividing calculations into chunks in Step 2.
The choices for the optimizer
argument are:
"multi"
Try "nlminb"
, and if that fails,
retart from the value where "nlminb"
stopped,
using "BFGS"
. The default.
"nlminb"
stats::nlminb()
"BFGS"
stats::optim()
using method "BFGS"
.
"GC"
stats::optim()
using method "CG"
(conjugate gradient).
mod_pois()
, mod_binom()
, mod_norm()
Specify a model
augment()
, components()
, tidy()
Examine
output from a model
forecast()
Forecast, based on a model
report_sim()
Simulation study of a model
unfit()
Reset a model
is_fitted()
Check if a model has been fitted
## specify model mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) ## examine unfitted model mod ## fit model mod <- fit(mod) ## examine fitted model mod ## extract rates aug <- augment(mod) aug ## extract hyper-parameters comp <- components(mod) comp
## specify model mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) ## examine unfitted model mod ## fit model mod <- fit(mod) ## examine fitted model mod ## extract rates aug <- augment(mod) aug ## extract hyper-parameters comp <- components(mod) comp
Forecast rates, probabilities, means, and other model parameters.
## S3 method for class 'bage_mod' forecast( object, newdata = NULL, output = c("augment", "components"), include_estimates = FALSE, labels = NULL, ... )
## S3 method for class 'bage_mod' forecast( object, newdata = NULL, output = c("augment", "components"), include_estimates = FALSE, labels = NULL, ... )
object |
A |
newdata |
Data frame with data for future periods. |
output |
Type of output returned |
include_estimates |
Whether to
include historical estimates along
with the forecasts. Default is |
labels |
Labels for future values. |
... |
Not currently used. |
A tibble.
Internally, the steps involved in a forecast are:
Forecast time-varying main effects and interactions, e.g. a time main effect, or an age-time interaction.
Combine forecasts for the time-varying main effects and interactions with non-time-varying parameters, e.g. age effects or dispersion.
Use the combined parameters to generate values for rates, probabilities or means.
If a newdata
argument has been provided,
and output
is "augment"
,
draw values for outcome.
vignette("vig2_math")
has the technical details.
When output
is "augment"
(the default),
the return value from forecast()
looks like output from function augment()
. When output
is
"components"
, the return value looks like output
from components()
.
When include_estimates
is FALSE
(the default),
the output of forecast()
excludes values for
time-varying parameters for the period covered by the data.
When include_estimates
is TRUE
, the output
includes these values.
Setting include_estimates
to TRUE
can be helpful
when creating graphs that combine estimates and forecasts.
forecast()
is typically used with a
fitted model, i.e. a model in which parameter
values have been estimated from the data.
The resulting forecasts reflect data and priors.
forecast()
can, however, be used with an
unfitted model. In this case, the forecasts
are based entirely on the priors. See below for
an example. Experimenting with forecasts
based entirely on the priors can be helpful for
choosing an appropriate model.
The interface for forecast()
has not been finalised.
mod_pois()
, mod_binom()
, mod_norm()
to specify a model
fit()
to fit a model
## specify and fit model mod <- mod_pois(injuries ~ age * sex + ethnicity + year, data = nzl_injuries, exposure = popn) |> fit() mod ## forecasts mod |> forecast(labels = 2019:2024) ## combined estimates and forecasts mod |> forecast(labels = 2019:2024, include_estimates = TRUE) ## hyper-parameters mod |> forecast(labels = 2019:2024, output = "components") ## hold back some data and forecast library(dplyr, warn.conflicts = FALSE) data_historical <- nzl_injuries |> filter(year <= 2015) data_forecast <- nzl_injuries |> filter(year > 2015) |> mutate(injuries = NA) mod_pois(injuries ~ age * sex + ethnicity + year, data = data_historical, exposure = popn) |> fit() |> forecast(newdata = data_forecast) ## forecast based on priors only mod_unfitted <- mod_pois(injuries ~ age * sex + ethnicity + year, data = nzl_injuries, exposure = popn) mod_unfitted |> forecast(labels = 2019:2024)
## specify and fit model mod <- mod_pois(injuries ~ age * sex + ethnicity + year, data = nzl_injuries, exposure = popn) |> fit() mod ## forecasts mod |> forecast(labels = 2019:2024) ## combined estimates and forecasts mod |> forecast(labels = 2019:2024, include_estimates = TRUE) ## hyper-parameters mod |> forecast(labels = 2019:2024, output = "components") ## hold back some data and forecast library(dplyr, warn.conflicts = FALSE) data_historical <- nzl_injuries |> filter(year <= 2015) data_forecast <- nzl_injuries |> filter(year > 2015) |> mutate(injuries = NA) mod_pois(injuries ~ age * sex + ethnicity + year, data = data_historical, exposure = popn) |> fit() |> forecast(newdata = data_forecast) ## forecast based on priors only mod_unfitted <- mod_pois(injuries ~ age * sex + ethnicity + year, data = nzl_injuries, exposure = popn) mod_unfitted |> forecast(labels = 2019:2024)
Generate draws from priors for model terms.
## S3 method for class 'bage_prior_ar' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_known' generate(x, n_element = 20, n_draw = 25, ...) ## S3 method for class 'bage_prior_lin' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_linar' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_linex' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_norm' generate(x, n_element = 20, n_draw = 25, ...) ## S3 method for class 'bage_prior_normfixed' generate(x, n_element = 20, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwrandom' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwrandomseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwrandomseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwzero' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwzeroseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwzeroseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2random' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2randomseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2randomseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2zero' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2zeroseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2zeroseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_spline' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd' generate(x, n_element = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_ar' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rwrandom' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rwzero' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rw2random' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rw2zero' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...)
## S3 method for class 'bage_prior_ar' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_known' generate(x, n_element = 20, n_draw = 25, ...) ## S3 method for class 'bage_prior_lin' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_linar' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_linex' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_norm' generate(x, n_element = 20, n_draw = 25, ...) ## S3 method for class 'bage_prior_normfixed' generate(x, n_element = 20, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwrandom' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwrandomseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwrandomseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwzero' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwzeroseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rwzeroseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2random' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2randomseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2randomseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2zero' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2zeroseasfix' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_rw2zeroseasvary' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_spline' generate(x, n_along = 20, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd' generate(x, n_element = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_ar' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rwrandom' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rwzero' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rw2random' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...) ## S3 method for class 'bage_prior_svd_rw2zero' generate(x, n_along = 5, n_by = 1, n_draw = 25, ...)
x |
Object of class |
n_along |
Number of elements of
'along' dimension. Default is |
n_by |
Number of combinations of
'by' variables. Default is |
n_draw |
Number of draws. Default
is |
... |
Unused. Included for generic consistency only. |
n_element |
Number of elements in term,
in priors that do not distinguish
'along' and 'by' dimensions.
Default is |
Some priors distinguish between 'along' and 'by'
dimensions, while others do not: see priors
for a complete list. Arguments n_along
and n_by
are used with priors that make the distinction,
and argument n_element
is used with priors that do not.
A tibble
priors Overview of priors implemented in bage
## prior that distinguishes 'along' and 'by' x <- RW() generate(x, n_along = 10, n_by = 2) ## prior that does not distinguish x <- N() generate(x, n_element = 20) ## SVD_AR(), SVD_RW(), and SVD_RW2() ## distinguish 'along' and 'by' x <- SVD_AR(HFD) generate(x, n_along = 5, n_by = 2) ## SVD() does not x <- SVD(HFD) generate(x, n_element = 10)
## prior that distinguishes 'along' and 'by' x <- RW() generate(x, n_along = 10, n_by = 2) ## prior that does not distinguish x <- N() generate(x, n_element = 20) ## SVD_AR(), SVD_RW(), and SVD_RW2() ## distinguish 'along' and 'by' x <- SVD_AR(HFD) generate(x, n_along = 5, n_by = 2) ## SVD() does not x <- SVD(HFD) generate(x, n_element = 10)
Generate random age or age-sex profiles from
an object of class "bage_ssvd"
. An object
of class "bage_ssvd"
holds results from
an SVD decomposition of demographic
data.
## S3 method for class 'bage_ssvd' generate(x, n_draw = 20, n_comp = NULL, indep = NULL, age_labels = NULL, ...)
## S3 method for class 'bage_ssvd' generate(x, n_draw = 20, n_comp = NULL, indep = NULL, age_labels = NULL, ...)
x |
An object of class |
n_draw |
Number of random draws to generate. |
n_comp |
The number of components.
The default is half the total number of
components of |
indep |
Whether to use independent or
joint SVDs for each sex/gender. If
no value is supplied, an SVD with no
sex/gender dimension is used. Note that the
default is different from |
age_labels |
Age labels for the desired age or age-sex profile. If no labels are supplied, the most detailed profile available is used. |
... |
Unused. Included for generic consistency only. |
A tibble
HMD
Mortality rates from the
Human Mortality Database.
HFD
Fertility rates from the
Human Fertility Database.
components() Components used by SVD prior.
SVD()
SVD prior for term involving age.
SVD_AR1()
, SVD_AR()
, SVD_RW()
, SVD_RW2()
Dynamic SVD priors for terms involving age and time.
poputils::age_labels()
Generate age labels.
## SVD for females and males combined generate(HMD) ## separate SVDs for females and males generate(HMD, indep = TRUE) ## specify age groups labels <- poputils::age_labels(type = "lt", max = 60) generate(HMD, age_labels = labels)
## SVD for females and males combined generate(HMD) ## separate SVDs for females and males generate(HMD, indep = TRUE) ## specify age groups labels <- poputils::age_labels(type = "lt", max = 60) generate(HMD, age_labels = labels)
An object of class "bage_ssvd"
holding components extracted from mortality
data from the
Human Fertility Database.
The object holds 5 components.
HFD
HFD
Object of class "bage_ssvd"
.
Derived from data from the
Human Fertility Database.Max Planck Institute
for Demographic Research (Germany) and Vienna
Institute of Demography (Austria). .
Code to create HFD
is in folder 'data-raw/ssvd_hfd'
in the source code for bage
package.
An object of class "bage_ssvd"
holding components extracted from mortality
data from the
Human Mortality Database.
The object holds 5 components.
HMD
HMD
Object of class "bage_ssvd"
.
Derived from data from the
Human Mortality Database. Max Planck Institute for
Demographic Research (Germany), University of California,
Berkeley (USA), and French Institute for Demographic Studies
(France). Code to create HMD
is in folder 'data-raw/ssvd_hmd'
in the source code for bage
package.
Test whether fit() has been called on a model object.
is_fitted(x)
is_fitted(x)
x |
An object of class |
TRUE
or FALSE
mod_pois()
, mod_binom()
, mod_norm()
to specify a model
fit()
to fit a model
mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) is_fitted(mod) mod <- fit(mod) is_fitted(mod)
mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) is_fitted(mod) mod <- fit(mod) is_fitted(mod)
Deaths and mid-year populations in Iceland, by age, sex, and calendar year.
isl_deaths
isl_deaths
A tibble with 5,300 rows and the following columns:
age
Single year of age, up to "105+"
sex
"Female"
and "Male"
time
Calendar year, 1998-2022
deaths
Counts of deaths
popn
Mid-year population
Tables "Deaths by municipalities, sex and age 1981-2022", and "Average annual population by municipality, age and sex 1998-2022 - Current municipalities", on the Statistics Iceland website. Data downloaded on 12 July 2023.
Treat an intercept, a main effect, or an interaction as fixed and known.
Known(values)
Known(values)
values |
A numeric vector |
An object of class "bage_prior_known"
.
NFix()
Prior where level unknown, but variability known.
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
Known(-2.3) Known(c(0.1, 2, -0.11))
Known(-2.3) Known(c(0.1, 2, -0.11))
Births by age of mother, region, and calendar year, 2011-2023.
kor_births
kor_births
A tibble with 1,872 rows and the following columns:
age
Five-year age groups from "10-14" to
"50-54"'
region
Administrative region
time
Calendar year, 2011-2023
births
Counts of births
popn
Mid-year population
Tables "Live Births by Age Group of Mother, Sex and Birth Order for Provinces", and "Resident Population in Five-Year Age Groups", on the Korean Statistical Information Service website. Data downloaded on 24 September 2024.
An object of class "bage_ssvd"
holding components extracted from labor force participation
data from the
OECD Data Explorer.
LFP
LFP
Object of class "bage_ssvd"
.
Derived from data in the "Labor Force Indicators"
table of the OECD Data Explorer.
Code to create LFS
is in folder 'data-raw/ssvd_lfp' in
the source code for the bage
package.
Use a line or lines with independent normal errors to model a main effect or interaction. Typically used with time.
Lin(s = 1, mean_slope = 0, sd_slope = 1, along = NULL, con = c("none", "by"))
Lin(s = 1, mean_slope = 0, sd_slope = 1, along = NULL, con = c("none", "by"))
s |
Scale for the prior for the errors.
Default is |
mean_slope |
Mean in prior for slope of line. Default is 0. |
sd_slope |
Standard deviation in prior for slope of line. Default is 1. |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If Lin()
is used with an interaction,
then separate lines are constructed along
the 'along' variable, within each combination
of the 'by' variables.
Argument s
controls the size of the errors.
Smaller values tend to give smoother estimates.
s
can be zero.
Argument sd_slope
controls the size of the slopes of
the lines. Larger values can give more steeply
sloped lines.
An object of class "bage_prior_lin"
.
When Lin()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
The slopes have priors
and
Parameter has a half-normal prior
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
Lin_AR()
Linear with AR errors
Lin_AR1()
Linear with AR1 errors
RW2()
Second-order random walk
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
Lin() Lin(s = 0.5, sd_slope = 2) Lin(s = 0) Lin(along = "cohort")
Lin() Lin(s = 0.5, sd_slope = 2) Lin(s = 0) Lin(along = "cohort")
Use a line or lines with autoregressive errors to model a main effect or interaction. Typically used with time.
Lin_AR( n_coef = 2, s = 1, shape1 = 5, shape2 = 5, mean_slope = 0, sd_slope = 1, along = NULL, con = c("none", "by") )
Lin_AR( n_coef = 2, s = 1, shape1 = 5, shape2 = 5, mean_slope = 0, sd_slope = 1, along = NULL, con = c("none", "by") )
n_coef |
Number of lagged terms in the
model, ie the order of the model. Default is |
s |
Scale for the innovations in the
AR process. Default is |
shape1 , shape2
|
Parameters for beta-distribution prior
for coefficients. Defaults are |
mean_slope |
Mean in prior for slope of line. Default is 0. |
sd_slope |
Standard deviation in the prior for the slope of the line. Larger values imply steeper slopes. Default is 1. |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If Lin_AR()
is used with an interaction,
separate lines are constructed along
the 'along' variable, within each combination
of the 'by' variables.
The order of the autoregressive errors is
controlled by the n_coef
argument. The
default is 2.
Argument s
controls the size of the innovations.
Smaller values tend to give smoother estimates.
Argument sd_slope
controls the slopes of
the lines. Larger values can give more steeply
sloped lines.
An object of class "bage_prior_linar"
.
When Lin_AR()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
The slopes have priors
and
Internally, Lin_AR()
derives a value for that
gives
or
a marginal
variance of
. Parameter
has a half-normal prior
The correlation coefficients
each have prior
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
Lin_AR1()
Special case of Lin_AR()
Lin()
Line with independent normal errors
AR()
AR process with no line
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
Lin_AR() Lin_AR(n_coef = 3, s = 0.5, sd_slope = 2)
Lin_AR() Lin_AR(n_coef = 3, s = 0.5, sd_slope = 2)
Use a line or lines with AR1 errors to model a main effect or interaction. Typically used with time.
Lin_AR1( s = 1, shape1 = 5, shape2 = 5, min = 0.8, max = 0.98, mean_slope = 0, sd_slope = 1, along = NULL, con = c("none", "by") )
Lin_AR1( s = 1, shape1 = 5, shape2 = 5, min = 0.8, max = 0.98, mean_slope = 0, sd_slope = 1, along = NULL, con = c("none", "by") )
s |
Scale for the innovations in the
AR process. Default is |
shape1 , shape2
|
Parameters for beta-distribution prior
for coefficients. Defaults are |
min , max
|
Minimum and maximum values
for autocorrelation coefficient.
Defaults are |
mean_slope |
Mean in prior for slope of line. Default is 0. |
sd_slope |
Standard deviation in the prior for the slope of the line. Larger values imply steeper slopes. Default is 1. |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If Lin_AR1()
is used with an interaction,
separate lines are constructed along
the 'along' variable, within each combination
of the 'by' variables.
Arguments min
and max
can be used to specify
the permissible range for autocorrelation.
Argument s
controls the size of the innovations.
Smaller values tend to give smoother estimates.
Argument sd_slope
controls the slopes of
the lines. Larger values can give more steeply
sloped lines.
An object of class "bage_prior_linar"
.
When Lin_AR1()
is being used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
The slopes have priors
and
Internally, Lin_AR1()
derives a value for that
gives
or
a marginal
variance of
. Parameter
has a half-normal prior
where a value for s
is provided by the user.
Coefficient is constrained
to lie between
min
and max
.
Its prior distribution is
where
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
The defaults for min
and max
are based on the
defaults for forecast::ets()
.
Lin_AR()
Generalization of Lin_AR1()
Lin()
Line with independent normal errors
AR1()
AR1 process with no line
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
Lin_AR1() Lin_AR1(min = 0, s = 0.5, sd_slope = 2)
Lin_AR1() Lin_AR1(min = 0, s = 0.5, sd_slope = 2)
Specify a model where the outcome is drawn from a binomial distribution.
mod_binom(formula, data, size)
mod_binom(formula, data, size)
formula |
An R formula, specifying the outcome and predictors. |
data |
A data frame containing the outcome and predictor variables, and the number of trials. |
size |
Name of the variable giving the number of trials, or a formula. |
The model is hierarchical. The probabilities in the binomial distribution are described by a prior model formed from dimensions such as age, sex, and time. The terms for these dimension themselves have models, as described in priors. These priors all have defaults, which depend on the type of term (eg an intercept, an age main effect, or an age-time interaction.)
An object of class bage_mod
.
The likelihood is
where
is a count, such of number of births, for some
combination
of classifying variables,
such as age, sex, and region;
is a probability of 'success'; and
is the number of trials.
The probabilities are assumed to be drawn
a beta distribution
where
is the expected value for
; and
governs dispersion (ie variance.)
Expected value equals, on a logit scale,
the sum of terms formed from classifying variables,
where
is an intercept;
,
, is a main effect
or interaction; and
is the element of
associated with
cell
.
The are given priors, as described in priors.
The prior for is described in
set_disp()
.
The size
argument can take two forms:
the name of a variable in data
, with or without
quote marks, eg "population"
or population
; or
a formula, which is evaluated with data
as its
environment (see below for example).
mod_pois()
Specify Poisson model
mod_norm()
Specify normal model
set_prior()
Specify non-default prior for term
set_disp()
Specify non-default prior for dispersion
fit()
Fit a model
forecast()
Forecast a model
report_sim()
Do a simulation study on a model
mod <- mod_binom(oneperson ~ age:region + age:year, data = nzl_households, size = total) ## use formula to specify size mod <- mod_binom(ncases ~ agegp + tobgp + alcgp, data = esoph, size = ~ ncases + ncontrols)
mod <- mod_binom(oneperson ~ age:region + age:year, data = nzl_households, size = total) ## use formula to specify size mod <- mod_binom(ncases ~ agegp + tobgp + alcgp, data = esoph, size = ~ ncases + ncontrols)
Specify a model where the outcome is drawn from a normal distribution.
mod_norm(formula, data, weights)
mod_norm(formula, data, weights)
formula |
An R formula, specifying the outcome and predictors. |
data |
A data frame containing outcome, predictor, and, optionally, weights variables. |
weights |
Name of the weights variable,
a |
The model is hierarchical. The means in the normal distribution are described by a prior model formed from dimensions such as age, sex, and time. The terms for these dimension themselves have models, as described in priors. These priors all have defaults, which depend on the type of term (eg an intercept, an age main effect, or an age-time interaction.)
Internally, the outcome variable scaled to have mean 0 and sd 1.
An object of class bage_mod_norm
.
The likelihood is
where
is a scaled value for an, such of the log of income, for some
combination
of classifying variables,
such as age, sex, and region;
is a mean;
is a standard deviation parameter; and
is a weight.
The scaling of the outcome variable is done internally.
If is the original, then
where
and
are the sample mean and standard
deviation of
.
In some applications, is set to 1
for all
.
The means equal the sum of terms formed
from classifying variables,
where
is an intercept;
,
, is a main effect
or interaction; and
is the element of
associated with
cell
.
The are given priors, as described in priors.
The prior for is described in
set_disp()
.
The weights
argument can take three forms:
the name of a variable in data
, with or without
quote marks, eg "wt"
or wt
;
the number 1
, in which no weights are used; or
a formula, which is evaluated with data
as its
environment (see below for example).
mod_pois()
Specify Poisson model
mod_binom()
Specify binomial model
set_prior()
Specify non-default prior for term
set_disp()
Specify non-default prior for standard deviation
fit()
Fit a model
forecast()
Forecast a model
report_sim()
Do a simulation study on a model
mod <- mod_norm(value ~ diag:age + year, data = nld_expenditure, weights = 1) ## use formula to specify weights mod <- mod_norm(value ~ diag:age + year, data = nld_expenditure, weights = ~sqrt(value))
mod <- mod_norm(value ~ diag:age + year, data = nld_expenditure, weights = 1) ## use formula to specify weights mod <- mod_norm(value ~ diag:age + year, data = nld_expenditure, weights = ~sqrt(value))
Specify a model where the outcome is drawn from a Poisson distribution.
mod_pois(formula, data, exposure)
mod_pois(formula, data, exposure)
formula |
An R formula, specifying the outcome and predictors. |
data |
A data frame containing outcome, predictor, and, optionally, exposure variables. |
exposure |
Name of the exposure variable,
or a |
The model is hierarchical. The rates in the Poisson distribution are described by a prior model formed from dimensions such as age, sex, and time. The terms for these dimension themselves have models, as described in priors. These priors all have defaults, which depend on the type of term (eg an intercept, an age main effect, or an age-time interaction.)
An object of class bage_mod_pois
.
The likelihood is
where
subscript identifies some combination of
classifying variables, such as age, sex, and time;
is an outcome, such as deaths;
is rates; and
is exposure.
In some applications, there is no obvious population at risk.
In these cases, exposure can be set to 1
for all
.
The rates are assumed to be drawn
a gamma distribution
where
is the expected value for
; and
governs dispersion (ie variance.)
Expected value equals, on the log scale,
the sum of terms formed from classifying variables,
where
is an intercept;
,
, is a main effect
or interaction; and
is the element of
associated with
cell
.
The are given priors, as described in priors.
The prior for is described in
set_disp()
.
The exposure
argument can take three forms:
the name of a variable in data
, with or without
quote marks, eg "population"
or population
;
the number 1
, in which case a pure "counts" model
with no exposure, is produced; or
a formula, which is evaluated with data
as its
environment (see below for example).
mod_binom()
Specify binomial model
mod_norm()
Specify normal model
set_prior()
Specify non-default prior for term
set_disp()
Specify non-default prior for dispersion
fit()
Fit a model
forecast()
Forecast a model
report_sim()
Do a simulation study on a model
## specify a model with exposure mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) ## specify a model without exposure mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = 1) ## use a formula to specify exposure mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = ~ pmax(popn, 1))
## specify a model with exposure mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) ## specify a model without exposure mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = 1) ## use a formula to specify exposure mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = ~ pmax(popn, 1))
Use independent draws from a normal distribution to model a main effect or interaction. Typically used with variables other than age or time, such as region or ethnicity, where there is no natural ordering.
N(s = 1)
N(s = 1)
s |
Scale for the standard deviation.
Default is |
Argument s
controls the size of errors. Smaller values
for s
tend to give more tightly clustered estimates.
An object of class "bage_prior_norm"
.
where is the main effect or interaction.
Parameter
has a half-normal prior
where s
is provided by the user.
NFix()
Similar to N()
but standard deviation
parameter is supplied rather than estimated from data
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
N() N(s = 0.5)
N() N(s = 0.5)
Normal prior where, in contrast to N()
, the
variance is treated as fixed and known. Typically
used for main effects or interactions where there
are too few elements to reliably estimate variance
from the available data.
NFix(sd = 1)
NFix(sd = 1)
sd |
Standard deviation. Default is |
NFix()
is the default prior for the intercept.
An object of class "bage_prior_normfixed"
.
where is the main effect or interaction,
and a value for
sd
is supplied by the user.
N()
Similar to NFix()
, but standard deviation
parameter is estimated from the data rather
than being fixed in advance
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
NFix() NFix(sd = 10)
NFix() NFix(sd = 10)
Per capita health expenditure, in Euros, by diagnostic group, age group, and year, in the Netherlands.
nld_expenditure
nld_expenditure
A tibble with 1,296 rows and the following columns:
diag
Diagnostic group
age
5-year age groups, with open age
group of 85+
year
2003, 2005, 2007, and 2011
Calculated from data in table "Expenditure by disease, age and gender under the System of Health Accounts (SHA) Framework : Current health spending by age" from OECD database 'OECD.Stat' (downloaded on 25 May 2016) and in table "Historical population data and projections (1950-2050)" from OECD database 'OECD.Stat' (downloaded 5 June 2016).
Counts of divorces and population, by age, sex, and calendar year, in New Zealand, 2011-2021.
nzl_divorces
nzl_divorces
A tibble with 242 rows and the following columns:
age
: 5-year age groups, "15-19"
to "65+"
sex
: "Female"
or "Male"
time
: Calendar year
divorces
: Numbers of divorces during year
population
: Person-years lived during year
Divorce counts from data in table "Age at divorces by sex (marriages and civil unions) (Annual-Dec)" in the online database Infoshare on the Statistics New Zealand website. Data downloaded on 22 March 2023. Population estimates derived from data in table "Estimated Resident Population by Age and Sex (1991+) (Annual-Dec)" in the online database Infoshare on the Statistics New Zealand website. Data downloaded on 26 March 2023.
Counts of people in one-person households, and counts of people living in any household, by age, region, and year.
nzl_households
nzl_households
A tibble with 528 rows and the following columns:
age
: 5-year age groups, with open age
group of 65+
region
: Region within New Zealand
year
: Calendar year
oneperson
: Count of people living in one-person
households
total
: Count of people living in all types of
household
Derived from data in table "Household composition by age group, for people in households in occupied private dwellings, 2006, 2013, and 2018 Censuses (RC, TA, DHB, SA2)" in the online database NZ.Stat, on the Statistics New Zealand website. Data downloaded on 3 January 2023.
Counts of fatal injuries in New Zealand, by age, sex, ethnicity, and year, plus estimates of the population at risk.
nzl_injuries
nzl_injuries
A tibble with 912 rows and the following columns:
age
: 5-year age groups, up to age 55-59
sex
: "Female"
or "Male"
ethnicity
: "Maori"
or "Non Maori"
year
: Calendar year
injuries
: Count of injuries, randomly rounded to base 3
popn
: Population on 30 June
Derived from data in tables "Estimated Resident Population by Age and Sex (1991+) (Annual-Jun)" and "Maori Ethnic Group Estimated Resident Population by Age and Sex (1991+) (Annual-Jun)" in the online database Infoshare, and table "Count of fatal and serious non-fatal injuries by sex, age group, ethnicity, cause, and severity of injury, 2000-2021" in the online database NZ.Stat, on the Statistics New Zealand website. Data downloaded on 1 January 2023.
After calling a function such as mod_pois()
or
set_prior()
it is good practice to print the
model object at the console, to check the model's
structure. The output from print()
has
the following components:
A header giving the class of the model and noting whether the model has been fitted.
A formula giving the outcome variable and terms for the model.
A table giving the number of parameters, and
(fitted models only) the standard
deviation across those parameters,
a measure of the term's importance.
See priors()
and tidy()
.
Values for other model settings. See set_disp()
,
set_var_age()
, set_var_sexgender()
, set_var_time()
,
set_n_draw()
Details on computations (fitted models only).
See computations()
.
## S3 method for class 'bage_mod' print(x, ...)
## S3 method for class 'bage_mod' print(x, ...)
x |
Object of class |
... |
Unused. Included for generic consistency only. |
x
, invisibly.
mod_pois()
, mod_binom()
, mod_norm()
Model specification and class
fit.bage_mod() and is_fitted()
Model fitting
priors Overview of priors for model terms
tidy.bage_mod() Number of parameters, and standard deviations
set_disp()
Dispersion
set_var_age()
, set_var_sexgender()
, set_var_time()
Age, sex/gender and time variables
set_n_draw()
Model draws
mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) ## print unfitted model mod mod <- fit(mod) ## print fitted model mod
mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) ## print unfitted model mod mod <- fit(mod) ## print fitted model mod
The models created with functions mod_pois()
, mod_binom()
,
and mod_norm()
always include an intercept,
and typically include main effects
and interactions formed from variables in input data.
Most models, for instance
include an age effect, and many include
an interaction between age and sex/gender,
or age and time.
The intercept, main effects, and interactions all have prior models that capture the expected behavior of the term. Current choices for priors summarised in the table below.
Priors where 'forecast' is yes can be used in forecasts for a time-varying terms such as an age-time interactions.
Priors where 'along' is yes distinguish between 'along' and 'by' dimensions.
Prior | Description | Uses | Forecast | Along |
N() |
Elements drawn from normal distribution | Term with no natural order | Yes | No |
NFix() |
As for N() , but standard deviation fixed |
Term with few elements | Yes | No |
Known() |
Values treated as known | Simulations, prior knowledge | No | No |
RW() |
Random walk | Smoothing | Yes | Yes |
RW2() |
Second-order random walk | Like RW() , but smoother |
Yes | Yes |
RW_Seas() |
Random walk, with seasonal effect | Terms involving time | Yes | Yes |
RW2_Seas() |
Second-order random walk, with seasonal effect | Term involving time | Yes | Yes |
AR() |
Auto-regressive prior of order k | Mean reversion | Yes | Yes |
AR1() |
Auto-regressive prior of order 1 Special case of AR() |
Mean reversion | Yes | Yes |
Lin() |
Linear trend, with independent normal | Parsimonious model for time | Yes | Yes |
Lin_AR() |
Linear trend, with autoregressive errors | Term involving time | Yes | Yes |
Lin_AR1() |
Linear trend, with AR1 errors | Terms involving time | Yes | Yes |
Sp() |
P-Spline (penalised spline) | Smoothing, eg over age | No | Yes |
SVD() |
Age or age-sex profile based on SVD of database | Age or age-sex | No | No |
SVD_AR() |
SVD() , but coefficients follow AR() |
Age or age-sex and time | Yes | Yes |
SVD_AR1() |
SVD() , but coefficients follow AR1() |
Age or age-sex and time | Yes | Yes |
SVD_RW() |
SVD() , but coefficients follow RW() |
Age or age-sex and time | Yes | Yes |
SVD_RW2() |
SVD() , but coefficients follow RW2() |
Age or age-sex and time | Yes | Yes |
The rule for selecting a default prior for a term is:
if term has less than 3 elements, use NFix()
;
otherwise, if the term involves time, use RW()
, with time as the ‘along’ dimension;
otherwise, if the term involves age, use RW()
, with age as the ‘along’ dimension;
otherwise, use N()
.
Use a fitted model to create replicate datasets, typically as a way of checking a model.
replicate_data(x, condition_on = NULL, n = 19)
replicate_data(x, condition_on = NULL, n = 19)
x |
A fitted model, typically created by
calling |
condition_on |
Parameters to condition
on. Either |
n |
Number of replicate datasets to create. Default is 19. |
Use n
draws from the posterior distribution
for model parameters to generate n
simulated datasets.
If the model is working well, these simulated
datasets should look similar to the actual dataset.
A tibble with the following structure:
.replicate |
data |
"Original" |
Original data supplied to mod_pois() , mod_binom() , mod_norm() |
"Replicate 1" |
Simulated data. |
"Replicate 2" |
Simulated data. |
... | ... |
"Replicate <n>" |
Simulated data. |
condition_on
argumentWith Poisson and binomial models that include dispersion terms (which is the default), there are two options for constructing replicate data.
When condition_on
is "fitted"
,
the replicate data is created by (i) drawing values
from the posterior distribution for rates or probabilities
(the defined in
mod_pois()
and mod_binom()
), and (ii) conditional on these
rates or probabilities, drawing values for the
outcome variable.
When condition_on
is "expected"
,
the replicate data is created by (i) drawing
values from hyper-parameters governing
the rates or probabilities
(the and
defined
in
mod_pois()
and mod_binom()
),
then (ii) conditional on these hyper-parameters,
drawing values for the rates or probabilities,
and finally (iii) conditional on these
rates or probabilities, drawing values for the
outcome variable.
The default for condition_on
is "expected"
.
The "expected"
option
provides a more severe test for
a model than the "fitted"
option,
since "fitted" values are weighted averages
of the "expected" values and the original
data.
As described in mod_norm()
, normal models
have a different structure from Poisson
and binomial models, and the distinction between
"fitted"
and "expected"
does not apply.
If a data model has been provided for
the outcome variable, then creation of replicate
data will include a step where errors are added
to outcomes. For instance, the a rr3
data model is used, then replicate_data()
rounds
the outcomes to base 3.
mod_pois()
, mod_binom()
, mod_norm()
Create model.
fit()
Fit model.
report_sim()
Simulation study of model.
mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = 1) |> fit() rep_data <- mod |> replicate_data() library(dplyr) rep_data |> group_by(.replicate) |> count(wt = injuries) ## when the overall model includes an rr3 data model, ## replicate data are rounded to base 3 mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) |> set_datamod_outcome_rr3() |> fit() |> replicate_data()
mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = 1) |> fit() rep_data <- mod |> replicate_data() library(dplyr) rep_data |> group_by(.replicate) |> count(wt = injuries) ## when the overall model includes an rr3 data model, ## replicate data are rounded to base 3 mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) |> set_datamod_outcome_rr3() |> fit() |> replicate_data()
Use simulated data to assess the performance of an estimation model.
report_sim( mod_est, mod_sim = NULL, method = c("standard", "inner-outer"), vars_inner = NULL, n_sim = 100, point_est_fun = c("median", "mean"), widths = c(0.5, 0.95), report_type = c("short", "long", "full"), n_core = 1 )
report_sim( mod_est, mod_sim = NULL, method = c("standard", "inner-outer"), vars_inner = NULL, n_sim = 100, point_est_fun = c("median", "mean"), widths = c(0.5, 0.95), report_type = c("short", "long", "full"), n_core = 1 )
mod_est |
The model whose performance is being
assessed. An object of class |
mod_sim |
The model used to generate the simulated
data. If no value is supplied, |
method |
Estimation method used for |
vars_inner |
Variables used in inner model
with |
n_sim |
Number of sets of simulated data to use. Default is 100. |
point_est_fun |
Name of the function to use
to calculate point estimates. The options are |
widths |
Widths of credible intervals.
A vector of values in the interval |
report_type |
Amount of detail in return value.
Options are |
n_core |
Number of cores to use for parallel
processing. If |
A named list with a tibble called "components"
and a
tibble called "augment"
.
The interface for report_sim()
is still under development
and may change in future.
mod_pois()
, mod_binom()
, mod_norm()
Specify a
model
components()
, augment()
Draw from joint prior
or posterior distribution of model
replicate_data()
Generate replicate
data for a model
## results random, so set seed set.seed(0) ## make data - outcome variable (deaths here) ## needs to be present, but is not used data <- data.frame(region = c("A", "B", "C", "D", "E"), population = c(100, 200, 300, 400, 500), deaths = NA) ## simulation with estimation model same as ## data-generating model mod_est <- mod_pois(deaths ~ region, data = data, exposure = population) |> set_prior(`(Intercept)` ~ Known(0)) report_sim(mod_est = mod_est, n_sim = 10) ## in practice should use larger value ## simulation with estimation model different ## from data-generating model mod_sim <- mod_est |> set_prior(region ~ N(s = 2)) report_sim(mod_est = mod_est, mod_sim = mod_sim, n_sim = 10)
## results random, so set seed set.seed(0) ## make data - outcome variable (deaths here) ## needs to be present, but is not used data <- data.frame(region = c("A", "B", "C", "D", "E"), population = c(100, 200, 300, 400, 500), deaths = NA) ## simulation with estimation model same as ## data-generating model mod_est <- mod_pois(deaths ~ region, data = data, exposure = population) |> set_prior(`(Intercept)` ~ Known(0)) report_sim(mod_est = mod_est, n_sim = 10) ## in practice should use larger value ## simulation with estimation model different ## from data-generating model mod_sim <- mod_est |> set_prior(region ~ N(s = 2)) report_sim(mod_est = mod_est, mod_sim = mod_sim, n_sim = 10)
Use a random walk as a model for a main effect, or use multiple random walks as a model for an interaction. Typically used with terms that involve age or time.
RW(s = 1, sd = 1, along = NULL, con = c("none", "by"))
RW(s = 1, sd = 1, along = NULL, con = c("none", "by"))
s |
Scale for the prior for the innovations.
Default is |
sd |
Standard deviation
of initial value. Default is |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If RW2()
is used with an interaction,
a separate random walk is constructed
within each combination of the
'by' variables.
Argument s
controls the size of innovations.
Smaller values for s
tend to produce smoother series.
Argument sd
controls variance in
initial values. Setting sd
to 0
fixes initial
values at 0.
An object of class "bage_prior_rwrandom"
or "bage_prior_rwzero"
.
When RW()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Parameter
has a half-normal prior
where s
is provided by the user.
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
RW_Seas()
Random walk with seasonal effect
RW2()
Second-order random walk
AR()
Autoregressive with order k
AR1()
Autoregressive with order 1
Sp()
Smoothing via splines
SVD()
Smoothing over age using singular value decomposition
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
RW() RW(s = 0.5) RW(sd = 0) RW(along = "cohort")
RW() RW(s = 0.5) RW(sd = 0) RW(along = "cohort")
Use a random walk with seasonal effects as a model for a main effect, or use multiple random walks, each with their own seasonal effects, as a model for an interaction. Typically used with terms that involve time.
RW_Seas( n_seas, s = 1, sd = 1, s_seas = 0, sd_seas = 1, along = NULL, con = c("none", "by") )
RW_Seas( n_seas, s = 1, sd = 1, s_seas = 0, sd_seas = 1, along = NULL, con = c("none", "by") )
n_seas |
Number of seasons |
s |
Scale for prior for innovations in
random walk. Default is |
sd |
Standard deviation
of initial value. Default is |
s_seas |
Scale for innovations
in seasonal effects. Default is |
sd_seas |
Standard deviation for
initial values of seasonal effects.
Default is |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If RW_Seas()
is used with an interaction,
a separate series is constructed
within each combination of the
'by' variables.
Argument s
controls the size of innovations in the random walk.
Smaller values for s
tend to produce smoother series.
Argument sd
controls variance in
initial values of the random walk. sd
can be 0
.
Argument n_seas
controls the number of seasons.
When using quarterly data, for instance,
n_seas
should be 4
.
By default, the magnitude of seasonal effects
is fixed. However, setting s_seas
to a value
greater than zero produces seasonal effects
that evolve over time.
Object of class
"bage_prior_rwrandomseasvary"
,
"bage_prior_rwrandomseasfix"
,
"bage_prior_rwzeroseasvary"
, or
"bage_prior_rwzeroseasfix"
.
When RW_Seas()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
or
is an element of the random walk;
or
is an element of the seasonal effect;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Parameter has a half-normal prior
If s_seas
is set to 0, then is 0,
and seasonal effects are time-invariant.
Parameter has a half-normal prior
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
RW()
Random walk without seasonal effect
RW2_Seas()
Second-order random walk with seasonal effect
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
RW_Seas(n_seas = 4) ## seasonal effects fixed RW_Seas(n_seas = 4, s_seas = 0.5) ## seasonal effects evolve RW_Seas(n_seas = 4, sd = 0) ## first term in random walk fixed at 0
RW_Seas(n_seas = 4) ## seasonal effects fixed RW_Seas(n_seas = 4, s_seas = 0.5) ## seasonal effects evolve RW_Seas(n_seas = 4, sd = 0) ## first term in random walk fixed at 0
Use a second-order random walk as a model for a main effect, or use multiple second-order random walks as a model for an interaction. A second-order random walk is a random walk with drift where the drift term varies. It is typically used with terms that involve age or time, where there are sustained trends upward or downward.
RW2(s = 1, sd = 1, sd_slope = 1, along = NULL, con = c("none", "by"))
RW2(s = 1, sd = 1, sd_slope = 1, along = NULL, con = c("none", "by"))
s |
Scale for the prior for the innovations.
Default is |
sd |
Standard deviation
of initial value. Default is |
sd_slope |
Standard deviation
of initial slope. Default is |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If RW2()
is used with an interaction,
a separate random walk is constructed
within each combination of the
'by' variables.
Argument s
controls the size of innovations.
Smaller values for s
tend to give smoother series.
Argument sd
controls variance in
initial values. Setting sd
to 0
fixes
initial values at 0
.
Argument sd_slope
controls variance in the
initial slope.
An object of class "bage_prior_rw2random"
or "bage_prior_rw2zero"
.
When RW2()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Parameter
has a half-normal prior
.
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
RW()
Random walk
RW2_Seas()
Second order random walk with seasonal effect
AR()
Autoregressive with order k
AR1()
Autoregressive with order 1
Sp()
Smoothing via splines
SVD()
Smoothing over age via singular value decomposition
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
RW2() RW2(s = 0.5)
RW2() RW2(s = 0.5)
Use a second-order random walk to model variation over age, with an indicator variable for the first age group. Designed for use in models of mortality rates.
RW2_Infant(s = 1, sd_slope = 1, con = c("none", "by"))
RW2_Infant(s = 1, sd_slope = 1, con = c("none", "by"))
s |
Scale for the prior for the innovations.
Default is |
sd_slope |
Standard deviation
for initial slope of random walk. Default is |
con |
Constraints on parameters.
Current choices are |
A second-order random walk prior RW2()
works well for smoothing
mortality rates over age, except at age 0, where there
is a sudden jump in rates, reflecting the
special risks of infancy. The RW2_Infant()
extends the RW2()
prior by adding an indicator
variable for the first age group.
If RW2_Infant()
is used in an interaction,
the 'along' dimension is always age, implying that
there is a separate random walk along age within each
combination of the 'by' variables.
Argument s
controls the size of innovations in the random walk.
Smaller values for s
tend to give smoother series.
Argument sd
controls the sl size of innovations in the random walk.
Smaller values for s
tend to give smoother series.
Object of class "bage_prior_rw2infant"
.
When RW2_Infant()
is used with a main effect,
and when it is used with an interaction,
where
is a main effect or interaction;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Parameter has a half-normal prior
.
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
RW2()
Second-order random walk, without infant indicator
Sp()
Smoothing via splines
SVD()
Smoothing over age via singular value decomposition
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
RW2_Infant() RW2_Infant(s = 0.1)
RW2_Infant() RW2_Infant(s = 0.1)
Use a second-oder random walk with seasonal effects as a model for a main effect, or use multiple second-order random walks, each with their own seasonal effects, as a model for an interaction. Typically used with temrs that involve time.
RW2_Seas( n_seas, s = 1, sd = 1, sd_slope = 1, s_seas = 0, sd_seas = 1, along = NULL, con = c("none", "by") )
RW2_Seas( n_seas, s = 1, sd = 1, sd_slope = 1, s_seas = 0, sd_seas = 1, along = NULL, con = c("none", "by") )
n_seas |
Number of seasons |
s |
Scale for prior for innovations in
random walk. Default is |
sd |
Standard deviation
of initial value. Default is |
sd_slope |
Standard deviation
for initial slope of random walk. Default is |
s_seas |
Scale for innovations
in seasonal effects. Default is |
sd_seas |
Standard deviation for
initial values of seasonal effects.
Default is |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If RW2_Seas()
is used with an interaction,
a separate series is constructed within each
combination of the 'by' variables.
Argument s
controls the size of innovations in the random walk.
Smaller values for s
tend to produce smoother series.
Argument n_seas
controls the number of seasons.
When using quarterly data, for instance,
n_seas
should be 4
.
By default, the magnitude of seasonal effects
is fixed. However, setting s_seas
to a value
greater than zero produces seasonal effects
that evolve over time.
Object of class
"bage_prior_rw2randomseasvary"
,
"bage_prior_rw2randomseasfix"
,
"bage_prior_rw2zeroseasvary"
, or
"bage_prior_rw2zeroseasfix"
.
When RW2_Seas()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction;
or
is an element of the random walk;
or
is an element of the seasonal effect;
denotes position within the main effect;
denotes position within the 'along' variable of the interaction; and
denotes position within the 'by' variable(s) of the interaction.
Parameter has a half-normal prior
.
If s_seas
is set to 0, then is 0,
and the seasonal effects are fixed over time.
Parameter has a half-normal prior
.
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
RW2()
Second-order random walk without seasonal effect
RW_Seas()
Random walk with seasonal effect
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
RW2_Seas(n_seas = 4) ## seasonal effects fixed RW2_Seas(n_seas = 4, s_seas = 0.5) ## seasonal effects evolve RW2_Seas(n_seas = 4, sd = 0) ## first term in random walk fixed at 0
RW2_Seas(n_seas = 4) ## seasonal effects fixed RW2_Seas(n_seas = 4, s_seas = 0.5) ## seasonal effects evolve RW2_Seas(n_seas = 4, sd = 0) ## first term in random walk fixed at 0
Specify a data model where the outcome variable has been randomly rounded to base 3.
set_datamod_outcome_rr3(mod)
set_datamod_outcome_rr3(mod)
mod |
An object of class |
set_datamod_outcome_rr3()
can only be used with
Poisson and binomial models (created with
mod_pois()
and mod_binom()
.)
Random rounding to base 3 (RR3) is a confidentialization
technique that is sometimes applied by statistical
agencies. RR3 is applied to integer data. The
procedure for rounding value is as follows:
If is divisible by 3, leave it unchanged
If dividing by 3 leaves a remainder of 1, then
round down (subtract 1) with probability 2/3,
and round up (add 2) with probability 1/3.
If dividing by 3 leaves a remainder of 1,
then round down (subtract 2)
with probability 1/3, and round up (add 1)
with probability 2/3.
If set_datamod_outcome_rr3()
is applied to
a fitted model, it 'unfits'
the model, deleting existing estimates.
A modified version of mod
.
datamods Overview of data models implemented in bage
mod_pois()
, mod_binom()
, mod_norm()
Specify a
model for rates, probabilities, or means
## 'injuries' variable in 'nzl_injuries' dataset ## has been randomly rounded to base 3 mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) |> set_datamod_outcome_rr3() |> fit()
## 'injuries' variable in 'nzl_injuries' dataset ## has been randomly rounded to base 3 mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) |> set_datamod_outcome_rr3() |> fit()
Specify the mean of prior for the dispersion parameter (in Poisson and binomial models) or the standard deviation parameter (in normal models.)
set_disp(mod, mean)
set_disp(mod, mean)
mod |
An object of class |
mean |
Mean value for the exponential prior. In Poisson and binomial models, can be set to 0. |
The dispersion or mean parameter has an exponential
distribution with mean ,
In Poisson and binomial models,
mean
can be set to 0
, implying
that the dispersion term is also 0
.
In normal models, mean
must be non-negative.
If set_disp()
is applied to
a fitted model, it 'unfits'
the model, deleting existing estimates.
A bage_mod
object
mod_pois()
, mod_binom()
, mod_norm()
Specify a
model for rates, probabilities, or means
set_prior()
Specify prior for a term
set_n_draw()
Specify the number of draws
is_fitted()
Test whether a model is fitted
mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) mod mod |> set_disp(mean = 0.1) mod |> set_disp(mean = 0)
mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) mod mod |> set_disp(mean = 0.1) mod |> set_disp(mean = 0)
Specify the number of draws from the posterior
distribution to be used in model output.
A newly-created bage_mod
object has an
n_draw
value of 1000. Higher values
may be appropriate for characterizing
the tails of distributions, or for
publication-quality graphics and summaries.
set_n_draw(mod, n_draw = 1000L)
set_n_draw(mod, n_draw = 1000L)
mod |
An object of class |
n_draw |
Number of draws. |
If the new value for n_draw
is greater than
the old value, and the model has already been fitted,
then the model is unfitted, and
function fit()
may need to be called again.
A bage_mod
object
augment()
, components()
functions for
drawing from prior or posterior distribution - the output
of which is affected by the value of n_draw
.
mod_pois()
, mod_binom()
, mod_norm()
Specify a
model
set_prior()
Specify prior for a term
set_disp()
Specify prior for dispersion
fit()
Fit a model
unfit()
Reset a model
mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) mod mod |> set_n_draw(n_draw = 5000)
mod <- mod_pois(injuries ~ age:sex + ethnicity + year, data = nzl_injuries, exposure = popn) mod mod |> set_n_draw(n_draw = 5000)
Specify a prior distribution for an intercept, a main effect, or an interaction.
set_prior(mod, formula)
set_prior(mod, formula)
mod |
A |
formula |
A formula giving the term and a function for creating a prior. |
If set_prior()
is applied to
a fitted model, it 'unfits'
the model, deleting existing estimates.
A modified bage_mod
object.
priors Current choices for prior distributions
is_fitted()
Test whether a model is fitted
set_disp()
Specify prior for dispersion
mod <- mod_pois(injuries ~ age + year, data = nzl_injuries, exposure = popn) mod mod |> set_prior(age ~ RW2())
mod <- mod_pois(injuries ~ age + year, data = nzl_injuries, exposure = popn) mod mod |> set_prior(age ~ RW2())
Specify which variable (if any) represents age.
Functions mod_pois()
, mod_binom()
,
and mod_norm()
try to infer the age variable
from variable names, but do not always get it right.
set_var_age(mod, name)
set_var_age(mod, name)
mod |
An object of class |
name |
The name of the age variable. |
In an R formula
, a 'variable' is different
from a 'term'. For instance,
~ age + region + age:region
contains variables age
and region
,
and terms age
, region
, and age:region
.
By default, bage gives a term involving age a
(RW()
) prior. Changing the age variable
via set_var_age()
can change priors:
see below for an example.
If set_var_age()
is applied to
a fitted model, it 'unfits'
the model, deleting existing estimates.
A bage_mod
object
set_var_sexgender()
Set sex or gender variable
set_var_time()
Set time variable
is_fitted()
Test whether a model is fitted
internally, bage uses poputils::find_var_age()
to locate age variables
## rename 'age' variable to something unusual injuries2 <- nzl_injuries injuries2$age_last_birthday <- injuries2$age ## mod_pois does not recognize age variable mod <- mod_pois(injuries ~ age_last_birthday * ethnicity + year, data = injuries2, exposure = popn) mod ## so we set the age variable explicitly ## (which, as a side effect, changes the prior on ## the age main effect) mod |> set_var_age(name = "age_last_birthday")
## rename 'age' variable to something unusual injuries2 <- nzl_injuries injuries2$age_last_birthday <- injuries2$age ## mod_pois does not recognize age variable mod <- mod_pois(injuries ~ age_last_birthday * ethnicity + year, data = injuries2, exposure = popn) mod ## so we set the age variable explicitly ## (which, as a side effect, changes the prior on ## the age main effect) mod |> set_var_age(name = "age_last_birthday")
Specify which variable (if any) represents sex or gender.
Functions mod_pois()
, mod_binom()
,
and mod_norm()
try to infer the sex/gender variable
from variable names, but do not always get it right.
set_var_sexgender(mod, name)
set_var_sexgender(mod, name)
mod |
An object of class |
name |
The name of the sex or gender variable. |
In an R formula
, a 'variable' is different
from a 'term'. For instance,
~ gender + region + gender:region
contains variables gender
and region
,
and terms gender
, region
, and gender:region
.
If set_var_sexgender()
is applied to
a fitted model, it 'unfits'
the model, deleting existing estimates.
A "bage_mod"
object
set_var_age()
Set age variable
set_var_time()
Set time variable
is_fitted()
Test whether model is fitted
internally, bage uses poputils::find_var_sexgender()
to locate sex or gender variables
internally, bage uses poputils::find_label_female()
to locate female categories within a sex or gender variable
internally, bage uses poputils::find_label_male()
to locate male categories within a sex or gender variable
## rename 'sex' variable to something unexpected injuries2 <- nzl_injuries injuries2$biological_sex <- injuries2$sex ## mod_pois does not recognize sex variable mod <- mod_pois(injuries ~ age * biological_sex + year, data = injuries2, exposure = popn) mod ## so we set the sex variable explicitly mod |> set_var_sexgender(name = "biological_sex")
## rename 'sex' variable to something unexpected injuries2 <- nzl_injuries injuries2$biological_sex <- injuries2$sex ## mod_pois does not recognize sex variable mod <- mod_pois(injuries ~ age * biological_sex + year, data = injuries2, exposure = popn) mod ## so we set the sex variable explicitly mod |> set_var_sexgender(name = "biological_sex")
Specify which variable (if any) represents time.
Functions mod_pois()
, mod_binom()
,
and mod_norm()
try to infer the time variable
from variable names, but do not always get it right.
set_var_time(mod, name)
set_var_time(mod, name)
mod |
An object of class |
name |
The name of the time variable. |
In an R formula
, a 'variable' is different
from a 'term'. For instance,
~ time + region + time:region
contains variables time
and region
,
and terms time
, region
, and time:region
.
By default, bage gives a term involving time a
(RW()
) prior. Changing the time variable
via set_var_time()
can change priors:
see below for an example.
If set_var_time()
is applied to
a fitted model, it 'unfits'
the model, deleting existing estimates.
A bage_mod
object
set_var_age()
Set age variable
set_var_sexgender()
Sex sex or gender variable
is_fitted()
Test if model has been fitted
internally, bage uses poputils::find_var_time()
to locate time variables
## rename time variable to something unusual injuries2 <- nzl_injuries injuries2$calendar_year <- injuries2$year ## mod_pois does not recognize time variable mod <- mod_pois(injuries ~ age * ethnicity + calendar_year, data = injuries2, exposure = popn) mod ## so we set the time variable explicitly ## (which, as a side effect, changes the prior on ## the time main effect) mod |> set_var_time(name = "calendar_year")
## rename time variable to something unusual injuries2 <- nzl_injuries injuries2$calendar_year <- injuries2$year ## mod_pois does not recognize time variable mod <- mod_pois(injuries ~ age * ethnicity + calendar_year, data = injuries2, exposure = popn) mod ## so we set the time variable explicitly ## (which, as a side effect, changes the prior on ## the time main effect) mod |> set_var_time(name = "calendar_year")
Use a p-spline (penalised spline) to model main effects or interactions. Typically used with age, but can be used with any variable where outcomes are expected to vary smoothly from one element to the next.
Sp( n_comp = NULL, s = 1, sd = 1, sd_slope = 1, along = NULL, con = c("none", "by") )
Sp( n_comp = NULL, s = 1, sd = 1, sd_slope = 1, along = NULL, con = c("none", "by") )
n_comp |
Number of spline basis functions (components) to use. |
s |
Scale for the prior for the innovations.
Default is |
sd |
Standard deviation in prior for first element of random walk. |
sd_slope |
Standard deviation in prior
for initial slope of random walk. Default is |
along |
Name of the variable to be used as the 'along' variable. Only used with interactions. |
con |
Constraints on parameters.
Current choices are |
If Sp()
is used with an interaction,
separate splines are used for the 'along' variable within
each combination of the
'by' variables.
An object of class "bage_prior_spline"
.
When Sp()
is used with a main effect,
and when it is used with an interaction,
where
is the main effect or interaction, with
elements;
is a subvector of
holding
values for the
th combination of the 'by' variables;
is the number of elements of
;
is the number of elements of
;
is a
or
matrix of
spline basis functions; and
is
n_comp
.
The elements of or
are assumed
to follow a second-order random walk.
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
Eilers, P.H.C. and Marx B. (1996). "Flexible smoothing with B-splines and penalties". Statistical Science. 11 (2): 89–121.
RW()
Smoothing via random walk
RW2()
Smoothing via second-order random walk
SVD()
Smoothing of age via singular value decomposition
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
splines::bs()
Function used by bage to construct
spline basis functions
Sp() Sp(n_comp = 10)
Sp() Sp(n_comp = 10)
Use components from a Singular Value Decomposition (SVD) to model a main effect or interaction involving age.
SVD(ssvd, n_comp = NULL, indep = TRUE)
SVD(ssvd, n_comp = NULL, indep = TRUE)
ssvd |
Object of class |
n_comp |
Number of components from scaled SVD
to use in modelling. The default is half
the number of components of |
indep |
Whether to use separate or
combined SVDs in terms involving sex or gender.
Default is |
A SVD()
prior assumes that the age, age-sex, or age-gender
profiles for the quantity
being modelled looks like they were drawn at random
from an external demographic database. For instance,
the prior obtained via
SVD(HMD)
assumes that age or age-sex profiles look like they were drawn from the Human Mortality Database.
If SVD()
is used with an interaction involving
variables other than age and sex/gender,
separate profiles are constructed
within each combination of other variables.
bage chooses the appropriate age-specific
or age-sex-specific SVD values internally.
The choice depends on the model term that the
SVD()
prior is applied to, and on the
age labels used in data
argument to
mod_pois()
, mod_binom()
or mod_norm()
.
bage makes its choice when set_prior()
is called.
An object of class "bage_prior_svd"
.
Two possible ways of extracting patterns from age-sex-specific data are
carry out separate SVDs on separate datasets for each sex/gender; or
carry out a single SVD on dataset that has separate entries for each sex/gender.
Option 1 is more flexible. Option 2 is
more robust to sampling or measurement errors.
Option 1 is obtained by setting the joint
argument to FALSE
. Option 1
is obtained by setting the indep
argument to TRUE
.
The default is TRUE
.
Case 1: Term involving age and no other variables
When SVD()
is used with an age main effect,
where
is a main effect or interaction involving age;
is the number of elements of
;
is the number of components from the SVD;
is a known matrix with dimension
; and
is a known vector with
elements.
and
are constructed from
a large database of age-specific demographic estimates
by performing an SVD and standardizing.
The elements of have prior
Case 2: Term involving age and non-sex, non-gender variable(s)
When SVD()
is used with an interaction that involves age but that
does not involve sex or gender,
where
is a subvector of
holding
values for the
th combination of the non-age variables;
is the number of elements of
;
is the number of components from the SVD;
is a known matrix with dimension
; and
is a known vector with
elements.
Case 3: Term involving age, sex/gender, and no other variables
When SVD()
is used with an interaction that involves
age and sex or gender, there are two sub-cases, depending on
the value of indep
.
When indep
is TRUE
,
and when indep
is FALSE
,
where
is an interaction involving age and sex/gender;
is a subvector of
,
holding values for sex/gender
;
is the number of elements in
;
is the number of sexes/genders;
is the number of components from the SVD;
is a known
matrix, specific
to sex/gender
;
is a known vector with
elements,
specific to sex/gender
;
is a known
matrix, with values
for all sexes/genders; and
is a known vector with
elements, with values
for all sexes/genders.
The elements of and
have prior
Case 4: Term involving age, sex/gender, and other variable(s)
When SVD()
is used with an interaction that involves
age, sex or gender, and other variables, there are two sub-cases,
depending on the value of indep
.
When indep
is TRUE
,
and when indep
is FALSE
,
where
is an interaction involving sex/gender;
is a subvector of
,
holding values for sex/gender
for the
th
combination of the other variables;
is the number of elements in
;
is the number of sexes/genders;
is the number of components from the SVD;
is a known
matrix, specific
to sex/gender
;
is a known vector with
elements,
specific to sex/gender
;
is a known
matrix, with values
for all sexes/genders; and
is a known vector with
elements, with values
for all sexes/genders.
HMD
Mortality rates from the
Human Mortality Database.
HFD
Fertility rates from the
Human Fertility Database.
For details of the construction of scaled SVDS see the vignette here.
SVD_AR()
, SVD_AR1()
, SVD_RW()
, SVD_RW2()
SVD priors for
for time-varying age profiles;
RW()
Smoothing via random walk
RW2()
Smoothing via second-order random walk
Sp()
Smoothing via splines
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
set_var_sexgender()
Identify sex or gender variable in data
SVD(HMD) SVD(HMD, n_comp = 3)
SVD(HMD) SVD(HMD, n_comp = 3)
Use components from a Singular Value Decomposition (SVD) to model an interaction involving age and time, or age, sex/gender and time, where the coefficients evolve over time.
SVD_AR( ssvd, n_comp = NULL, indep = TRUE, n_coef = 2, s = 1, shape1 = 5, shape2 = 5, con = c("none", "by") ) SVD_AR1( ssvd, n_comp = NULL, indep = TRUE, min = 0.8, max = 0.98, s = 1, shape1 = 5, shape2 = 5, con = c("none", "by") ) SVD_RW(ssvd, n_comp = NULL, indep = TRUE, s = 1, sd = 1, con = c("none", "by")) SVD_RW2( ssvd, n_comp = NULL, indep = TRUE, s = 1, sd = 1, sd_slope = 1, con = c("none", "by") )
SVD_AR( ssvd, n_comp = NULL, indep = TRUE, n_coef = 2, s = 1, shape1 = 5, shape2 = 5, con = c("none", "by") ) SVD_AR1( ssvd, n_comp = NULL, indep = TRUE, min = 0.8, max = 0.98, s = 1, shape1 = 5, shape2 = 5, con = c("none", "by") ) SVD_RW(ssvd, n_comp = NULL, indep = TRUE, s = 1, sd = 1, con = c("none", "by")) SVD_RW2( ssvd, n_comp = NULL, indep = TRUE, s = 1, sd = 1, sd_slope = 1, con = c("none", "by") )
ssvd |
Object of class |
n_comp |
Number of components from scaled SVD
to use in modelling. The default is half
the number of components of |
indep |
Whether to use separate or
combined SVDs in terms involving sex or gender.
Default is |
n_coef |
Number of AR coefficients in |
s |
Scale for standard deviations terms. |
shape1 , shape2
|
Parameters for prior
for coefficients in |
con |
Constraints on parameters.
Current choices are |
min , max
|
Minimum and maximum values
for autocorrelation coefficient in |
sd |
Standard deviation
of initial value for random walks. Default is |
sd_slope |
Standard deviation in prior
for initial slope. Default is |
SVD_AR()
, SVD_AR1()
, SVD_RW()
, and SVD_RW2()
priors assume that, in any given period,
the age profiles or age-sex profiles for the quantity
being modelled looks like they were drawn at random
from an external demographic database. For instance,
the SVD_AR()
prior obtained via
SVD_AR(HMD)
assumes that profiles look like they were obtained from the Human Mortality Database.
An object of class "bage_prior_svd_ar"
,
"bage_prior_svd_rw"
, or "bage_prior_svd_rw2"
.
When the interaction being modelled only involves age and time, or age, sex/gender, and time
and when it involves other variables besides age, sex/gender, and time,
where
is an interaction involving age, time, possibly sex/gender,
and possibly other variables;
is a subvector of
holding
values for period
;
is a subvector of
holding
values for the
th combination of the non-age, non-time,
non-sex/gender variables for period
;
is a known matrix; and
is a known vector.
and
are constructed from
a large database of age-specific demographic estimates
by applying the singular value decomposition, and then standardizing.
With SVD_AR()
, the prior for the th element
of
or
is
or
with SVD_AR1()
, it is
or
with SVD_RW()
, it is
or
and with SVD_RW2()
, it is
or
For details, see AR()
, AR1()
,
RW()
, and RW2()
.
With some combinations of terms and priors, the values of the intercept, main effects, and interactions are are only weakly identified. For instance, it may be possible to increase the value of the intercept and reduce the value of the remaining terms in the model with no effect on predicted rates and only a tiny effect on prior probabilities. This weak identifiability is typically harmless. However, in some applications, such as forecasting, or when trying to obtain interpretable values for main effects and interactions, it can be helpful to increase identifiability through the use of constraints.
Current options for constraints are:
"none"
No constraints. The default.
"by"
Only used in interaction terms that include 'along' and
'by' dimensions. Within each value of the 'along'
dimension, terms across each 'by' dimension are constrained
to sum to 0.
HMD
Mortality rates from the
Human Mortality Database.
HFD
Fertility rates from the
Human Fertility Database.
For details of the construction of scaled SVDS see the vignette here.
SVD()
SVD prior for non-time-varying terms
RW()
Smoothing via random walk
RW2()
Smoothing via second-order random walk
Sp()
Smoothing via splines
priors Overview of priors implemented in bage
set_prior()
Specify prior for intercept,
main effect, or interaction
set_var_sexgender()
Identify sex or gender variable in data
SVD_AR1(HMD) SVD_RW(HMD, n_comp = 3) SVD_RW2(HMD, indep = FALSE)
SVD_AR1(HMD) SVD_RW(HMD, n_comp = 3) SVD_RW2(HMD, indep = FALSE)
Counts of births and infant deaths in Sweden by county and year, 1995-2015
swe_infant
swe_infant
A tibble with 441 rows and the following columns:
county
: A factor with 21 levels, where the levels are
ordered by number of births, from "Stockholm"
down to "Gotland"
'time: Calendar year
births
: Count of births
deaths
: Count of infant deaths
Dataset used in Chapter 11 of the book Bayesian Demographic Estimation and Forecasting.
Database "Live births by region, mother's age and child's sex. Year 1968 - 2017" and database "Deaths by region, age (during the year) and sex. Year 1968 - 2017" on the Statistics Sweden website. Downloaded on 13 July 2018.
Bryant J and Zhang J. 2018. Bayesian Demographic Estimation and Forecasting. CRC Press.
Summarize the intercept, main effects, and interactions from a fitted model.
## S3 method for class 'bage_mod' tidy(x, ...)
## S3 method for class 'bage_mod' tidy(x, ...)
x |
Object of class |
... |
Unused. Included for generic consistency only. |
The tibble returned by tidy()
contains the following columns:
term
Name of the intercept, main effect, or interaction
prior
Specification for prior
n_par
Number of parameters
n_par_free
Number of free parameters
std_dev
Standard deviation for point estimates.
With some priors, the number of free parameters is less than
the number of parameters for that term. For instance, an SVD()
prior might use three vectors to represent 101 age groups
so that the number of parameters is 101, but the number of
free parameters is 3.
std_dev
is the standard deviation across elements of a
term, based on point estimates of those elements.
For instance, if the point
estimates for a term with three elements are
0.3, 0.5, and 0.1, then the value for std_dev
is
sd(c(0.3, 0.5, 0.1))
std_dev
is a measure of the contribution of a term to
variation in the outcome variable.
A tibble
std_dev
is modified from Gelman et al. (2014)
Bayesian Data Analysis. Third Edition. pp396–397.
augment()
Extract data, and values for rates,
probabilities, or means
components()
Extract values for hyper-parameters
mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) mod <- fit(mod) tidy(mod)
mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) mod <- fit(mod) tidy(mod)
Reset a model, deleting all estimates.
unfit(mod)
unfit(mod)
mod |
A fitted object of class |
An unfitted version of mod
.
fit()
Fit a model
mod_pois()
, mod_binom()
, mod_norm()
Specify a model
Functions such as set_prior()
, set_disp()
and
set_var_age()
unfit models as side effects.
## create a model, which starts out unfitted mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) is_fitted(mod) ## calling 'fit' produces a fitted version mod <- fit(mod) is_fitted(mod) ## calling 'unfit' resets the model mod <- unfit(mod) is_fitted(mod)
## create a model, which starts out unfitted mod <- mod_pois(injuries ~ age + sex + year, data = nzl_injuries, exposure = popn) is_fitted(mod) ## calling 'fit' produces a fitted version mod <- fit(mod) is_fitted(mod) ## calling 'unfit' resets the model mod <- unfit(mod) is_fitted(mod)
Counts of accidental deaths in the USA, by month, for 1973-1978.
usa_deaths
usa_deaths
A tibble with 72 rows and the following columns:
month
: Year and month.
deaths
: Count of deaths.
Reformatted version of
datasets::USAccDeaths
.