updates_old

Older updates of the metafor package are archived on this page. More recent updates can be found here.

- added function
`rma.mv()`

to fit multivariate/multilevel meta-analytic models via appropriate linear (mixed-effects) models; this function allows for modeling of non-independent sampling errors and/or true effects and can be used for network meta-analyses, meta-analyses accounting for phylogenetic relatedness, and other complicated meta-analytic data structures - added the AICc to the information criteria computed by the various model fitting functions
- if the value of tau^2 is fixed by the user via the corresponding argument in
`rma.uni()`

, then tau^2 is no longer counted as an additional parameter for the computation of the information criteria (i.e., AIC, BIC, and AICc) `rma.uni()`

,`rma.glmm()`

, and`rma.mv()`

now use a more stringent check whether the model matrix is of full rank- added
`profile()`

method functions for objects of class`rma.uni`

and`rma.mv`

(can be used to obtain a plot of the profiled log-likelihood as a function of a specific variance component or correlation parameter of the model) `predict.rma()`

function now has an`intercept`

argument that allows the user to decide whether the intercept term should be included when calculating the predicted values (rare that this should be changed from the default)- for
`rma.uni()`

,`rma.glmm()`

, and`rma.mv()`

, the`control`

argument can now also accept an integer value; values > 1 generate more verbose output about the progress inside of the function `rma.glmm()`

has been updated to work with`lme4`

1.0.x for fitting various models; as a result,`model="UM.RS"`

can only use`nAGQ=1`

at the moment (hopefully this will change in the future)- the
`control`

argument of`rma.glmm()`

can now be used to pass all desired control arguments to the various functions and optimizers used for the model fitting (admittedly the use of lists within this argument is a bit unwieldy, but much more flexible) `rma.mh()`

and`rma.peto()`

also now have a 'verbose' argument (not really needed, but added for sake of consistency across functions)- a bit of code reorganization (should be user transparent)
- vignettes (
`metafor`

and`metafor_diagram`

) are now just 'other files' in the doc directory (as these were not true vignettes to begin with) - some improvements to the documentation (as always)

`rma.mh()`

now also implements the Mantel-Haenszel method for incidence rate differences (`measure="IRD"`

)- when analyzing incidence rate ratios (
`measure="IRR"`

) with the`rma.mh()`

function, the Mantel-Haenszel test for person-time data is now also provided `rma.mh()`

has a new argument`correct`

(default is`TRUE`

) to indicate whether the continuity correction should be applied when computing the (Cochran-)Mantel-Haenszel test statistic- renamed elements
`CMH`

and`CMHp`

(for the Cochran-Mantel-Haenszel test statistic and corresponding p-value) to`MH`

and`MHp`

- added function
`baujat()`

to create Baujat plots - added a new dataset (
`dat.pignon2000`

) to illustrate the use of the`baujat()`

function - added function
`to.table()`

to convert data from vector format into the corresponding table format - added function
`to.long()`

to convert data from vector format into the corresponding long format `rma.glmm()`

now even runs when k=1 (yielding trivial results)- for models with an intercept and moderators,
`rma.glmm()`

now internally rescales (non-dummy) variables to z-scores during the model fitting (this improves the stability of the model fitting, especially when`model="CM.EL"`

); results are given after back-scaling, so this should be transparent to the user - in
`rma.glmm()`

, default number of quadrature points (`nAGQ`

) is now 7 (setting this to 100 was a bit overkill) - a few more error checks here and there for misspecified arguments
- some improvements to the documentation

- vignette renamed to 'metafor' so
`vignette("metafor")`

works now - added a diagram to the documentation, showing the various functions in the metafor package (and how they relate to each other); can be loaded with
`vignette("metafor_diagram")`

`anova.rma.uni()`

function can now also be used to test (sub)sets of model coefficients with a Wald-type test when a single model is passed to the function- the pseudo R^2 statistic is now automatically calculated by the
`rma.uni()`

function and supplied in the output (only for mixed-effects models and when the model includes an intercept, so that the random-effects model is clearly nested within the mixed-effects model) - component
`VAF`

is now called`R2`

in`anova.rma.uni()`

function - added function
`hc()`

that carries out a random-effects model analysis using the method by Henmi and Copas (2010); thanks to Michael Dewey for the suggestion and providing the code - added new dataset (
`dat.lee2004`

), which was used in the article by Henmi and Copas (2010) to illustrate their method - fixed missing x-axis labels in the
`forest()`

functions `rma.glmm()`

now computes Hessian matrices via the`numDeriv`

package when`model="CM.EL"`

and`measure="OR"`

(i.e., for the conditional logistic model with exact likelihood); so`numDeriv`

is now a suggested package and is loaded within`rma.glmm()`

when required`trimfill.rma.uni()`

now also implements the "Q0" estimator (although the "L0" and "R0" estimators are generally to be preferred)`trimfill.rma.uni()`

now also calculates the SE of the estimated number of missing studies and, for estimator "R0", provides a formal test of the null hypothesis that the number of missing studies on a given side is zero- added new dataset (
`dat.bangertdrowns2004`

) - the
`level`

argument in various functions now either accepts a value representing a percentage or a proportion (values greater than 1 are assumed to be a percentage) `summary.escalc()`

now computes confidence intervals correctly when using the`transf`

argument- computation of Cochran-Mantel-Haenszel statistic in
`rma.mh()`

changed slightly to avoid integer overflow with very big counts - some internal improvements with respect to object attributes that were getting discarded when subsetting
- some general code cleanup
- some improvements to the documentation

- added additional clarifications about the change score outcome measures (
`"MC"`

,`"SMCC"`

, and`"SMCR"`

) to the help file for the`escalc()`

function and changed the code so that`"SMCR"`

no longer expects argument`sd2i`

to be specified (which is not needed anyways) (thanks to Markus Kösters for bringing this to my attention) - sampling variance for the biserial correlation coefficient (
`"RBIS"`

) is now calculated in a slightly more accurate way `llplot()`

now properly scales the log-likelihoods- argument
`which`

in the`plot.infl.rma.uni()`

function has been replaced with argument`plotinf`

which can now also be set to`FALSE`

to suppress plotting of the various case diagnostics altogether - labeling of the axes in
`labbe()`

plots is now correct for odds ratios (and transformations thereof) - added two new datasets (
`dat.nielweise2007`

and`dat.nielweise2008`

) to illustrate some methods/models from the`rma.glmm()`

function - added a new dataset (
`dat.yusuf1985`

) to illustrate the use of`rma.peto()`

- test for heterogeneity is now conducted by the
`rma.peto()`

function exactly as described by Yusuf et al. (1985) - in
`rma.glmm()`

, default number of quadrature points (`nAGQ`

) is now 100 (which is quite a bit slower, but should provide more than sufficient accuracy in most cases) - the standard errors of the HS and DL estimators of tau^2 are now correctly computed when tau^2 is prespecified by the user in the
`rma()`

function; in addition, the standard error of the SJ estimator is also now provided when tau^2 is prespecified `rma.uni()`

and`rma.glmm()`

now use a better method to check whether the model matrix is of full rank- I^2 and H^2 statistics are now also calculated for mixed-effects models by the
`rma.uni()`

and`rma.glmm()`

function;`confint.rma.uni()`

provides the corresponding confidence intervals for`rma.uni()`

models - various
`print()`

methods now have a new argument called`signif.stars`

, which defaults to`getOption("show.signif.stars")`

(which by default is`TRUE`

) to determine whether the infamous 'significance stars' should be printed - slight changes in wording in the output produced by the
`print.rma.uni()`

and`print.rma.glmm()`

functions - some improvements to the documentation

- added
`rma.glmm()`

function for fitting of appropriate generalized linear (mixed-effects) models when analyzing odds ratios, incidence rate ratios, proportions, or rates; the function makes use of the`lme4`

and`BiasedUrn`

packages; these are now suggested packages and loaded within`rma.glmm()`

only when required (this makes for faster loading of the`metafor`

package) - added several methods functions for objects of class
`rma.glmm`

(not all methods yet implemented; to be completed in the future) `rma.uni()`

now allows the user to specify a formula for the`yi`

argument, so instead of`rma(yi, vi, mods=~mod1+mod2)`

, one can specify the same model with`rma(yi~mod1+mod2, vi)`

`rma.uni()`

now has a`weights`

argument to specify the inverse of the sampling variances (instead of using the`vi`

or`sei`

arguments); for now, this is all this argument should be used for (in the future, this argument may potentially be used to allow the user to define alternative weights)`rma.uni()`

now checks whether the model matrix is not of full rank and issues an error accordingly (instead of the rather cryptic error that was issued before)`rma.uni()`

now has a`verbose`

argument`coef.rma()`

now returns only the model coefficients (this change was necessary to make the package compatible with the`multcomp`

package; see`help(rma)`

for an example); use`coef(summary())`

to obtain the full table of results- the
`escalc()`

function now does some more extensive error checking for misspecified data and some unusual cases `append`

argument is now`TRUE`

by default in the`escalc()`

function- objects generated by the
`escalc()`

function now have their own class - added
`print()`

and`summary()`

methods for objects of class`escalc`

- added
``[``

and`cbind()`

methods for objects of class`escalc`

- added a few additional arguments to the
`escalc()`

function (i.e.,`slab`

,`subset`

,`var.names`

,`replace`

,`digits`

) - added
`drop00`

argument to the`escalc()`

,`rma.uni()`

,`rma.mh()`

, and`rma.peto()`

functions - added
`"MN"`

,`"MC"`

,`"SMCC"`

, and`"SMCR"`

measures to the`escalc()`

and`rma.uni()`

functions for the raw mean, the raw mean change, and the standardized mean change (with change score or raw score standardization) as possible outcome measures - the
`"IRFT"`

measure in the`escalc()`

and`rma.uni()`

functions is now computed with`1/2*(sqrt(xi/ti) + sqrt(xi/ti+1/ti))`

which is more consistent with the definition of the Freeman-Tukey transformation for proportions - added
`"RTET"`

measure to the`escalc()`

and`rma.uni()`

functions to compute the tetrachoric correlation coefficient based on 2x2 table data (the`polycor`

package is therefore now a suggested package, which is loaded within`escalc()`

only when required) - added
`"RPB"`

and`"RBIS"`

measures to the`escalc()`

and`rma.uni()`

functions to compute the point-biserial and biserial correlation coefficient based on means and standard deviations - added
`"PBIT"`

and`"OR2D"`

measures to the`escalc()`

and`rma.uni()`

functions to compute the standardized mean difference based on 2x2 table data - added the
`"D2OR"`

measure to the`escalc()`

and`rma.uni()`

functions to compute the log odds ratio based on the standardized mean difference - added
`"SMDH"`

measure to the`escalc()`

and`rma.uni()`

functions to compute the standardized mean difference without assuming equal population variances - added
`"ARAW"`

,`"AHW"`

, and`"ABT"`

measures to the`escalc()`

and`rma.uni()`

functions for the raw value of Cronbach's alpha, the transformation suggested by Hakstian & Whalen (1976), and the transformation suggested by Bonett (2002) for the meta-analysis of reliability coefficients (see`help(escalc)`

for details) - corrected a small mistake in the equation used to compute the sampling variance of the phi coefficient (
`measure="PHI"`

) in the`escalc()`

function - the
`permutest.rma.uni()`

function now uses an algorithm to find only the unique permutations of the model matrix (which may be much smaller than the total number of permutations), making the exact permutation test feasible in a larger set of circumstances (thanks to John Hodgson for making me aware of this issue and to Hans-Jörg Viechtbauer for coming up with a recursive algorithm for finding the unique permutations) - credibility interval in
`forest.rma()`

is now indicated with a dotted (instead of a dashed) line; ends of the interval are now marked with vertical bars - completely rewrote the
`funnel.rma()`

function which now supports many more options for the values to put on the y-axis;`trimfill.rma.uni()`

function was adapted accordingly - removed the
`ni`

argument from the`regtest.rma()`

function; instead, sample sizes can now be explicitly specified via the`ni`

argument when using the`rma.uni()`

function (i.e., when`measure="GEN"`

); the`escalc()`

function also now adds information on the`ni`

values to the resulting data frame (as an attribute of the`yi`

variable), so, if possible, this information is passed on to`regtest.rma()`

- added switch so that
`regtest()`

can also provide the full results from the fitted model (thanks to Michael Dewey for the suggestion) `weights.rma.mh()`

now shows the weights in % as intended (thanks to Gavin Stewart for pointing out this error)- more flexible handling of the
`digits`

argument in the various forest functions - forest functions now use
`pretty()`

by default to set the x-axis tick locations (`alim`

and`at`

arguments can still be used for complete control) - studies that are considered to be 'influential' are now marked with an asterisk when printing the results returned by the
`influence.rma.uni()`

function (see the documentation of this function for details on how such studies are identified) - added additional extractor functions for some of the influence measures (i.e.,
`cooks.distance`

,`dfbetas`

); unfortunately, the`covratio`

and`dffits`

functions in the`stats`

package are not generic; so, to avoid masking, there are currently no extractor functions for these measures - better handling of missing values in some unusual situations
- corrected small bug in
`fsn()`

that would not allow the user to specify the standard errors instead of the sampling variances (thanks to Bernd Weiss for pointing this out) `plot.infl.rma.uni()`

function now allows the user to specify which plots to draw (and the layout) and adds the option to show study labels on the x-axis- added proper
`print()`

method for objects generated by the`confint.rma.uni()`

,`confint.mh()`

, and`confint.peto()`

functions - when
`transf`

or`atransf`

argument was a monotonically *decreasing* function, then confidence, prediction, and credibility interval bounds were in reversed order; various functions now check for this and order the bounds correctly `trimfill.rma.uni()`

now only prints information about the number of imputed studies when actually printing the model object`qqnorm.rma.uni()`

,`qqnorm.rma.mh()`

, and`qqnorm.rma.peto()`

functions now have a new argument called`label`

, which allows for labeling of points; the functions also now return (invisibly) the x and y coordinates of the points drawn`rma.mh()`

with`measure="RD"`

now computes the standard error of the estimated risk difference based on Sato, Greenland, & Robins (1989), which provides a consistent estimate under both large-stratum and sparse-data limiting models- the restricted maximum likelihood (REML) is now calculated using the full likelihood equation (without leaving out additive constants)
- the model deviance is now calculated as -2 times the difference between the model log-likelihood and the log-likelihood under the saturated model (this is a more appropriate definition of the deviance than just taking -2 times the model log-likelihood)
- naming scheme of illustrative datasets bundled with the package has been changed; now datasets are called
`<dat.authoryear>`

; therefore, the datasets are now called (old name -> new name):`dat.bcg -> dat.colditz1994`

`dat.warfarin -> dat.hart1999`

`dat.los -> dat.normand1999`

`dat.co2 -> dat.curtis1998`

`dat.empint -> dat.mcdaniel1994`

- but
`dat.bcg`

has been kept as an alias for`dat.colditz1994`

, as it has been referenced under that name in some publications - added new dataset (
`dat.pritz1997`

) to illustrate the meta-analysis of proportions (raw values and transformations thereof) - added new dataset (
`dat.bonett2010`

) to illustrate the meta-analysis of Cronbach's alpha values (raw values and transformations thereof) - added new datasets (
`dat.hackshaw1998`

,`dat.raudenbush1985`

) - (approximate) standard error of the tau^2 estimate is now computed and shown for most of the (residual) heterogeneity estimators
- added
`nobs()`

and`df.residual()`

methods for objects of class`rma`

`metafor.news()`

is now simply a wrapper for`news(package="metafor")`

- the package code is now byte-compiled, which yields some modest increases in execution speed
- some general code cleanup
- the
`metafor`

package no longer depends on the`nlme`

package - some improvements to the documentation

`trimfill.rma()`

now returns a proper object even when the number of missing studies is estimated to be zero- added the (log transformed) ratio of means as a possible outcome measure to the
`escalc()`

and`rma.uni()`

functions - added new dataset (
`dat.co2`

) to illustrate the use of the ratio of means outcome measure - some additional error checking in the various forest functions (especially when using the
`ilab`

> - argument)
- in
`labbe.rma()`

, the solid and dashed lines are now drawn behind (and not on top of) the points - slight change to
`transf.ipft.hm()`

so that missing values in`targs$ni`

are ignored - some improvements to the documentation

- added
`labbe()`

function to create L’Abbe plots - the
`forest.default()`

and`addpoly.default()`

functions now allow the user to directly specify the lower and upper confidence interval bounds (this can be useful when the CI bounds have been calculated with other methods/functions) - added the incidence rate for a single group and for two groups (and transformations thereof) as possible outcome measures to the
`escalc()`

and`rma.uni()`

functions - added the incidence rate ratio as a possible outcome measure to the
`rma.mh()`

function - added transformation functions related to incidence rates
- added the Freeman-Tukey double arcsine transformation and its inverse to the transformation functions
- added some additional error checking for out-of-range p-values in the
`permutest.rma.uni()`

function - added some additional checking for out-of-range values in several transformation functions
- added
`confint()`

methods for`rma.mh`

and`rma.peto`

objects (only for completeness sake;`print`

already provides CIs) - added new datasets (
`dat.warfarin`

,`dat.los`

,`dat.empint`

) - some improvements to the documentation

- the package has now been published in the Journal of Statistical Software (http://www.jstatsoft.org/v36/i03/)
- added citation info; see:
`citation("metafor")`

- metafor package now depends on nlme package
- added extractor functions for the AIC, BIC, and deviance
- some updates to the documentation

- metafor package now depends on Formula package
- made
`escalc()`

generic and implemented a default and a formula interface - added the (inverse) arcsine transformation to the set of transformation functions

- cases where k is very small (e.g., k equal to 1 or 2) are now handled more gracefully
- added sanity check for cases where all observed outcomes are equal to each other (this led to division by zero when using the Knapp & Hartung method)
- the "smarter way to set the number of iterations for permutation tests" (see notes for previous version below) now actually works like it is supposed to
- the
`permutest.rma.uni()`

function now provides more sensible results when k is very small; the documentation for the function has also been updated with some notes about the use of permutations tests under those circumstances - made some general improvements to the various forest plot functions making them more flexible in particular when creating more complex displays; most importantly, added a
`rows`

argument and removed the`addrows`

argument - some additional examples have been added to the help files for the
`forest`

and`addpoly`

functions to demonstrate how to create more complex displays with these functions - added
`showweight`

argument to the`forest.default()`

and`forest.rma()`

functions `cumul()`

functions not showing all of the output columns when using fixed-effects models has been corrected`weights.rma.uni()`

function now handles`NAs`

appropriately`weights.rma.mh()`

and`weights.rma.peto()`

functions added`logLik.rma()`

function now behaves more like other`logLik()`

functions (such as`logLik.lm()`

and`logLik.lme()`

)

`cint()`

generic removed and replaced with`confint()`

method for`rma.uni`

objects- slightly improved the code to set the x-axis title in the
`forest()`

and`funnel()`

functions - added
`coef()`

method for objects of class`permutest.rma.uni`

- added
`append`

argument to`escalc()`

function - implemented a smarter way to set the number of iterations for permutation tests (i.e., the
`permutest.rma.uni()`

function will now switch to an exact test if the number of iterations required for an exact test is actually smaller than the requested number of iterations for an approximate test) - changed the way how p-values for individual coefficients are calculated in
`permutest.rma.uni()`

to 'two times the one-tailed area under the permutation distribution' (more consistent with the way we typically define two-tailed p-values) - added
`retpermdist`

argument to`permutest.rma.uni()`

to return the permutation distributions of the test statistics - slight improvements to the various transformation functions to cope better with some extreme cases
- p-values are now calculated in such a way that very small p-values stored in fitted model objects are no longer truncated to 0 (the printed results are still truncated depending on the number of digits specified)
- changed the default number of iterations for the ML, REML, and EB estimators from 50 to 100

- version jump in conjunction with the upcoming publication of a paper in the Journal of Statistical Software describing the package
- instead of specifying a model matrix, the user can now specify a model formula for the
`mods`

argument in the`rma()`

function (e.g., like in the`lm()`

function) `permutest()`

function now allows exact permutation tests (but this is only feasible when k is not too large)`forest()`

function now uses the level argument properly to adjust the CI level of the summary estimate for models without moderators (i.e., fixed- and random-effets models)`forest()`

function can now also show the credibility interval as a dashed line for a random-effects model- information about the measure used is now passed on to the
`forest()`

and`funnel()`

functions, which try to set an appropriate x-axis title accordingly `funnel()`

function now has more arguments (e.g.,`atransf`

,`at`

) providing more control over the display of the x-axis`predict()`

function now has its own print method and has a new argument (`addx`

), which adds the values of the moderator variables to the returned object (when`addx=TRUE`

)- functions now properly handle the na.action
`"na.pass"`

(treated essentially like`"na.exclude"`

) - added method for
`weights()`

function to extract the weights used when fitting models with`rma.uni()`

- some small improvements to the documentation

- added
`permutest()`

function for permutation tests - added
`metafor.news()`

function to display the`NEWS`

file of the metafor package within R (based on the same idea in the`animate`

package by Yihui Xie) - added some checks for values below machine precision
- a bit of code reorganization (nothing that affects how the functions work)

- small changes to the computation of the DFFITS and DFBETAS values in the
`influence()`

function, so that these statistics are more in line with their definitions in regular linear regression models - added option to the plot function for objects returned by
`influence()`

to allow plotting the covariance ratios on a log scale (now the default) - slight adjustments to various
`print()`

functions (to catch some errors when certain values were`NA`

) - added a control option to
`rma()`

to adjust the step length of the Fisher scoring algorithm by a constant factor (this may be useful when the algorithm does not converge)

- added the phi coefficient (
`measure="PHI"`

), Yule's Q (`"YUQ"`

), and Yule's Y (`"YUY"`

) as additional measures to the`escalc()`

function for 2x2 table data - forest plots now order the studies so that the first study is at the top of the plot and the last study at the bottom (the order can still be set with the
`order`

or`subset`

argument) - added
`cumul()`

function for cumulative meta-analyses (with a corresponding`forest()`

method to plot the cumulative results) - added
`leave1out()`

function for leave-one-out diagnostics - added option to
`qqnorm.rma.uni()`

so that the user can choose whether to apply the Bonferroni correction to the bounds of the pseudo confidence envelope - some internal changes to the class and methods names
- some small corrections to the documentation

- corrected the
`trimfill()`

function - improvements to various print functions
- added a
`regtest()`

function for various regression tests of funnel plot asymmetry (e.g., Egger's regression test) - made
`ranktest()`

generic and added a method for objects of class`rma`

so that the test can be carried out after fitting - added
`anova()`

function for full vs reduced model comparisons via fit statistics and likelihood ratio tests - added the Orwin and Rosenberg approaches to
`fsn()`

- added H^2 measure to the output for random-effects models
- in
`escalc()`

,`measure="COR"`

is now used for the (usual) raw correlation coefficient and`measure="UCOR"`

for the bias corrected correlation coefficients - some small corrections to the documentation

- small changes to some of the examples
- added the log transformed proportion (
`measure="PLN"`

) as another measure to the`escalc()`

function; changed`"PL"`

to`"PLO"`

for the logit (i.e., log odds) transformation for proportions

- added an option in
`plot.infl.rma.uni()`

to open a new device for plotting the DFBETAS values - thanks to Jim Lemon, added a much better method of adjusting the size of the labels, annotations, and symbols in the
`forest()`

function when the number of studies is large

- made some small changes to the documentation (some typos corrected, some confusing points clarified)

- first version released on CRAN

updates_old.txt · Last modified: 2016/09/25 18:14 by Wolfgang Viechtbauer

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 4.0 International