This function can be used as part of dynamiteformula()
to define
a common latent factor component. The latent factor is modeled as a spline
similarly as a time-varying intercept, but instead of having equal effect on
each group, there is an additional loading variable for each group so that
in the linear predictor we have a term \(\lambda_i \psi_t\) for each
group \(i\). In order to keep the full factor loadings \(\lambda\),
the latent factor \(\psi\) and the full model identifiable, some
restrictions are added to the model. Details will be available in an
upcoming paper. This component should be treated as experimental feature.
Usage
lfactor(
responses = NULL,
nonzero_lambda = TRUE,
correlated = TRUE,
noncentered_psi = FALSE
)
Arguments
- responses
[
character()
]
Names of the responses that the factor should affect. Default is all responses defined withobs
except categorical responses, which do not (yet) support the factor component.- nonzero_lambda
[
logical()
]
IfTRUE
(the default), assumes that the mean of factor loadings is nonzero or not. Should be a logical vector matching the length ofresponses
or a single logical value in caseresponses
isNULL
. See details.- correlated
[
logical()
]
IfTRUE
(the default), the latent factors are assumed to be correlated between channels.- noncentered_psi
[
logical(1)
]
IfTRUE
, uses a noncentered parametrization for spline coefficients of all the factors. The number of knots is basedsplines()
call.
See also
Model formula construction
dynamite()
,
dynamiteformula()
,
lags()
,
random_spec()
,
splines()
Examples
data.table::setDTthreads(1) # For CRAN
# three channel model with common factor affecting for responses x and y
obs(y ~ 1, family = "gaussian") +
obs(x ~ 1, family = "poisson") +
obs(z ~ 1, family = "gaussian") +
lfactor(
responses = c("y", "x"), nonzero_lambda = c(TRUE, FALSE),
correlated = TRUE, noncentered_psi = FALSE
)
#> Family Formula
#> y gaussian y ~ 1
#> x poisson x ~ 1
#> z gaussian z ~ 1