Store the parameters of a fitted multinomial logistic regression model. The model is used to predict probabilities of \(K\) classes, which represent the probability of transitioning to particular health state in a discrete time state transition model. Can be used as an element of a params_mlogit_list to parameterize a CohortDtstmTrans object.

params_mlogit(coefs)

Arguments

coefs

A 3D array of stacked matrices containing samples of the regression coefficients under sampling uncertainty. May also be a list of objects (e.g., data frames) that can be coerced into matrices with as.matrix(). Each matrix must have the same number of columns and the number of matrices must be equal to \(K-1\).

Value

An object of class params_mlogit, which is a list containing coefs

and n_samples, where n_samples is equal to the number of rows in each element of coefs. The coefs element is always converted into a 3D array of stacked matrices.

Details

Multinomial logit models are used to predict the probability of membership for subject \(i\) in each of \(K\) classes as a function of covariates: $$Pr(y_i = c) = \frac{e^{\beta_c x_i}}{\sum_{k=1}^K e^{\beta_k x_i}}$$

Examples

# Consider a sick-sicker model and model transitions from the sick state

## We can instantiate from a list of data frames
params <- params_mlogit(
  coefs = list(
    ### Transition from sick to sicker
    sicker = data.frame(
      intercept = c(-0.33, -.2, -.15),
      treat = c(log(.75), log(.8), log(.9))
    ),
    
   ### Transition from sick to death
    death = data.frame(
      intercept = c(-1, -1.2, -.5),
      treat = c(log(.6), log(.65), log(.55))
    )
  )
)
summary(params)
#>        to      term       mean         sd       2.5%      97.5%
#>    <char>    <char>      <num>      <num>      <num>      <num>
#> 1: sicker intercept -0.2266667 0.09291573 -0.3235000 -0.1525000
#> 2: sicker     treat -0.2053954 0.09244748 -0.2844551 -0.1112497
#> 3:  death intercept -0.9000000 0.36055513 -1.1900000 -0.5250000
#> 4:  death     treat -0.5131485 0.08355126 -0.5934864 -0.4347851
params
#> A "params_mlogit" object
#> 
#> Summary of coefficients:
#>        to      term       mean         sd       2.5%      97.5%
#>    <char>    <char>      <num>      <num>      <num>      <num>
#> 1: sicker intercept -0.2266667 0.09291573 -0.3235000 -0.1525000
#> 2: sicker     treat -0.2053954 0.09244748 -0.2844551 -0.1112497
#> 3:  death intercept -0.9000000 0.36055513 -1.1900000 -0.5250000
#> 4:  death     treat -0.5131485 0.08355126 -0.5934864 -0.4347851
#> 
#> Number of parameter samples: 3
#> Number of transitions: 2

## We can also instantiate from an array
coefs_sicker <- data.frame(
  intercept = c(-0.33, -.2, -.15),
  treat = c(log(.75), log(.8), log(.9))
)
coefs_death <- data.frame(
  intercept = c(-1, -1.2, -.5),
  treat = c(log(.6), log(.65), log(.55))
)

params2 <- params_mlogit(
  coefs <- array(
    data = c(as.matrix(coefs_sicker),
             as.matrix(coefs_death)),
    dim = c(3, 2, 2),
    dimnames = list(NULL, c("intercept", "treat"), c("sicker", "death"))
  )
)
params2
#> A "params_mlogit" object
#> 
#> Summary of coefficients:
#>        to      term       mean         sd       2.5%      97.5%
#>    <char>    <char>      <num>      <num>      <num>      <num>
#> 1: sicker intercept -0.2266667 0.09291573 -0.3235000 -0.1525000
#> 2: sicker     treat -0.2053954 0.09244748 -0.2844551 -0.1112497
#> 3:  death intercept -0.9000000 0.36055513 -1.1900000 -0.5250000
#> 4:  death     treat -0.5131485 0.08355126 -0.5934864 -0.4347851
#> 
#> Number of parameter samples: 3
#> Number of transitions: 2