On this page, you can find a description of the (recent) updates to the metafor package. Older updates are archived here.
steps
argument in the various profile()
functions can now also be a numeric vector to specify for which parameter values the likelihood should be evaluatedescalc()
: "SMN"
for the single-group standardized mean / single-group standardized mean difference, "SMCRP"
for the standardized mean change using raw score standardization with pooled standard deviations, and "SMCRPH"
for the standardized mean change using raw score standardization with pooled standard deviations and heteroscedastic population variances at the two measurement occasions"SMDH"
, "SMD1H"
, and "SMCRH"
was slightly adjusted for consistencyplot.gosh.rma()
, can also set het="tau"
(to plot the square root of tau^2 as the measure of heterogeneity)forest()
functions, argument ylim
can now only be a single value to specify the lower bound (while the upper bound is still set automatically)forest()
and regplot()
, observation limits set via olim
are now properly applied to all elementsselmodel()
selmodel()
no longer stops with an error when one or more intervals defined by the steps
argument do not contain any observed p-values (instead a warning is issued and model fitting proceeds, but may fail)decreasing
argument to selmodel()
for enforcing that the delta estimates must be a monotonically decreasing function of the p-values in the step function modelpval
to selmodel()
for passing p-values directly to the function (doing this is highly experimental)getmfopt()
and setmfopt()
functions for getting and setting package options and made some of the options more flexibleweighted
from fsn()
(whether weighted or unweighted averages are used in Orwin's method is now simply determined by whether sampling variances are specified or not); added type="General"
to fsn()
as a generalization of the Orwin and Rosenberg methods (that allows for a fail-safe N calculation based on a random-effects model); can now pass an rma
object to the fsn()
functionsetmfopt(theme="auto")
)tabfig
to the various forest()
functions, for easily setting the annosym
argument to an appropriate vector for exactly aligning numbers (when using a matching font)vccon
argument to rma.mv()
for setting equality constraints on variance/correlation componentsreplace
argument in conv.2x2()
, conv.delta()
, conv.fivenum()
, and conv.wald()
can now also be a logicalsummary.matreg()
and print.summary.matreg()
methods for including additional statistics in the output ($R^2$ and the omnibus test) and added coef.matreg()
and vcov.matreg()
extractor functionsfmtp()
, fmtx()
, and fmtt()
gain a quote
argument, which is set to FALSE
by default"PCOR"
, "ZPCOR"
, "SPCOR"
, and "ZSPCOR"
, argument mi
in escalc()
now refers to the total number of predictors in the regression models (i.e., also counting the focal predictor of interest)"R2"
and "ZR2"
to escalc()
addpoly.default()
and addpoly.rma.predict()
gain a constarea
argument (for the option to draw the polygons with a constant area)plot.rma.uni.selmodel()
gains a shade
argument (for shading the confidence interval region)plot.permutest.rma.uni()
gains a legend
argumentvcalc()
gains a sparse
argumentaggregate.escalc
gains var.names
argumentlegend
argument more flexible in funnel()
append
argument more flexible in to.long()
par("fg")
; as a result, one can now create plots with a dark background and light plotting colorsxlab
in the various forest()
functions (for adding labels at the ends of the x-axis limits)xlim
in the various forest()
functions; also, argument ilab.xpos
is now optional when using the ilab
argumentshade
and colshade
arguments to the various forest()
functionsforest()
functions no longer enforce that xlim
must be at least as wide as alim
link
argument to rma.glmm()
rma.glmm()
with measure="OR", model="CM.EL", method="ML"
now treats tau^2 values below 1e-04 effectively as zero before computing the standard errors of the fixed effects; this helps to avoid numerical problems in approximating the Hessian; similarly, selmodel()
now treats tau^2 values below 1e-04 or min(vi/10) effectively as zero before computing the standard errorsSMCC
, can now specify d-values, t-test statistics, and p-values via arguments di
, ti
, and pi
level
argumentconv.2x2()
function for reconstructing the cell frequencies in 2x2 tables based on other summary statisticsconv.wald()
function for converting Wald-type confidence intervals and test statistics to sampling variancesconv.fivenum()
function for estimating means and standard deviations from five-number summary valuesconv.delta()
function for transforming observed effect sizes or outcomes and their sampling variances using the delta methodemmprep()
function to create a reference grid for use with the emmeans()
function from the package of the same namefmtp()
, fmtx()
, and fmtt()
numDeriv
moved from Suggests
to Depends
model.matrix.rma()
gains asdf
argumentvcalc()
(values for obs
and type
were taken directly as indices instead of using them as identifiers)vif()
when sim=TRUE
by reshuffling only the data needed in the model matrix; due to some edge cases, the simulation approach cannot be used when some redundant predictors were dropped from the original model; and when redundancies occur after reshuffling the data, the simulated (G)VIF value(s) are now set to Inf
instead of NA
selmodel()
gains type='trunc
' and type='truncest
' models (the latter should be considered experimental)exact="i"
option in permutest()
(to just return the number of iterations required for an exact permutation test)escalc()
now provides more informative error messages when not specifying all required arguments to compute a particular measure"ZPHI"
, "ZTET"
, "ZPB"
, "ZBIS"
, and "ZSPCOR"
to escalc()
(but note that Fisher's r-to-z transformation is not a variance-stabilizing transformation for these measures)ZPCOR
is now calculated with 1/(ni-mi-3)
(instead of 1/(ni-mi-1)
), which provides a better approximation in small samples (and analogous to how the variance of ZCOR
is calculated with 1/(ni-3)
)measure="SMD"
, one can now also use arguments di
and ti
to specify d-values and t-test statistics for measures RPB
, RBIS
, D2ORN
, and D2ORL
in escalc()
COR
, UCOR
, and ZCOR
, can now use argument ti
to specify t-test statistics in escalc()
PCOR
, ZPCOR
, SPCOR
, and ZSPCOR
) via argument pi
(the sign of the p-value is taken to be the sign of the measure)ri
for measures PCOR
, ZPCOR
, SPCOR
, and ZSPCOR
rcalc()
, it now orders the elements (columnwise) based on the lower triangular part of the matrix, not the upper one (which is more consistent with what matreg()
expects as input when using the V
argument)Rcgmin
and Rvmmin
are now available in rma.uni()
, rma.mv()
, rma.glmm()
, and selmodel()
funnel.default()
, funnel.rma()
, and regplot.rma()
gain slab
argumentvif()
was completely refactored and gains reestimate
, sim
, and parallel
arguments; added as.data.frame.vif.rma()
and plot.vif.rma()
methodsplot.permutest.rma.uni()
function sets the y-axis limits automatically and in a smarter way when also drawing the reference/null distribution and the density estimatebtt
in anova.rma()
; added print.list.anova.rma()
to print the resulting objectas.data.frame.anova.rma()
and as.data.frame.list.anova.rma()
methodslink="identity"
) in rma.uni()
when fitting location-scale models (although this will often lead to estimation problems); added solnp()
as an additional optimizer for this casenloptr
and constrOptim.nl
(the latter from the alabama
package) are now available in rma.uni()
for location-scale models when using an identity linkSMD1H
to escalc()
measure="SMD"
, escalc()
now also allows the user to specify d-values and t-test statistics via arguments di
and ti
, respectivelyaggregate.escalc()
gains addk
argument"RR"
, "RD"
, "PLN"
, and "PR"
to rma.glmm()
(but using these measures will often lead to estimation problems)replmiss()
gains data
argumentcumul()
functions also store data, so that arguments ilab
, col
, pch
, and psize
in the forest.cumul.rma()
function can look for variables thereinmetafor
output due to the use of a zero-width spacemisc-models
, misc-recs
, and misc-options
help pagesas.data.frame.confint.rma()
and as.data.frame.list.confint.rma
methodspermutest()
can now also do permutation tests for location-scale models; it also always returns the permutation distributions; hence, argument retpermdist
was removedplot.permutest.rma.uni()
function to plot the permutation distributionsregtest()
, ranktest()
, and tes()
to single functions instead of using generics and methods; this way, a data
argument could be addedvcalc()
and blsplit()
functionsrobust()
gains clubSandwich
argument; if set to TRUE
, the methods from the clubSandwich
package (https://cran.r-project.org/package=clubSandwich) are used to obtain the cluster-robust results; anova.rma()
and predict.rma()
updated to work appropriately in this caserobust()
are no longer printed with print.robust.rma()
but with the print methods print.rma.uni()
and print.rma.mv()
anova.rma()
now gives a warning when running LRTs not based on ML/REML estimation and gains rhs
argument; it also now has a refit
argument (to refit REML fits with ML in case the fixed effects of the models differ)dfs="contain"
in rma.mv()
automatically sets test="t"
for conveniencerho
and phi
in rma.mv()
are now based on the lower triangular part of the respective correlation matrix (instead of the upper triangular part) for consistency with other functions; note that this is in principle a backwards incompatible change, although this should only be a concern in very special circumstancesrma.mv()
gains cvvc
argument (for calculating the var-cov matrix of the variance/correlation/covariance components)"MPORM"
to escalc()
for computing marginal log odds ratios based on marginal 2x2 tables directly (which requires specification of the correlation coefficients in the paired tables for the calculation of the sampling variances via the ri
argument)"REH"
to escalc()
for computing the (log transformed) relative excess heterozygosity (to assess deviations from the Hardy-Weinberg equilibrium)aggregate.escalc()
gains checkpd
argument and struct="CS+CAR"
rma.glmm()
now has entire array of optimizers available for model="CM.EL"
and measure="OR"
; switched the default from optim()
with method BFGS
to nlminb()
for consistency with rma.mv()
, rma.uni()
, and selmodel.rma.uni()
rma.glmm()
gains coding
and cor
arguments and hence more flexibility how the group variable should be coded in the random effects structure and whether the random study effects should be allowed to be correlated with the random group effectsrma.uni()
now also provides R^2 for fixed-effects modelsmatreg()
can now also analyze a covariance matrix with a corresponding V
matrix; can also specify variable names (instead of indices) for arguments x
and y
nearPD
to nearpd
in matreg()
(but nearPD
continues to work)plot.profile.rma()
gains refline
argumentaddpoly.rma.predict()
methodaddpoly.default()
and addpoly.rma()
gain lty
and annosym
arguments; if unspecified, arguments annotate
, digits
, width
, transf
, atransf
, targs
, efac
, fonts
, cex
, and annosym
are now automatically set equal to the same values that were used when creating the forest plottextpos
and rowadj
arguments for the various forest
functions and moved the top
and annosym
arguments to 'additional arguments'level
argument in addpoly.rma()
did not affect the CI widthpoints.regplot()
function now also redraws the labels (if there were any to begin with)lbfgsb3c
, subplex
, and BBoptim
as possible optimizer in rma.mv()
, rma.glmm()
, rma.uni()
, and selmodel.rma.uni()
data
argument; various method functions now automatically look for specified variables within this data frame firstmetafor
package now makes use of the mathjaxr
package to nicely render equations shown in the HTML help pagesrma()
can now also fit location-scale modelsselmodel()
for fitting a wide variety of selection models (and added the corresponding plot.rma.uni.selmodel()
function for drawing the estimated selection function)rma.mv()
gains dfs
argument and now provides an often better way for calculating the (denominator) degrees of freedom for approximate t- and F-tests when dfs="contain"
tes()
function for the test of excess significanceregplot()
function for drawing scatter plots / bubble plots based on meta-regression modelsrcalc()
for calculating the variance-covariance matrix of correlation coefficients and matreg()
for fitting regression models based on correlation/covariance matricesdfround()
and vec2mat()
aggregate.escalc()
function to aggregate multiple effect sizes or outcomes within studies/clustersregtest()
now shows the 'limit estimate' of the (average) true effect when using sei
, vi
, ninv
, or sqrtninv
as predictors (and the model does not contain any other moderators)vif()
gains btt
argument and can now also compute generalized variance inflation factors; a proper print.vif.rma()
function was also addedanova.rma()
argument L
renamed to X
(the former still works, but is no longer documented)order
in cumul()
should now just be a variable, not the order of the variable, to be used for ordering the studies and must be of the same length as the original dataset that was used in the model fittingforest.rma()
must now be of the same length as the original dataset that was used in the model fitting (any subsetting and removal of NAs
is automatically applied)leave1out()
and cumul()
functions now provide I^2 and H^2 also for fixed-effects models; accordingly, plot.cumul.rma()
now also works with such modelslevel
not getting passed down to the various cumul()
functionsplot.cumul.rma()
argument addgrid
renamed to grid
(the former still works, but is no longer documented)forest.default()
, forest.rma()
, and labbe()
gain plim
argument and now provide more flexibility in terms of the scaling of the pointsforest.rma()
gains colout
argument (to adjust the color of the observed effect sizes or outcomes)forest()
functions, the right header is now suppressed when annotate=FALSE
and header=TRUE
funnel.default()
and funnel.rma()
gain label
and offset
argumentsfunnel.default()
and funnel.rma()
gain lty
argument; the reference line is now drawn by default as a dotted line (like the line for the pseudo confidence region)forest
and funnel
arguments of reporter.rma.uni()
can now also be logicals to suppress the drawing of these plotsweighted
argument to fsn()
(for Orwin's method)bldiag()
now properly handles ?x0 or 0x? matricesdigits=1
summary.escalc()
also provides the p-values (of the Wald-type tests); but when using the transf
argument, the sampling variances, standard errors, test statistics, and p-values are no longer shownrma.uni()
no longer constrains a fixed tau^2 value to 0 when k=1rma.uni()
models by skipping the computation of the pseudo R^2 statisticpbapply
package for showing progress bars, also when using parallel processingpi.lb
and pi.ub
(instead of cr.lb
and cr.ub
); the corresponding argument names were changed in addpoly.default()
; argument addcred
was changed to addpred
in addpoly.rma()
and forest.rma()
; however, code using the old arguments names should continue to workweights(..., type="rowsum")
for intercept-only rma.mv
models (to obtain 'row-sum weights')simulate.rma()
gains olim
argument; renamed the clim
argument in summary.escalc()
and the various forest()
functions to olim
for consistency (the old clim
argument should continue to work)dat.hasselblad1998
and dat.senn2013
in the help filesdat.anand1999
, dat.assink2016
, dat.baskerville2012
, dat.bornmann2007
, dat.cannon2006
, dat.cohen1981
, dat.craft2003
, dat.crede2010
, dat.dagostino1998
, dat.damico2009
, dat.dorn2007
, dat.hahn2001
, dat.kalaian1996
, dat.kearon1998
, dat.knapp2017
, dat.landenberger2005
, dat.lau1992
, dat.lim2014
, dat.lopez2019
, dat.maire2019
, dat.moura2021
, dat.obrien2003
, dat.vanhowe1999
, dat.viechtbauer2021
)METAFOR_VERSION_CHECK
to FALSE
disables thisOlder updates are archived here.