updates
This is an old revision of the document!
Table of Contents
Package Updates
On this page, you can find a description of the (recent) updates to the metafor package. Older updates are archived here.
Version 2.4-0 (2020-03-19)
- version jump to 2.4-0 for CRAN release (from now on, even minor numbers for CRAN releases, odd numbers for development versions)
- the various
forest()
functions gainheader
argument escalc()
gainsinclude
argument- setting
verbose=3
in model fitting functions setsoptions(warn=1)
forest.rma()
andforest.default()
now throw informative errors when misusingorder
andsubset
arguments- fixed failing tests due to the
stringsAsFactors=FALSE
change in the upcoming version of R print.infl.rma.uni()
gainsinfonly
argument, to only show the influential studies- removed
MASS
fromSuggests
(no longer needed) - argument
btt
can now also take a string to grep for - added
optimParallel
as possible optimizer inrma.mv()
- added (for now undocumented) option to fit models in
rma.glmm()
via theGLMMadaptive
package (instead oflme4
); to try this, use:control=list(package="GLMMadaptive")
- started to use numbering scheme for 'devel' version (the number after the dash indicates the devel version)
- added
contrmat()
function (for creating a matrix that indicates which groups have been compared against each other in each row of a dataset) - added
to.wide()
function (for restructuring long format datasets into the wide format needed for contrast-based analyses) I^2
andH^2
are also shown in output for fixed-effects models- argument
grid
inbaujat()
can now also be a color name - added (for now undocumented)
time
argument to more functions that are computationally expensive - added (for now undocumented)
textpos
argument to the various forest functions - added a new dataset (
dat.graves2010
) - added more tests
Version 2.1-0 (2019-05-13)
- added
formula()
method for objects of classrma
llplot()
now also allows formeasure="GEN"
; also, the documentation and y-axis label have been corrected to indicate that the function plots likelihoods (not log likelihoods)confint.rma.mv()
now returns an object of classlist.confint.rma
when obtaining CIs for all variance and correlation components of the model; added correspondingprint.list.confint.rma()
function- moved
tol
argument inpermutest()
tocontrol
and renamed the argument tocomptol
- added
PMM
andGENQM
estimators in rma.uni() - added
vif()
function to get variance inflation factors - added
.glmulti
object for making the interaction with glmulti easier - added
reporter()
andreporter.rma.uni()
for dynamically generating analysis reports for objects of classrma.uni
- output is now styled/colored when
crayon
package is loaded (this only works on a 'proper' terminal with color support; also works in RStudio) - overhauled
plot.gosh.rma()
; whenout
is specified, it now shows two distributions, one for the values when the outlier is included and one for the values when for outlier is excluded; dropped thehcol
argument and addedborder
argument - refactored
influence.rma.uni()
to be more consistent internally with other functions;print.infl.rma.uni()
andplot.infl.rma.uni()
adjusted accordingly; functionscooks.distance.rma.uni()
,dfbetas.rma.uni()
, andrstudent.rma.uni()
now callinfluence.rma.uni()
for the computations rstudent.rma.uni()
now computes the SE of the deleted residuals in such a way that it will yield identical results to a mean shift outlier model even when that model is fitted withtest="knha"
rstandard.rma.uni()
gainstype
argument, and can now also compute conditional residuals (it still computes marginal residuals by default)cooks.distance.rma.mv()
gainscluster
argument, so that the Cook's distances can be computed for groups of estimatescooks.distance.rma.mv()
gainsparallel
,ncpus
, andcl
arguments and can now make use of parallel processingcooks.distance.rma.mv()
should be faster by using the estimates from the full model as starting values when fitting the models with the ith study/cluster deleted from the datasetcooks.distance.rma.mv()
gainsreestimate
argument; when set toFALSE
, variance/correlation components are not reestimatedrstandard.rma.mv()
gainscluster
argument for computing cluster-level multivariate standardized residuals- added
rstudent.rma.mv()
anddfbetas.rma.mv()
- smarter matching of elements in
newmods
(when using a named vector) inpredict()
that also works for models with interactions (thanks to Nicole Erler for pointing out the problem) rma.uni()
andrma.mv()
no longer issue (obvious) warnings when user constrainsvi
orV
to 0 (i.e.,vi=0
orV=0
, respectively)rma.mv()
does more intelligent filtering based onNAs
inV
matrixrma.mv()
now ensures strict symmetry of any (var-cov or correlation) matrices specified via theR
argument- fixed
rma.mv()
so checks onR
argument run as intended; also fixed an issue when multiple formulas with slashes are specified viarandom
(thanks to Andrew Loignon for pointing out the problem) - suppressed showing calls on some warnings/errors in
rma.mv()
rma.mv()
now allows for a continuous-time autoregressive random effects structure (struct="CAR"
) and various spatial correlation structures (struct="SPEXP"
,"SPGAU"
,"SPLIN"
,"SPRAT"
, and"SPSPH"
)rma.mv()
now allows forstruct="GEN"
which models correlated random effects for any number of predictors, including continuous ones (i.e., this allows for 'random slopes')- in the various
forest()
functions, whenoptions(na.action="na.pass")
oroptions(na.action="na.exclude")
and an annotation containsNA
, this is now shown as a blank (instead ofNA [NA, NA]
) - the various
forest()
andaddpoly()
functions gain afonts
argument - the various
forest()
functions gain atop
argument - the various
forest()
functions now show correct point sizes when the weights of the studies are exactly the same forest.cumul.rma()
gains acol
argumentfunnel.default()
andfunnel.rma()
can now take vectors as input for thecol
andbg
arguments (and also forpch
); both functions also gain alegend
argumentaddpoly()
functions can now also show prediction interval bounds- removed 'formula interface' from
escalc()
; until this actually adds some kind of extra functionality, this just makesescalc()
more confusing to use escalc()
can now compute the coefficient of variation ratio and the variability ratio for pre-post or matched designs ("CVRC"
,"VRC"
)escalc()
does a bit more housekeeping- added (currently undocumented) arguments
onlyo1
,addyi
, andaddvi
toescalc()
that allow for more flexibility when computing certain bias corrections and when computing sampling variances for measures that make use of theadd
andto
arguments escalc()
now setsadd=0
for measures where the use of such a bias correction makes little sense; this applies to the following measures:"AS"
,"PHI"
,"RTET"
,"IRSD"
,"PAS"
,"PFT"
,"IRS"
, and"IRFT"
; one can still force the use of the bias correction by explicitly setting theadd
argument to some non-zero value- added
clim
argument tosummary.escalc()
- added
ilim
argument totrimfill()
labbe()
gainslty
argumentlabbe()
now (invisibly) returns a data frame with the coordinates of the points that were drawn (which may be useful for manual labeling of points in the plot)- added a print method for
profile.rma
objects profile.rma.mv()
now check whether any of the profiled log-likelihood values is larger than the log-likelihood of the fitted model (using numerical tolerance given bylltol
) and issues a warning if soprofile.rma.uni()
,profile.rma.mv()
, andplot.profile.rma()
gaincline
argument;plot.profile.rma()
gainsxlim
,ylab
, andmain
arguments- fixed an issue with
robust.rma.mv()
when the model was fitted withsparse=TRUE
(thanks to Roger Martineau for noting the problem) - various method functions (
fitted()
,resid()
,predict()
, etc.) behave in a more consistent manner when model omitted studies with missings predict.rma()
gainsvcov
argument; when set toTRUE
, the variance-covariance matrix of the predicted values is also returnedvcov.rma()
can now also return the variance-covariance matrix of the fitted values (type="fitted"
) and the residuals (type="resid"
)- added
`$<-`
andas.matrix()
methods forlist.rma
objects - fixed error in
simulate.rma()
that would generate too many samples forrma.mv
models - added undocumented argument
time
to all model fitting functions; if set toTRUE
, the model fitting time is printed - added more tests (also for parallel operations); also, all tests updated to use proper tolerances instead of rounding
- reorganized the documentation a bit
Version 2.0-0 (2017-06-22)
- added
simulate()
method forrma
objects; addedMASS
toSuggests
(since simulating forrma.mv
objects requiresmvrnorm()
fromMASS
) cooks.distance.rma.mv()
now works properly even when there are missing values in the dataresiduals()
gainstype
argument and can compute Pearson residuals- the
newmods
argument inpredict()
can now be a named vector or a matrix/data frame with column names that get properly matched up with the variables in the model - added
ranef.rma.mv()
for extracting the BLUPs of the random effects forrma.mv
models - all functions that repeatedly refit models now have the option to show a progress bar
- added
ranktest.default()
, so user can now pass the outcomes and corresponding sampling variances directly to the function - added
regtest.default()
, so user can now pass the outcomes and corresponding sampling variances directly to the function funnel.default()
gainssubset
argumentfunnel.default()
andfunnel.rma()
gaincol
andbg
argumentsplot.profile.rma()
gainsylab
argument- more consistent handling of
robust.rma
objects - added location-scale model
- added a print method for
rma.gosh
objects - the (log) relative risk is now called the (log) risk ratio in all help files, plots, code, and comments
escalc()
can now compute outcome measures based on paired binary data ("MPRR"
,"MPOR"
,"MPRD"
,"MPORC"
, and"MPPETO"
)escalc()
can now compute (semi-)partial correlation coefficients ("PCOR"
,"ZPCOR"
,"SPCOR"
)escalc()
can now compute measures of variability for single groups ("CVLN"
,"SDLN"
) and for the difference in variability between two groups ("CVR"
,"VR"
); also the log transformed mean ("MNLN"
) has been added for consistencyescalc()
can now compute the sampling variance formeasure="PHI"
for studies using stratified sampling (vtpye="ST"
)- the
`[`
method forescalc
objects now properly handles theni
andslab
attributes and does a better job of cleaning out superfluous variable name information - added
rbind()
method forescalc
objects - added
as.data.frame()
method forlist.rma
objects - added a new dataset (
dat.pagliaro1992
) for another illustration of a network meta-analysis - added a new dataset (
dat.laopaiboon2015
) on the effectiveness of azithromycin for treating lower respiratory tract infections rma.uni()
andrma.mv()
now check if the ratio of the largest to smallest sampling variance is very large; results may not be stable then (and very large ratios typically indicate wrongly coded data)- model fitting functions now check if extra/superfluous arguments are specified via
...
and issues are warning if so - instead of defining own generic
ranef()
, importranef()
fromnlme
- improved output formatting
- added more tests (but disabled a few tests on CRAN to avoid some issues when R is compiled with
--disable-long-double
) - some general code cleanup
- renamed diagram_metafor.pdf vignette to just diagram.pdf
- minor updates in the documentation
Version 1.9-9 (2016-09-25)
- started to use git as version control system, GitHub to host the repository (https://github.com/wviechtb/metafor) for the development version of the package, Travis CI as continuous integration service (https://travis-ci.org/wviechtb/metafor), and Codecov for automated code coverage reporting (https://codecov.io/github/wviechtb/metafor)
- argument
knha
inrma.uni()
and argumenttdist
inrma.glmm()
andrma.mv()
are now superseded by argumenttest
in all three functions; for backwards compatibility, theknha
andtdist
arguments still work, but are no longer documented rma(yi, vi, weights=1, test="knha")
now yields the same results asrma(yi, vi, weighted=FALSE, test="knha")
(but use of the Knapp and Hartung method in the context of an unweighted analysis remains an experimental feature)- one can now pass an
escalc
object directly torma.uni()
, which then tries to automatically determine theyi
andvi
variables in the data frame (thanks to Christian Röver for the suggestion) escalc()
can now also be used to convert a regular data frame to anescalc
object- for
measure="UCOR"
, the exact bias-correction is now used (instead of the approximation); whenvtype="UB"
, the exact equation is now used to compute the unbiased estimate of the variance of the bias-corrected correlation coefficient; hencegsl
is now a suggested package (needed to compute the hypergeometric function) and is loaded when required cooks.distance()
now also works withrma.mv
objects; and since model fitting can take some time, an option to show a progress bar has been added- fixed an issue with
robust.rma.mv()
throwing errors when the model was fitted withsparse=TRUE
- fixed an error with
robust.rma.mv()
when the model was fitted with user-defined weights (or a user-defined weight matrix) - added
ranef()
for extracting the BLUPs of the random effects (only forrma.uni
objects at the moment) - reverted back to the pre-1.1-0 way of computing p-values for individual coefficients in
permutest.rma.uni()
, that is, the p-value is computed withmean(abs(z_perm) >= abs(z_obs) - tol)
(wheretol
is a numerical tolerance) permutest.rma.uni()
gainspermci
argument, which can be used to obtain permutation-based CIs of the model coefficients (note that this is computationally very demanding and may take a long time to complete)rma.glmm()
continues to work even when the saturated model cannot be fitted (although the tests for heterogeneity are not available then)rma.glmm()
now allows control over the arguments used formethod.args
(viacontrol=list(hessianCtrl=list(...))
) passed tohessian()
(from thenumDeriv
package) when usingmodel="CM.EL"
andmeasure="OR"
- in
rma.glmm()
, defaultmethod.args
value forr
passed tohessian()
has been increased to 16 (while this slows things down a bit, this appears to improve the accuracy of the numerical approximation to the Hessian, especially when tau^2 is close to 0) - the various
forest()
andaddpoly()
functions now have a new argument calledwidth
, which provides manual control over the width of the annotation columns; this is useful when creating complex forest plots with a monospaced font and we want to ensure that all annotations are properly lined up at the decimal point - the annotations created by the various
forest()
andaddpoly()
functions are now a bit more compact by default - more flexible
efac
argument in the variousforest()
functions - trailing zeros in the axis labels are now dropped in forest and funnel plots by default; but trailing zeros can be retained by specifying a numeric (and not an integer) value for the
digits
argument - added
funnel.default()
, which directly takes as input a vector with the observed effect sizes or outcomes and the corresponding sampling variances, standard errors, and/or sample sizes - added
plot.profile.rma()
, a plot method for objects returned by theprofile.rma.uni()
andprofile.rma.mv()
functions - simplified
baujat.rma.uni()
,baujat.rma.mh()
, andbaujat.rma.peto()
tobaujat.rma()
, which now handles objects of classrma.uni
,rma.mh
, andrma.peto
baujat.rma()
gains argumentsymbol
for more control over the plotting symbollabbe()
gains agrid
argument- more logical placement of labels in
qqnorm.rma.uni()
,qqnorm.rma.mh()
, andqqnorm.rma.peto()
functions (and more control thereof) qqnorm.rma.uni()
gainslty
argument- added
gosh.rma()
andplot.gosh.rma()
for creating GOSH (i.e., graphical display of study heterogeneity) plots based on Olkin et al. (2012) - in the (rare) case where all observed outcomes are exactly equal to each other,
test="knha"
(i.e.,knha=TRUE
) inrma()
now leads to more appropriate results - updated datasets so those containing precomputed effect size estimates or observed outcomes are already declared to be
escalc
objects - added new datasets (
dat.egger2001
anddat.li2007
) on the effectiveness of intravenous magnesium in acute myocardial infarction methods
package is now underDepends
(in addition toMatrix
), so thatrma.mv(..., sparse=TRUE)
always works, even under Rscript- some general code cleanup
- added more tests (and used a more consistent naming scheme for tests)
Version 1.9-8 (2015-05-28)
- due to more stringent package testing, it is increasingly difficult to ensure that the package passes all checks on older versions of R; from now on, the package will therefore require, and be checked under, only the current (and the development) version of R
- added
graphics
,grDevices
, andmethods
to Imports (due to recent change in how CRAN checks packages) - the
struct
argument forrma.mv()
now also allows for"ID"
and"DIAG"
, which are identical to the"CS"
and"HCS"
structures, but with the correlation parameter fixed to 0 - added
robust()
for (cluster) robust tests and confidence intervals forrma.uni
andrma.mv
models (this uses a robust sandwich-type estimator of the variance-covariance matrix of the fixed effects along the lines of the Eicker-Huber-White method) confint()
now works for models fitted with therma.mv()
function; for variance and correlation parameters, the function provides profile likelihood confidence intervals; the output generated by theconfint()
function has been adjusted in general to make the formatting more consistent across the different model types- for objects of class
rma.mv
,profile()
now provides profile plots for all (non-fixed) variance and correlation components of the model when no component is specified by the user (via thesigma2
,tau2
,rho
,gamma2
, orphi
arguments) - for
measure="MD"
andmeasure="ROM"
, one can now choose betweenvtype="LS"
(the default) andvtype="HO"
; the former computes the sampling variances without assuming homoscedasticity, while the latter assumes homoscedasticity - multiple model objects can now be passed to the
fitstats()
,AIC()
, andBIC()
functions - check for duplicates in the
slab
argument is now done *after* any subsetting is done (as suggested by Michael Dewey) rma.glmm()
now again works when usingadd=0
, in which case some of the observed outcomes (e.g., log odds or log odds ratios) may beNA
- when using
rma.glmm()
withmodel="CM.EL"
, the saturated model (used to compute the Wald-type and likelihood ratio tests for the presence of (residual) heterogeneity) often fails to converge; the function now continues to run (instead of stopping with an error) and simply omits the test results from the output - when using
rma.glmm()
withmodel="CM.EL"
and inversion of the Hessian fails via the Choleski factorization, the function now makes another attempt via the QR decomposition (even when this works, a warning is issued) - for
rma.glmm()
, BIC and AICc values were switched around; corrected - more use of
suppressWarnings()
is made when functions repeatedly need to fit the same model, such ascumul()
,influence()
, andprofile()
; that way, one does not get inundated with the same warning(s) - some (overdue) updates to the documentation
Older Versions
Older updates are archived here.
updates.1593155327.txt.gz · Last modified: 2020/06/26 07:08 by Wolfgang Viechtbauer