md_pattern()
has an additional argument
sort_columns
to provide the option to switch off the
sorting of columns by number of missing values.sum_duration()
: new function to get sum of
computational time across chains, phases, runs, …formula()
now also return the model formula when
add_samples()
is used.JM_imp()
with ordinal longitudinal outcome is not using
the correct version of the linear predictor in the quadrature procedure
approximating the integral in the survival.monitor_params(imps = TRUE)
in survival models
fixed.predDF()
: bugfix for models including auxiliary
variables (which were previously not included into the data)nonprop
: bugfix for non-proportional effects in
covariate modelsadd_samples()
will now result in the
call
element of a JointAI
object being a
list
and no longer a nested list.comp_info
element of fitted JointAI
object
has changed due to the changes in parallel computing, and computational
time is not reported separately for the adaptive phase and the sampling
phase, and separately per chain when parallel computation was used.predict()
is now a lot faster for proportional hazards
models.custom
: new argument in the main analysis functions
that allows the user to replace the JAGS syntax for sub-models with
custom syntax. The argument expects a named list where the names are the
names of the variables for which the custom model will be used. This
feature requires some knowledge of JAGS syntax.append_data_list
: new argument in the main analysis
functions that allows the user to add elements to the list of data that
is passed to JAGS. This may be necessary for custom sub-models.rd_vcov
: new argument in the main analysis functions
that allows the specification of the structure of the random effects
variance-covariance matrices in (multivariate) mixed models (and joint
models).plot_all()
not displaying the variable name
in the message shown for character string variables.set_refcat()
: wasn’t displaying the factor
labels correctlyprint.JointAI
: bugfix for multivariate mixed models
with full variance-covariance matrix of the random effects that had the
same number of random effects for each outcome, for which the printing
of this matrix resulted in an error.rd_vcov()
: new function added to extract the random
effect variance- covariance matrices (posterior means)*_imp()
functions
from within another function that has the model formula as an
argument.data_list
: omit data matrix M_*
from
data_list
if ncol == 0
data_list
: syntax to checking which pos_*
to include can handle the case with multiple grouping variables being on
the same, lowest level; before pos_*
was excluded for only
one of themadd_samples()
: remove unnecessary call to
doFuture::registerDoFuture()
predDF()
bug fix: the parameter for all methods is now
called object
list_models()
now also works for errored JointAI
objectsThis version of JointAI contains some major changes. To extend the package it was necessary to change the internal structure and it was not possible to assure backward compatibility.
betareg_imp()
: beta regressionbetamm_imp()
: beta mixed modellognorm_imp()
: log-normal regression modellognormmm_imp()
: log-normal mixed modelmlogit_imp()
: multinomial logit modelmlogitmm_imp()
: multinomial mixed modelJM_imp()
: joint model for longitudinal and survival
dataIt is now possible to fit hierarchical models with more than one level of grouping, with nested as well as crossed random effects (check the help file) of the main model function for details on how to specify such random effects structures.
This does also apply to survival models, i.e., it is possible to specify a random effects structure to model survival outcomes in data with a hierarchical structure, e.g., in a multi-centre setting.
coxph_imp()
can now handle time-dependent
covariates using last-observation-carried-forward. This
requires to add (1 | <id variable>)
to the model
formula to identify which rows belong to the same subject, and to
specify the argument timevar
to identify the variable that
contains the observation time of the longitudinal measurements.
By providing a list of model formulas it is possible to fit multiple analysis models (of different types) simultaneously. The models can share covariates and it is possible to have the response of one model as covariate in another model (in a sequential manner, however, not circular).
As before, proportional odds are assumed by default for all
covariates of a cumulative logit model. The argument
nonprop
accepts a one-sided formula or a named list of
one-sided formulas in which the covariates are specified for which
non-proportional odds should be assumed.
Additionally, the argument rev
is available to specify a
vector of names of ordinal responses for which the odds should be
inverted. For details, see the the
help file.
lmer_imp()
and glmer_imp()
are aliases for lme_imp()
and glme_imp()
.fixed
and random
) as
well as using specification as in lme4 (with a combined
model formula for fixed and random effects).df_basehaz
in coxph_imp()
and
JM_imp()
allows setting the number of degrees of freedom in
the B-spline basis used to model the baseline hazard.options("contrasts")
is no longer
ignored. For completely observed covariates, any of the contrasts
available in base R are possible and options("contrasts")
is used to determine which contrasts to use. For covariates with missing
values, effect coding (contr.sum
) and dummy coding
(contr.treatment
) are possible. This means that for
completely observed ordered factors the default is
contr.poly
, but for incomplete ordered factors the default
is contr.treatment
.summary()
, the argument
multivariate
to the function GR_crit()
is now
set to FALSE
to avoid issues. The multivariate version can
still be obtained by using GR_crit()
directly.coxph_imp()
and JM_imp()
are monitored automatically when
“analysis_main = TRUE”.get_models()
is no longer exported because
it now requires more input variables and is no longer convenient to use.
To obtain the default specification of the model types use one of the
main functions (*_imp()
), set n.adapt = 0
(and
n.iter = 0
), and obtain the model types as
<mymodel>$models
.list_models()
now returns information on all
sub-models, including the main analysis models (previously it included
only information on covariates).parameters()
has changed. The function
returns a list of matrices, one per analysis model, with information on
the response variable, response category, name of the regression
coefficient and its associated covariate.missinfo = TRUE
in summar()
adds information on the missing values in the data involved in a JointAI
model (number and proportion of complete cases, number and proportion of
missing values per variable).ridge
has changed to
shrinkage
. If shrinkage = "ridge"
, a ridge
prior is used for all regression coefficients in all sub-models. If a
vector of response variable names is provided to shinkage
,
ridge priors are only used for the coefficients in these models.default_hyperpars()
: The default hyper-parameters for
random effects are no longer provided as a function but more
consistently with the hyper-parameters for other model parts, as a
vector (within the list of all hyper-parameters).default_hyperpars()
: the default number of
degrees of freedom in the Wishart distribution used for the inverse of
the random effects covariance matrix is now the number of random effects
+ 1 (was the number of random effects before).seed
in JointAI
is now only local, i.e., in functions in which set.seed()
is called, the random number generator state .Random.seed
before setting the seed is recorded, and re-set to that value on exiting
the function.predDF()
the argument var
has changed
to vars
and expects a formula. This extends the
functionality of predDF()
to let multiple variables
vary.JointAI
object have changed.
Potentially relevant for users:
JointAI
objects now contain information on the
computational time and environment they were run in: the element
comp_info
contains the time-stamp the model was fitted, the
duration of the computation, the JointAI version number and the R
session info.jagsmodel
.warn
and mess
now also
affect the output of rjags.future::plan()
for how the
“future” should be handled. As a consequence, the arguments
parallel
and n.cores
are no longer used.
Information on the setting that was used with regards to parallel
computation is returned in a JointAI object
via
comp_list$future
.clmm
covariate
model when there are no baseline covariates in the modelnewdata
for predict()
that does not
contain the outcome variableadd_samples()
: calculation of end()
of
MCMC samples fixedadd_samples()
when used in parallel with
thinning fixedpredict()
can now handle newdata
with
missing outcome values; predicted values for cases with missing
covariates are NA
(prediction with incomplete covariates is
planned to be implemented in the future)get_MIdat()
and
plot_imp_distr()
when only one variable has missing
valuesncores
has changed to n.cores
for
consistency with n.iter
, n.chains
, etc.coxph_imp()
does no longer use a counting process
implementation but uses the likelihood in JAGS directly via the zeros
trickpredict()
now has an argument length
to
change number of evaluation pointssummary()
, predict()
,
traceplot()
, densplot()
,
GR_crit()
, MC_error()
now have an argument
exclude_chains
that allows to specify chains that should be
omittedcitation()
now refers to a manuscript on arXivglmm_lognorm
available to impute level-1 covariates
with a log-normal mixed modelresiduals()
and plot()
available
for (some of the) main analysis types (details see documentation)models
added to get_models()
so
that the user can specify to also include models for complete covariates
(which are then positioned in the sequence of models according to the
systematic used in JointAI). Specification of a model
not needed for imputation prints a notification.JointAI
objects (most types) now also include residuals
and fitted values (so far, only using fixed effects)print.JointAI
fixedXl
is no longer included in
data_list
when it is not used in the modelsubset
when specified as vectorsummary
: range of iterations is printed
correctly now when argument end
is usedsummary()
calls GR_crit()
with argument
autoburnin = FALSE
unless specified otherwise via
...
inits
is specified as a function, the function is
evaluated and the resulting list passed to JAGS (previously the function
was passed to JAGS)simong
and simWide
have
changed (more variables, less subjects)imp_pars = TRUE
(when user specified via
monitor_params
or subset
)survreg_imp
the sign of the regression coefficient
is now opposite to match the one from survreg
meth
has changed to
models
add_samples()
: bug that copied the last chain to all
other chains fixedXc
, so
that specification of functions of covariates in auxiliary variables
works betterdensplot()
issue (all plots
showed all lines) fixedplot_all()
, densplot()
, and
traceplot()
limit the number of plots on one page to 64
when rows and columns of the layout are not user specified (to avoid the
‘figure margins too large’ error)longDF
example data: new version containing
complete and incomplete categorical longitudinal variables (and variable
names L1 and L2 changed to c1 and c2)list_impmodels()
changed to
list_models()
(but list_impmodels()
is kept as
an alias for now)clm_imp()
and clmm_imp()
: new functions
for analysis of ordinal (mixed) modelscoxph_imp()
: new function to fit Cox proportional
hazards models with incomplete (baseline) covariatesno_model
allows to specify names of completely
observed variables for which no model should be specified (e.g., “time”
in a mixed model)ridge = TRUE
allows to use shrinkage priors on the precision of the regression
coefficients in the analysis modelplot_all()
can now handle variables from classes
Date
and POSIXt
parallel
allows different MCMC chains to
be sampled in parallelncores
allows to specify the maximum
number of cores to be usedseed
added for reproducible results; also
a sampler (.RNG.name
) and seed value for the sampler
(.RNG.seed
) are set or added to user-provided initial
values (necessary for parallel sampling and reproducibility of
results)plot_imp_distr()
: new function to plot distribution of
observed and imputed valuesRinvD
is no longer selected to be monitored in random
intercept model (RinvD
is not used in such a model)summary()
: reduced default number of digitsmeth
now uses default values if only specified
for subset of incomplete variablesget_MIdat()
: argument minspace
added to
ensure spacing of iterations selected as imputationsdensplot()
: accepts additional options, e.g.,
lwd
, col
, …list_models()
replaces the function
list_impmodels()
(which is now an alias)coef()
method added for JointAI
object and
summary.JointAI
objectconfint()
method added for JointAI
objectprint()
method added for JointAI
objectsurvreg_imp()
added to perform analysis of parametric
(Weibull) survival modelsglme_imp()
added to perform generalized linear mixed
modellingtraceplot()
, densplot()
: specification of
nrow
AND ncol
possible; fixed bug when only
nrow
specifiedcontrast.arg
that now
in some cases cause error# JointAI 0.3.2 |
---|
# JointAI 0.3.1 |
## Bug fixes * plot_all()
uses correct level-2 %NA in title * simWide : case with no
observed bmi values removed * traceplot() ,
densplot() : ncol and nrow now
work with use_ggplot = TRUE * traceplot() ,
densplot() : error in specification of nrow
fixed * densplot() : use of color fixed * functions with
argument subset now return random effects covariance matrix
correctly * summary() displays output with row name when
only one node is returned and fixed display of D matrix *
GR_crit() : Literature reference corrected *
predict() : prediction with varying factor fixed * no
scaling for variables involved in a function to avoid problems with
re-scaling |
## Minor changes * plot_all()
uses xpd = TRUE when printing text for character variables
* list_impmodels() uses line break when output of predictor
variables exceeds getOption("width") *
summary() now displays tail-probabilities for off-diagonal
elements of D * added option to show/hide constant effects
of auxiliary variables in plots * predict() : now also
returns newdata extended with prediction |
monitor_params
is now checked to avoid problems when
only part of the main parameters is selectedmd.pattern()
now uses ggplot, which scales better than
the previous versionlm_imp()
, glm_imp()
and
lme_imp()
now ask about overwriting a model fileanalysis_main = T
stays selected when other parameters
are followed as wellget_MIdat()
: argument include
added to
select if original data are included and id variable .id
is
added to the datasetsubset
argument uses same logit as
monitor_params
argumentlm_imp()
, glm_imp()
and
lme_imp()
now take argument trunc
in order to
truncate the distribution of incomplete variablessummary()
now omits auxiliary variables from the
outputimp_par_list
is now returned from JointAI modelscat_vars
is no longer returned from
lm_imp()
, glm_imp()
and
lme_imp()
, because it is contained in
Mlist$refs
plot_all()
function addeddensplot()
and traceplot()
optional with
ggplotdensplot()
option to combine chains before
plottingNHANES
, simLong
and
simWide
addedlist_impmodels
to print information on the imputation
models and hyper-parametersparameters()
added to display the parameters to be/that
were monitoredset_refcat()
added to guide specification of reference
categoriesmd_pattern()
: does not generate duplicate plot any
moreget_MIdat()
: imputed values are now filled in in the
correct orderget_MIdat()
: variables imputed with
lognorm
are now included when extracting an imputed
datasetget_MIdat()
: imputed values of transformed variables
are now included in imputed datasetsmeth
argumentmd.pattern()
: adaptation to new version of
md.pattern()
from the mice packageNaN
to NA
gamma
and beta
imputation methods
implemented