metafor.news.Rd
Function to read the NEWS
file of the metafor-package.
metafor.news()
The function is simply a wrapper for news(package="metafor")
which parses and displays the NEWS
file of the package.
Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1–48. https://doi.org/10.18637/jss.v036.i03
# \dontrun{
metafor.news()
#> Changes in version 4.7-54 (2024-11-21)
#>
#> - some general changes to the various forest() functions: argument
#> header is now TRUE by default, the y-axis is now created with
#> yaxs="i", and the y-axis limits have been tweaked slightly in
#> accordance
#>
#> - forest.rma() and the various addpoly() functions now provides
#> multiple styles for drawing the prediction interval via the
#> predstyle argument
#>
#> - forest.rma() and addpoly.rma() now write out the default label
#> (instead of an abbreviation) for the model results; as before, the
#> label can be changed via the mlab argument
#>
#> - added an ilab.lab argument to the various forest() functions for
#> adding header labels to the plot for the additional study
#> information columns
#>
#> - all plot functions that create multi-panel plots now behave in a
#> consistent manner, setting par(mfrow) automatically when no plotting
#> device is open or when the number of panels in an open plotting
#> device is too small for the number of panels to be plotted; all
#> multi-panel plots also set par(mfrow)=c(1L,1L) upon exit; argument
#> layout has been deprecated from plot.permutest.rma.uni(),
#> plot.vif.rma(), and plot.infl.rma.uni()
#>
#> - the predict.rma() and predict.rma.ls() functions now also accept a
#> matrix as input that includes a column for the intercept term (in
#> which case the intercept argument is ignored and the first column of
#> the matrix controls whether the intercept term is included in
#> calculating the predicted value(s))
#>
#> - added extractor function se() for extracting standard errors from
#> model objects
#>
#> - added function pairmat() to construct a matrix of pairwise contrasts
#>
#> - added function deltamethod() to apply the (multivariate) delta
#> method to a set of estimates
#>
#> - anova() and predict() gain an adjust argument for adjusting p-values
#> / interval bounds for multiple testing
#>
#> - fixed predict() ignoring the level argument for robust.rma objects
#> obtained with clubSandwich=TRUE
#>
#> - print.anova.rma() and print.list.anova.rma() now also print
#> significance stars for some tests (unless
#> getOption("show.signif.stars") is FALSE)
#>
#> - added a collapse argument to the various cumul() functions (to
#> specify whether studies with the same value of the order variable
#> should be added simultaneously)
#>
#> - rma.mv() now counts the number of levels of a random effect more
#> appropriately; this may trigger more often the check that the number
#> of levels is equal to 1, in which case the corresponding variance
#> component is automatically fixed to 0; this check can be omitted
#> with control=list(check.k.gtr.1=FALSE)
#>
#> - made optimizers Rcgmin and Rvmmin available again via the optimx
#> package
#>
#> - when unspecified, argument shade in funnel() now automatically uses
#> a color gradient for the regions when multiple level values are
#> specified
#>
#> - added lim, ci, pi, legend, and flip arguments to labbe()
#>
#> - fsn(..., type="General") now computes the final estimates after
#> rounding the fail-safe N value (not before)
#>
#> - permutest.rma.uni() gains a btt argument and permutest.rma.ls()
#> gains btt and att arguments
#>
#> - selmodel() gains a subset argument (to specify a subset of studies
#> to which the selection function should apply); for the beta
#> selection model, one can now also specify two steps values to fit a
#> truncated beta selection model
#>
#> - nobs() now just returns the number of estimates, not the effective
#> number of observations
#>
#> - some tweaks were made to vcalc() to speed up the calculations (by
#> James Pustejovsky)
#>
#> - added measures "PRZ", "CLES", "AUC", "CLESN", "AUCN", "CLESCN",
#> "AUCCN", "R2F", and "ZR2F" to escalc()
#>
#> - escalc() gains a flip argument
#>
#> - escalc() gains a correct argument (to specify whether a bias
#> correction should be applied)
#>
#> - added transformation function transf.dtoovl() (for transforming
#> standardized mean differences to overlapping coefficient values) and
#> ``transf.dtocliffd()` (for transforming standardized mean
#> differences to Cliff's delta values)
#>
#> - qqnorm.rma.uni() now shades the pseudo confidence region; all
#> qqnorm() functions gain a grid argument
#>
#> - better handling of outlist="minimal"
#>
#> - added more tests
#>
#> Changes in version 4.6-0 (2024-03-28)
#>
#> - the steps argument in the various profile() functions can now also
#> be a numeric vector to specify for which parameter values the
#> likelihood should be evaluated
#>
#> - a few minor fixes to the dynamic theming of plots based on the
#> foreground and background colors of the plotting device
#>
#> - slightly improved flexibility for setting package options
#>
#> - new measures added to escalc(): "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
#>
#> - calculation of the sampling variances for measures "SMDH", "SMD1H",
#> and "SMCRH" was slightly adjusted for consistency
#>
#> - in plot.gosh.rma(), can also set het="tau" (to plot the square root
#> of tau^2 as the measure of heterogeneity)
#>
#> - in the various forest() functions, argument ylim can now only be a
#> single value to specify the lower bound (while the upper bound is
#> still set automatically)
#>
#> - in forest() and regplot(), observation limits set via olim are now
#> properly applied to all elements
#>
#> - various internal improvements to selmodel()
#>
#> - 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)
#>
#> - added decreasing argument to selmodel() for enforcing that the delta
#> estimates must be a monotonically decreasing function of the
#> p-values in the step function model
#>
#> - added the undocumented argument pval to selmodel() for passing
#> p-values directly to the function (doing this is highly
#> experimental)
#>
#> - some internal refactoring of the code
#>
#> - improved the documentation a bit
#>
#> Changes in version 4.4-0 (2023-09-27)
#>
#> - added getmfopt() and setmfopt() functions for getting and setting
#> package options and made some of the options more flexible
#>
#> - removed argument weighted 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()
#> function
#>
#> - further improved the theming of all plots based on the foreground
#> and background colors; within RStudio, plot colors can also be
#> automatically chosen based on the theme (with
#> setmfopt(theme="auto"))
#>
#> - added additional/optional argument 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)
#>
#> - added (for now undocumented) vccon argument to rma.mv() for setting
#> equality constraints on variance/correlation components
#>
#> - replace argument in conv.2x2(), conv.delta(), conv.fivenum(), and
#> conv.wald() can now also be a logical
#>
#> - added summary.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 functions
#>
#> - formatting functions fmtp(), fmtx(), and fmtt() gain a quote
#> argument, which is set to FALSE by default
#>
#> - for measures "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)
#>
#> - added measures "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 argument
#>
#> - vcalc() gains a sparse argument
#>
#> - aggregate.escalc gains var.names argument
#>
#> - made the legend argument more flexible in funnel()
#>
#> - made the append argument more flexible in to.long()
#>
#> - added a few more transformation functions
#>
#> - small bug fixes
#>
#> - added automated visual comparison tests of plots
#>
#> - improved the documentation a bit
#>
#> Changes in version 4.2-0 (2023-05-08)
#>
#> - improved the various plotting functions so they respect par("fg");
#> as a result, one can now create plots with a dark background and
#> light plotting colors
#>
#> - also allow two or three values for xlab in the various forest()
#> functions (for adding labels at the ends of the x-axis limits)
#>
#> - better default choices for xlim in the various forest() functions;
#> also, argument ilab.xpos is now optional when using the ilab
#> argument
#>
#> - added shade and colshade arguments to the various forest() functions
#>
#> - the various forest() functions no longer enforce that xlim must be
#> at least as wide as alim
#>
#> - added 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 errors
#>
#> - for measure SMCC, can now specify d-values, t-test statistics, and
#> p-values via arguments di, ti, and pi
#>
#> - functions that issue a warning when omitting studies due to NAs now
#> indicate how many were omitted
#>
#> - properly documented the level argument
#>
#> - added a few more transformation functions
#>
#> - small bug fixes
#>
#> - improved the documentation a bit
#>
#> Changes in version 4.0-0 (2023-03-19)
#>
#> - added conv.2x2() function for reconstructing the cell frequencies
#> in 2x2 tables based on other summary statistics
#>
#> - added conv.wald() function for converting Wald-type confidence
#> intervals and test statistics to sampling variances
#>
#> - added conv.fivenum() function for estimating means and standard
#> deviations from five-number summary values
#>
#> - added conv.delta() function for transforming observed effect sizes
#> or outcomes and their sampling variances using the delta method
#>
#> - added emmprep() function to create a reference grid for use with the
#> emmeans() function from the package of the same name
#>
#> - exposed formatter functions fmtp(), fmtx(), and fmtt()
#>
#> - package numDeriv moved from Suggests to Depends
#>
#> - model.matrix.rma() gains asdf argument
#>
#> - corrected bug in vcalc() (values for obs and type were taken
#> directly as indices instead of using them as identifiers)
#>
#> - improved efficiency of 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)
#>
#> - added 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
#>
#> - added measures "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)
#>
#> - the variance of measure 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))
#>
#> - as with 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()
#>
#> - for measures COR, UCOR, and ZCOR, can now use argument ti to specify
#> t-test statistics in escalc()
#>
#> - can also specify (two-sided) p-values (of the respective t-tests)
#> for these measures (and for measures PCOR, ZPCOR, SPCOR, and ZSPCOR)
#> via argument pi (the sign of the p-value is taken to be the sign of
#> the measure)
#>
#> - can also specify (semi-)partial correlations directly via argument
#> ri for measures PCOR, ZPCOR, SPCOR, and ZSPCOR
#>
#> - when passing a correlation marix to 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)
#>
#> - optimizers Rcgmin and Rvmmin are now available in rma.uni(),
#> rma.mv(), rma.glmm(), and selmodel()
#>
#> - improved the documentation a bit
#>
#> Changes in version 3.8-1 (2022-08-26)
#>
#> - funnel.default(), funnel.rma(), and regplot.rma() gain slab argument
#>
#> - vif() was completely refactored and gains reestimate, sim, and
#> parallel arguments; added as.data.frame.vif.rma() and plot.vif.rma()
#> methods
#>
#> - plot.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 estimate
#>
#> - added possibility to specify a list for btt in anova.rma(); added
#> print.list.anova.rma() to print the resulting object
#>
#> - added as.data.frame.anova.rma() and as.data.frame.list.anova.rma()
#> methods
#>
#> - documented the possibility to use an identity link (with
#> link="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 case
#>
#> - optimizers nloptr and constrOptim.nl (the latter from the alabama
#> package) are now available in rma.uni() for location-scale models
#> when using an identity link
#>
#> - added measure SMD1H to escalc()
#>
#> - for measure="SMD", escalc() now also allows the user to specify
#> d-values and t-test statistics via arguments di and ti, respectively
#>
#> - aggregate.escalc() gains addk argument
#>
#> - added (experimental!) support for measures "RR", "RD", "PLN", and
#> "PR" to rma.glmm() (but using these measures will often lead to
#> estimation problems)
#>
#> - replmiss() gains data argument
#>
#> - cumul() functions also store data, so that arguments ilab, col, pch,
#> and psize in the forest.cumul.rma() function can look for variables
#> therein
#>
#> - fixed issue with rendering Rmarkdown documents with metafor output
#> due to the use of a zero-width space
#>
#> Changes in version 3.4-0 (2022-04-21)
#>
#> - added misc-models, misc-recs, and misc-options help pages
#>
#> - added as.data.frame.confint.rma() and as.data.frame.list.confint.rma
#> methods
#>
#> - permutest() can now also do permutation tests for location-scale
#> models; it also always returns the permutation distributions; hence,
#> argument retpermdist was removed
#>
#> - added plot.permutest.rma.uni() function to plot the permutation
#> distributions
#>
#> - simplified regtest(), ranktest(), and tes() to single functions
#> instead of using generics and methods; this way, a data argument
#> could be added
#>
#> - added vcalc() and blsplit() functions
#>
#> - robust() 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 case
#>
#> - results from robust() 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)
#>
#> - setting dfs="contain" in rma.mv() automatically sets test="t" for
#> convenience
#>
#> - elements of rho 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 circumstances
#>
#> - rma.mv() gains cvvc argument (for calculating the var-cov matrix of
#> the variance/correlation/covariance components)
#>
#> - added measure "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)
#>
#> - added measure "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 effects
#>
#> - rma.uni() now also provides R^2 for fixed-effects models
#>
#> - matreg() 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
#>
#> - renamed argument nearPD to nearpd in matreg() (but nearPD continues
#> to work)
#>
#> - plot.profile.rma() gains refline argument
#>
#> - added addpoly.rma.predict() method
#>
#> - addpoly.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 plot
#>
#> - documented textpos and rowadj arguments for the various forest
#> functions and moved the top and annosym arguments to 'additional
#> arguments'
#>
#> - fixed that level argument in addpoly.rma() did not affect the CI
#> width
#>
#> - points.regplot() function now also redraws the labels (if there were
#> any to begin with)
#>
#> - added lbfgsb3c, subplex, and BBoptim as possible optimizer in
#> rma.mv(), rma.glmm(), rma.uni(), and selmodel.rma.uni()
#>
#> - the object returned by model fitting functions now includes the data
#> frame specified via the data argument; various method functions now
#> automatically look for specified variables within this data frame
#> first
#>
#> - datasets moved to the metadat package
#> (https://cran.r-project.org/package=metadat)
#>
#> - improved the documentation a bit
#>
#> Changes in version 3.0-2 (2021-06-09)
#>
#> - the metafor package now makes use of the mathjaxr package to nicely
#> render equations shown in the HTML help pages
#>
#> - rma() can now also fit location-scale models
#>
#> - added selmodel() 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"
#>
#> - added tes() function for the test of excess significance
#>
#> - added regplot() function for drawing scatter plots / bubble plots
#> based on meta-regression models
#>
#> - added rcalc() for calculating the variance-covariance matrix of
#> correlation coefficients and matreg() for fitting regression models
#> based on correlation/covariance matrices
#>
#> - added convenience functions dfround() and vec2mat()
#>
#> - added aggregate.escalc() function to aggregate multiple effect sizes
#> or outcomes within studies/clusters
#>
#> - regtest() 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 added
#>
#> - anova.rma() argument L renamed to X (the former still works, but is
#> no longer documented)
#>
#> - argument 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 fitting
#>
#> - similarly, vector arguments in various plotting functions such as
#> forest.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)
#>
#> - the various 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 models
#>
#> - fixed level not getting passed down to the various cumul() functions
#>
#> - plot.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 points
#>
#> - forest.rma() gains colout argument (to adjust the color of the
#> observed effect sizes or outcomes)
#>
#> - in the various forest() functions, the right header is now
#> suppressed when annotate=FALSE and header=TRUE
#>
#> - funnel.default() and funnel.rma() gain label and offset arguments
#>
#> - funnel.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)
#>
#> - the forest and funnel arguments of reporter.rma.uni() can now also
#> be logicals to suppress the drawing of these plots
#>
#> - added weighted argument to fsn() (for Orwin's method)
#>
#> - added some more transformation functions
#>
#> - bldiag() now properly handles ?x0 or 0x? matrices
#>
#> - p-values are still given to 2 digits even when digits=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 shown
#>
#> - rma.uni() no longer constrains a fixed tau^2 value to 0 when k=1
#>
#> - slight speedup in functions that repeatedly fit rma.uni() models by
#> skipping the computation of the pseudo R^2 statistic
#>
#> - started using the pbapply package for showing progress bars, also
#> when using parallel processing
#>
#> - to avoid potential confusion, all references to 'credibility
#> intervals' have been removed from the documentation; these intervals
#> are now exclusively referred to as 'prediction intervals'; in the
#> output, the bounds are therefore indicated now as pi.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 work
#>
#> - one can now use weights(..., 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)
#>
#> - show nicer network graphs for dat.hasselblad1998 and dat.senn2013 in
#> the help files
#>
#> - added 24 datasets (dat.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)
#>
#> - the package now runs a version check on startup in interactive
#> sessions; setting the environment variable METAFOR_VERSION_CHECK to
#> FALSE disables this
#>
#> - refactored various functions (for cleaner/simpler code)
#>
#> - improved the documentation a bit
#>
#> Changes in 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 gain header argument
#>
#> - escalc() gains include argument
#>
#> - setting verbose=3 in model fitting functions sets options(warn=1)
#>
#> - forest.rma() and forest.default() now throw informative errors when
#> misusing order and subset arguments
#>
#> - fixed failing tests due to the stringsAsFactors=FALSE change in the
#> upcoming version of R
#>
#> - print.infl.rma.uni() gains infonly argument, to only show the
#> influential studies
#>
#> - removed MASS from Suggests (no longer needed)
#>
#> - argument btt can now also take a string to grep for
#>
#> - added optimParallel as possible optimizer in rma.mv()
#>
#> - added (for now undocumented) option to fit models in rma.glmm() via
#> the GLMMadaptive package (instead of lme4); 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 and H^2 are also shown in output for fixed-effects models
#>
#> - argument grid in baujat() 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
#>
#> Changes in version 2.1-0 (2019-05-13)
#>
#> - added formula() method for objects of class rma
#>
#> - llplot() now also allows for measure="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 class list.confint.rma
#> when obtaining CIs for all variance and correlation components of
#> the model; added corresponding print.list.confint.rma() function
#>
#> - moved tol argument in permutest() to control and renamed to comptol
#>
#> - added PMM and GENQM estimators in rma.uni()
#>
#> - added vif() function to get variance inflation factors
#>
#> - added .glmulti object for making the interaction with glmulti easier
#>
#> - added reporter() and reporter.rma.uni() for dynamically generating
#> analysis reports for objects of class rma.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(); when out 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 the hcol
#> argument and added border argument
#>
#> - refactored influence.rma.uni() to be more consistent internally with
#> other functions; print.infl.rma.uni() and plot.infl.rma.uni()
#> adjusted accordingly; functions cooks.distance.rma.uni(),
#> dfbetas.rma.uni(), and rstudent.rma.uni() now call
#> influence.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 with test="knha"
#>
#> - rstandard.rma.uni() gains type argument, and can now also compute
#> conditional residuals (it still computes marginal residuals by
#> default)
#>
#> - cooks.distance.rma.mv() gains cluster argument, so that the Cook's
#> distances can be computed for groups of estimates
#>
#> - cooks.distance.rma.mv() gains parallel, ncpus, and cl arguments and
#> can now make use of parallel processing
#>
#> - cooks.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 dataset
#>
#> - cooks.distance.rma.mv() gains reestimate argument; when set to
#> FALSE, variance/correlation components are not reestimated
#>
#> - rstandard.rma.mv() gains cluster argument for computing
#> cluster-level multivariate standardized residuals
#>
#> - added rstudent.rma.mv() and dfbetas.rma.mv()
#>
#> - smarter matching of elements in newmods (when using a named vector)
#> in predict() that also works for models with interactions (thanks to
#> Nicole Erler for pointing out the problem)
#>
#> - rma.uni() and rma.mv() no longer issue (obvious) warnings when user
#> constrains vi or V to 0 (i.e., vi=0 or V=0, respectively)
#>
#> - rma.mv() does more intelligent filtering based on NAs in V matrix
#>
#> - rma.mv() now ensures strict symmetry of any (var-cov or correlation)
#> matrices specified via the R argument
#>
#> - fixed rma.mv() so checks on R argument run as intended; also fixed
#> an issue when multiple formulas with slashes are specified via
#> random (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 for struct="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, when options(na.action="na.pass")
#> or options(na.action="na.exclude") and an annotation contains NA,
#> this is now shown as a blank (instead of NA [NA, NA])
#>
#> - the various forest() and addpoly() functions gain a fonts argument
#>
#> - the various forest() functions gain a top argument
#>
#> - the various forest() functions now show correct point sizes when the
#> weights of the studies are exactly the same
#>
#> - forest.cumul.rma() gains a col argument
#>
#> - funnel.default() and funnel.rma() can now take vectors as input for
#> the col and bg arguments (and also for pch); both functions also
#> gain a legend argument
#>
#> - addpoly() functions can now also show prediction interval bounds
#>
#> - removed 'formula interface' from escalc(); until this actually adds
#> some kind of extra functionality, this just makes escalc() 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, and addvi to
#> escalc() that allow for more flexibility when computing certain bias
#> corrections and when computing sampling variances for measures that
#> make use of the add and to arguments
#>
#> - escalc() now sets add=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 the add argument to some non-zero value
#>
#> - added clim argument to summary.escalc()
#>
#> - added ilim argument to trimfill()
#>
#> - labbe() gains lty argument
#>
#> - labbe() 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 by lltol) and issues a
#> warning if so
#>
#> - profile.rma.uni(), profile.rma.mv(), and plot.profile.rma() gain
#> cline argument; plot.profile.rma() gains xlim, ylab, and main
#> arguments
#>
#> - fixed an issue with robust.rma.mv() when the model was fitted with
#> sparse=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() gains vcov argument; when set to TRUE, the
#> variance-covariance matrix of the predicted values is also returned
#>
#> - vcov.rma() can now also return the variance-covariance matrix of the
#> fitted values (type="fitted") and the residuals (type="resid")
#>
#> - added $<- and as.matrix() methods for list.rma objects
#>
#> - fixed error in simulate.rma() that would generate too many samples
#> for rma.mv models
#>
#> - added undocumented argument time to all model fitting functions; if
#> set to TRUE, 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
#>
#> Changes in version 2.0-0 (2017-06-22)
#>
#> - added simulate() method for rma objects; added MASS to Suggests
#> (since simulating for rma.mv objects requires mvrnorm() from MASS)
#>
#> - cooks.distance.rma.mv() now works properly even when there are
#> missing values in the data
#>
#> - residuals() gains type argument and can compute Pearson residuals
#>
#> - the newmods argument in predict() 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
#> for rma.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() gains subset argument
#>
#> - funnel.default() and funnel.rma() gain col and bg arguments
#>
#> - plot.profile.rma() gains ylab argument
#>
#> - more consistent handling of robust.rma objects
#>
#> - 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 consistency
#>
#> - escalc() can now compute the sampling variance for measure="PHI" for
#> studies using stratified sampling (vtpye="ST")
#>
#> - the [ method for escalc objects now properly handles the ni and slab
#> attributes and does a better job of cleaning out superfluous
#> variable name information
#>
#> - added rbind() method for escalc objects
#>
#> - added as.data.frame() method for list.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() and rma.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(), import ranef() from nlme
#>
#> - 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
#>
#> Changes in 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://app.codecov.io/gh/wviechtb/metafor)
#>
#> - argument knha in rma.uni() and argument tdist in rma.glmm() and
#> rma.mv() are now superseded by argument test in all three functions;
#> for backwards compatibility, the knha and tdist arguments still
#> work, but are no longer documented
#>
#> - rma(yi, vi, weights=1, test="knha") now yields the same results as
#> rma(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 to rma.uni(), which then
#> tries to automatically determine the yi and vi variables in the data
#> frame (thanks to Christian Roever for the suggestion)
#>
#> - escalc() can now also be used to convert a regular data frame to an
#> escalc object
#>
#> - for measure="UCOR", the exact bias-correction is now used (instead
#> of the approximation); when vtype="UB", the exact equation is now
#> used to compute the unbiased estimate of the variance of the
#> bias-corrected correlation coefficient; hence gsl is now a suggested
#> package (needed to compute the hypergeometric function) and is
#> loaded when required
#>
#> - cooks.distance() now also works with rma.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 with sparse=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
#> for rma.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 with mean(abs(z_perm) >= abs(z_obs) - tol) (where tol is
#> a numerical tolerance)
#>
#> - permutest.rma.uni() gains permci 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 for
#> method.args (via control=list(hessianCtrl=list(...))) passed to
#> hessian() (from the numDeriv package) when using model="CM.EL" and
#> measure="OR"
#>
#> - in rma.glmm(), default method.args value for r passed to hessian()
#> 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() and addpoly() functions now have a new argument
#> called width, 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() and addpoly()
#> functions are now a bit more compact by default
#>
#> - more flexible efac argument in the various forest() 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 the
#> profile.rma.uni() and profile.rma.mv() functions
#>
#> - simplified baujat.rma.uni(), baujat.rma.mh(), and baujat.rma.peto()
#> to baujat.rma(), which now handles objects of class rma.uni, rma.mh,
#> and rma.peto
#>
#> - baujat.rma() gains argument symbol for more control over the
#> plotting symbol
#>
#> - labbe() gains a grid argument
#>
#> - more logical placement of labels in qqnorm.rma.uni(),
#> qqnorm.rma.mh(), and qqnorm.rma.peto() functions (and more control
#> thereof)
#>
#> - qqnorm.rma.uni() gains lty argument
#>
#> - added gosh.rma() and plot.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) in rma() 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 and dat.li2007) on the
#> effectiveness of intravenous magnesium in acute myocardial
#> infarction
#>
#> - methods package is now under Depends (in addition to Matrix), so
#> that rma.mv(..., sparse=TRUE) always works, even under Rscript
#>
#> - some general code cleanup
#>
#> - added more tests (and used a more consistent naming scheme for
#> tests)
#>
#> Changes in version 1.9-8 (2015-09-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, and methods to Imports (due to recent
#> change in how CRAN checks packages)
#>
#> - the struct argument for rma.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
#> for rma.uni and rma.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 the rma.mv() function;
#> for variance and correlation parameters, the function provides
#> profile likelihood confidence intervals; the output generated by the
#> confint() 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 the sigma2, tau2,
#> rho, gamma2, or phi arguments)
#>
#> - for measure="MD" and measure="ROM", one can now choose between
#> vtype="LS" (the default) and vtype="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(),
#> and BIC() 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 using add=0, in which case some of
#> the observed outcomes (e.g., log odds or log odds ratios) may be NA
#>
#> - when using rma.glmm() with model="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() with model="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 as cumul(), influence(), and
#> profile(); that way, one does not get inundated with the same
#> warning(s)
#>
#> - some (overdue) updates to the documentation
#>
#> Changes in version 1.9-7 (2015-05-22)
#>
#> - default optimizer for rma.mv() changed to nlminb() (instead of
#> optim() with "Nelder-Mead"); extensive testing indicated that
#> nlminb() (and also optim() with "BFGS") is typically quicker and
#> more robust; note that this is in principle a non-backwards
#> compatible change, but really a necessary one; and you can always
#> revert to the old behavior with control=list(optimizer="optim",
#> optmethod="Nelder-Mead")
#>
#> - all tests have been updated in accordance with the recommended
#> syntax of the testthat package; for example, expect_equivalent(x,y)
#> is used instead of test_that(x, is_equivalent_to(y))
#>
#> - changed a few is_identical_to() comparisons to expect_equivalent()
#> ones (that failed on Sparc Solaris)
#>
#> Changes in version 1.9-6 (2015-05-07)
#>
#> - funnel() now works again for rma.glmm objects (note to self: quit
#> breaking things that work!)
#>
#> - rma.glmm() will now only issue a warning (and not an error) when the
#> Hessian for the saturated model cannot be inverted (which is needed
#> to compute the Wald-type test for heterogeneity, so the test
#> statistic is then simply set to NA)
#>
#> - rma.mv() now allows for two terms of the form ~ inner | outer; the
#> variance components corresponding to such a structure are called
#> gamma2 and correlations are called phi; other functions that work
#> with objects of class rma.mv have been updated accordingly
#>
#> - rma.mv() now provides (even) more optimizer choices: nlm() from the
#> stats package, hjk() and nmk() from the dfoptim package, and
#> ucminf() from the ucminf package; choose the desired optimizer via
#> the control argument (e.g., control=list(optimizer="nlm"))
#>
#> - profile.rma.uni() and profile.rma.mv() now can do parallel
#> processing (which is especially relevant for rma.mv objects, where
#> profiling is crucial and model fitting can be slow)
#>
#> - the various confint() functions now have a transf argument (to apply
#> some kind of transformation to the model coefficients and confidence
#> interval bounds); coefficients and bounds for objects of class
#> rma.mh and rma.peto are no longer automatically transformed
#>
#> - the various forest() functions no longer enforce that the actual
#> x-axis limits (alim) encompass the observed outcomes to be plotted;
#> also, outcomes below or above the actual x-axis limits are no longer
#> shown
#>
#> - the various forest() functions now provide control over the
#> horizontal lines (at the top/bottom) that are automatically added to
#> the plot via the lty argument (this also allows for removing them);
#> also, the vertical reference line is now placed behind the
#> points/CIs
#>
#> - forest.default() now has argument col which can be used to specify
#> the color(s) to be used for drawing the study labels, points, CIs,
#> and annotations
#>
#> - the efac argument for forest.rma() now also allows two values, the
#> first for the arrows and CI limits, the second for summary estimates
#>
#> - corrected some axis labels in various plots when measure="PLO"
#>
#> - axes in labbe() plots now have "(Group 1)" and "(Group 2)" added by
#> default
#>
#> - anova.rma() gains argument L for specifying linear combinations of
#> the coefficients in the model that should be tested to be zero
#>
#> - in case removal of a row of data would lead to one or more
#> inestimable model coefficients, baujat(), cooks.distance(),
#> dfbetas(), influence(), and rstudent() could fail for rma.uni
#> objects; such cases are now handled properly
#>
#> - for models with moderators, the predict() function now shows the
#> study labels when they have been specified by the user (and newmods
#> is not used)
#>
#> - if there is only one fixed effect (model coefficient) in the model,
#> the print.infl.rma.uni() function now shows the DFBETAS values with
#> the other case diagnostics in a single table (for easier
#> inspection); if there is more than one fixed effect, a separate
#> table is still used for the DFBETAS values (with one column for each
#> coefficient)
#>
#> - added measure="SMCRH" to the escalc() function for the standardized
#> mean change using raw score standardization with heteroscedastic
#> population variances at the two measurement occasions
#>
#> - added measure="ROMC" to the escalc() function for the (log
#> transformed) ratio of means (response ratio) when the means reflect
#> two measurement occasions (e.g., for a single group of people) and
#> hence are correlated
#>
#> - added own function for computing/estimating the tetrachoric
#> correlation coefficient (for measure="RTET"); package therefore no
#> longer suggests polycor but now suggest mvtnorm (which is loaded as
#> needed)
#>
#> - element fill returned by trimfill.rma.uni() is now a logical vector
#> (instead of a 0/1 dummy variable)
#>
#> - print.list.rma() now also returns the printed results invisibly as a
#> data frame
#>
#> - added a new dataset (dat.senn2013) as another illustration of a
#> network meta-analysis
#>
#> - metafor now depends on at least version 3.1.0 of R
#>
#> Changes in version 1.9-5 (2014-11-24)
#>
#> - moved the stats and Matrix packages from Depends to Imports; as a
#> result, had to add utils to Imports; moved the Formula package from
#> Depends to Suggests
#>
#> - added update.rma() function (for updating/refitting a model); model
#> objects also now store and keep the call
#>
#> - the vcov() function now also extracts the marginal
#> variance-covariance matrix of the observed effect sizes or outcomes
#> from a fitted model (of class rma.uni or rma.mv)
#>
#> - rma.mv() now makes use of the Cholesky decomposition when there is a
#> random = ~ inner | outer formula and struct="UN"; this is
#> numerically more stable than the old approach that avoided
#> non-positive definite solutions by forcing the log-likelihood to be
#> -Inf in those cases; the old behavior can be restored with control =
#> list(cholesky=FALSE)
#>
#> - rma.mv() now requires the inner variable in an ~ inner | outer
#> formula to be a factor or character variable (except when struct is
#> "AR" or "HAR"); use ~ factor(inner) | outer in case it isn't
#>
#> - anova.rma.uni() function changed to anova.rma() that works now for
#> both rma.uni and rma.mv objects
#>
#> - the profile.rma.mv() function now omits the number of the variance
#> or correlation component from the plot title and x-axis label when
#> the model only includes one of the respective parameters
#>
#> - profile() functions now pass on the ... argument also to the title()
#> function used to create the figure titles (esp. relevant when using
#> the cex.main argument)
#>
#> - the drop00 argument of the rma.mh() and rma.peto() functions now
#> also accepts a vector with two logicals, the first applies when
#> calculating the observed outcomes, the second when applying the
#> Mantel-Haenszel or Peto's method
#>
#> - weights.rma.uni() now shows the correct weights when weighted=FALSE
#>
#> - argument showweight renamed to showweights in the forest.default()
#> and forest.rma() functions (more consistent with the naming of the
#> various weights() functions)
#>
#> - added model.matrix.rma() function (to extract the model matrix from
#> objects of class rma)
#>
#> - funnel() and radial() now (invisibly) return data frames with the
#> coordinates of the points that were drawn (may be useful for manual
#> labeling of points in the plots)
#>
#> - permutest.rma.uni() function now uses a numerical tolerance when
#> making comparisons (>= or <=) between an observed test statistic and
#> the test statistic under the permuted data; when using random
#> permutations, the function now ensures that the very first
#> permutation correspond to the original data
#>
#> - corrected some missing/redundant row/column labels in some output
#>
#> - most require() calls replaced with requireNamespace() to avoid
#> altering the search path (hopefully this won't break stuff ...)
#>
#> - some non-visible changes including more use of some (non-exported)
#> helper functions for common tasks
#>
#> - dataset dat.collins91985a updated (including all reported outcomes
#> and some more information about the various trials)
#>
#> - oh, and guess what? I updated the documentation ...
#>
#> Changes in version 1.9-4 (2014-07-30)
#>
#> - added method="GENQ" to rma.uni() for the generalized Q-statistic
#> estimator of tau^2, which allows for used-defined weights (note: the
#> DL and HE estimators are just special cases of this method)
#>
#> - when the model was fitted with method="GENQ", then confint() will
#> now use the generalized Q-statistic method to construct the
#> corresponding confidence interval for tau^2 (thanks to Dan Jackson
#> for the code); the iterative method used to obtain the CI makes use
#> of Farebrother's algorithm as implemented in the CompQuadForm
#> package
#>
#> - slight improvements in how the rma.uni() function handles
#> non-positive sampling variances
#>
#> - rma.uni(), rma.mv(), and rma.glmm() now try to detect and remove any
#> redundant predictors before the model fitting; therefore, if there
#> are exact linear relationships among the predictor variables (i.e.,
#> perfect multicollinearity), terms are removed to obtain a set of
#> predictors that is no longer perfectly multicollinear (a warning is
#> issued when this happens); note that the order of how the variables
#> are specified in the model formula can influence which terms are
#> removed
#>
#> - the last update introduced an error in how hat values were computed
#> when the model was fitted with the rma() function using the Knapp &
#> Hartung method (i.e., when knha=TRUE); this has been fixed
#>
#> - regtest() no longer works (for now) with rma.mv objects (it wasn't
#> meant to in the first place); if you want to run something along the
#> same lines, just consider adding some measure of the precision of
#> the observed outcomes (e.g., their standard errors) as a predictor
#> to the model
#>
#> - added "sqrtni" and "sqrtninv" as possible options for the predictor
#> argument of regtest()
#>
#> - more optimizers are now available for the rma.mv() function via the
#> nloptr package by setting control = list(optimizer="nloptr"); when
#> using this optimizer, the default is to use the BOBYQA
#> implementation from that package with a relative convergence
#> criterion of 1e-8 on the function value (see documentation on how to
#> change these defaults)
#>
#> - predict.rma() function now works for rma.mv objects with multiple
#> tau^2 values even if the user specifies the newmods argument but not
#> the tau2.levels argument (but a warning is issued and the prediction
#> intervals are not computed)
#>
#> - argument var.names now works properly in escalc() when the user has
#> not made use of the data argument (thanks to Jarrett Byrnes for
#> bringing this to my attention)
#>
#> - added plot() function for cumulative random-effects models results
#> as obtained with the cumul.rma.uni() function; the plot shows the
#> model estimate on the x-axis and the corresponding tau^2 estimate on
#> the y-axis in the cumulative order of the results
#>
#> - fixed the omitted offset term in the underlying model fitted by the
#> rma.glmm() function when method="ML", measure="IRR", and
#> model="UM.FS", that is, when fitting a mixed-effects Poisson
#> regression model with fixed study effects to two-group event count
#> data (thanks to Peter Konings for pointing out this error)
#>
#> - added two new datasets (dat.bourassa1996, dat.riley2003)
#>
#> - added function replmiss() (just a useful helper function)
#>
#> - package now uses LazyData: TRUE
#>
#> - some improvements to the documentation (do I still need to mention
#> this every time?)
#>
#> Changes in version 1.9-3 (2014-05-05)
#>
#> - some minor tweaks to rma.uni() that should be user transparent
#>
#> - rma.uni() now has a weights argument, allowing the user to specify
#> arbitrary user-defined weights; all functions affected by this have
#> been updated accordingly
#>
#> - better handling of mismatched length of yi and ni vectors in
#> rma.uni() and rma.mv() functions
#>
#> - subsetting is now handled as early as possible within functions with
#> subsetting capabilities; this avoids some (rare) cases where studies
#> ultimately excluded by the subsetting could still affect the results
#>
#> - some general tweaks to rma.mv() that should make it a bit faster
#>
#> - argument V of rma.mv() now also accepts a list of var-cov matrices
#> for the observed effects or outcomes; from the list elements, the
#> full (block diagonal) var-cov matrix V is then automatically
#> constructed
#>
#> - rma.mv() now has a new argument W allowing the user to specify
#> arbitrary user-defined weights or an arbitrary weight matrix
#>
#> - rma.mv() now has a new argument sparse; by setting this to TRUE, the
#> function uses sparse matrix objects to the extent possible; this can
#> speed up model fitting substantially for certain models (hence, the
#> metafor package now depends on the Matrix package)
#>
#> - rma.mv() now allows for struct="AR" and struct="HAR", to fit models
#> with (heteroscedastic) autoregressive (AR1) structures among the
#> true effects (useful for meta-analyses of studies reporting outcomes
#> at multiple time points)
#>
#> - rma.mv() now has a new argument Rscale which can be used to control
#> how matrices specified via the R argument are scaled (see docs for
#> more details)
#>
#> - rma.mv() now only checks for missing values in the rows of the lower
#> triangular part of the V matrix (including the diagonal); this way,
#> if Vi = matrix(c(.5,NA,NA,NA), nrow=2, ncol=2) is the var-cov matrix
#> of the sampling errors for a particular study with two outcomes,
#> then only the second row/column needs to be removed before the model
#> fitting (and not the entire study)
#>
#> - added five new datasets (dat.begg1989, dat.ishak2007, dat.fine1993,
#> dat.konstantopoulos2011, and dat.hasselblad1998) to provide further
#> illustrations of the use of the rma.mv() function (for meta-analyses
#> combining controlled and uncontrolled studies, for meta-analyses of
#> longitudinal studies, for multilevel meta-analyses, and for network
#> meta-analyses / mixed treatment comparison meta-analyses)
#>
#> - added rstandard.rma.mv() function to compute standardized residuals
#> for models fitted with the rma.mv() function (rstudent.rma.mv() to
#> be added at a later point); also added hatvalues.rma.mv() for
#> computing the hat values and weights.rma.uni() for computing the
#> weights (i.e., the diagonal elements of the weight matrix)
#>
#> - the various weights() functions now have a new argument type to
#> indicate whether only the diagonal elements of the weight matrix
#> (default) or the entire weight matrix should be returned
#>
#> - the various hatvalues() functions now have a new argument type to
#> indicate whether only the diagonal elements of the hat matrix
#> (default) or the entire hat matrix should be returned
#>
#> - predict.rma() function now works properly for rma.mv objects (also
#> has a new argument tau2.levels to specify, where applicable, the
#> levels of the inner factor when computing prediction intervals)
#>
#> - forest.rma() function now provides a bit more control over the color
#> of the summary polygon and is now compatible with rma.mv objects;
#> also, has a new argument lty, which provides more control over the
#> line type for the individual CIs and the prediction interval
#>
#> - addpoly.default() and addpoly.rma() now have a border argument (for
#> consistency with the forest.rma() function); addpoly.rma() now
#> yields the correct CI bounds when the model was fitted with
#> knha=TRUE
#>
#> - forest.cumul.rma() now provides the correct CI bounds when the
#> models were fitted with the Knapp & Hartung method (i.e., when
#> knha=TRUE in the original rma() function call)
#>
#> - the various forest() functions now return information about the
#> chosen values for arguments xlim, alim, at, ylim, rows, cex,
#> cex.lab, and cex.axis invisibly (useful for tweaking the default
#> values); thanks to Michael Dewey for the suggestion
#>
#> - the various forest() functions now have a new argument, clim, to set
#> limits for the confidence/prediction interval bounds
#>
#> - cumul.mh() and cumul.peto() now get the order of the studies right
#> when there are missing values in the data
#>
#> - the transf argument of leave1out.rma.mh(), leave1out.rma.peto(),
#> cumul.rma.mh(), and cumul.rma.peto() should now be used to specify
#> the actual function for the transformation (the former behavior of
#> setting this argument to TRUE to exponentiate log RRs, log ORs, or
#> log IRRs still works for back-compatibility); this is more
#> consistent with how the cumul.rma.uni() and leave1out.rma.uni()
#> functions work and is also more flexible
#>
#> - added bldiag() function to construct a block diagonal matrix from (a
#> list of) matrices (may be needed to construct the V matrix when
#> using the rma.mv() function); bdiag() function from the Matrix
#> package does the same thing, but creates sparse matrix objects
#>
#> - profile.rma.mv() now has a startmethod argument; by setting this to
#> "prev", successive model fits are started at the parameter estimates
#> from the previous model fit; this may speed things up a bit; also,
#> the method for automatically choosing the xlim values has been
#> changed
#>
#> - slight improvement to profile.rma.mv() function, which would throw
#> an error if the last model fit did not converge
#>
#> - added a new dataset (dat.linde2005) for replication of the analyses
#> in Viechtbauer (2007)
#>
#> - added a new dataset (dat.molloy2014) for illustrating the
#> meta-analysis of (r-to-z transformed) correlation coefficients
#>
#> - added a new dataset (dat.gibson2002) to illustrate the combined
#> analysis of standardized mean differences and probit transformed
#> risk differences
#>
#> - computations in weights.mh() slightly changed to prevent integer
#> overflows for large counts
#>
#> - unnecessary warnings in transf.ipft.hm() are now suppressed (cases
#> that raised those warnings were already handled correctly)
#>
#> - in predict(), blup(), cumul(), and leave1out(), when using the
#> transf argument, the standard errors (which are NA) are no longer
#> shown in the output
#>
#> - argument slab in various functions will now also accept non-unique
#> study labels; make.unique() is used as needed to make them unique
#>
#> - vignettes("metafor") and vignettes("metafor_diagram") work again
#> (yes, I know they are not true vignettes in the strict sense, but I
#> think they should show up on the CRAN website for the package and
#> using a minimal valid Sweave document that is recognized by the R
#> build system makes that happen)
#>
#> - escalc() and its summary() method now keep better track when the
#> data frame contains multiple columns with outcome or effect size
#> values (and corresponding sampling variances) for print formatting;
#> also simplified the class structure a bit (and hence,
#> print.summary.escalc() removed)
#>
#> - summary.escalc() has a new argument H0 to specify the value of the
#> outcome under the null hypothesis for computing the test statistics
#>
#> - added measures "OR2DN" and "D2ORN" to escalc() for transforming log
#> odds ratios to standardized mean differences and vice-versa, based
#> on the method of Cox & Snell (1989), which assumes normally
#> distributed response variables within the two groups before the
#> dichotomization
#>
#> - permutest.rma.uni() function now catches an error when the number of
#> permutations requested is too large (for R to even create the
#> objects to store the results in) and produces a proper error message
#>
#> - funnel.rma() function now allows the yaxis argument to be set to
#> "wi" so that the actual weights (in %) are placed on the y-axis
#> (useful when arbitrary user-defined have been specified)
#>
#> - for rma.glmm(), the control argument optCtrl is now used for passing
#> control arguments to all of the optimizers (hence, control arguments
#> nlminbCtrl and minqaCtrl are now defunct)
#>
#> - rma.glmm() should not throw an error anymore when including only a
#> single moderator/predictor in the model
#>
#> - predict.rma() now returns an object of class list.rma (therefore,
#> function print.predict.rma() has been removed)
#>
#> - for rma.list objects, added [, head(), and tail() methods
#>
#> - automated testing using the testthat package (still many more tests
#> to add, but finally made a start on this)
#>
#> - encoding changed to UTF-8 (to use 'foreign characters' in the docs
#> and to make the HTML help files look a bit nicer)
#>
#> - guess what? some improvements to the documentation! (also combined
#> some of the help files to reduce the size of the manual a bit; and
#> yes, it's still way too big)
#>
#> Changes in version 1.9-2 (2013-10-07)
#>
#> - 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)
#>
#> - fixed (silly) error that would prevent rma.glmm() from running for
#> measures "IRR", "PLO", and "IRLN" when there are missing values in
#> the data (lesson: add some missing values to datasets for the unit
#> tests!)
#>
#> - 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)
#>
#> Changes in version 1.9-1 (2013-07-20)
#>
#> - 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
#>
#> Changes in version 1.9-0 (2013-06-21)
#>
#> - 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
#>
#> Changes in version 1.8-0 (2013-04-11)
#>
#> - 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
#>
#> Changes in version 1.7-0 (2013-02-06)
#>
#> - 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 method 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)
#>
#> - prediction 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.rma.mh(), and confint.rma.peto()
#> functions
#>
#> - when transf or atransf argument was a monotonically decreasing
#> function, then confidence and prediction 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
#>
#> Changes in version 1.6-0 (2011-04-13)
#>
#> - trimfill.rma.uni() 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 (measure="ROM")
#>
#> - 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
#>
#> Changes in version 1.5-0 (2010-12-16)
#>
#> - the metafor package now has its own project website at:
#> https://www.metafor-project.org
#>
#> - 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 (measure="IRR", "IRD", "IRSD",
#> "IR", "IRLN", "IRS", and "IRFT")
#>
#> - 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
#>
#> Changes in version 1.4-0 (2010-07-30)
#>
#> - a paper about the package has now been published in the Journal of
#> Statistical Software (https://www.jstatsoft.org/v36/i03/)
#>
#> - added citation info; see: citation("metafor")
#>
#> - the metafor package now depends on the nlme package
#>
#> - added extractor functions for the AIC, BIC, and deviance
#>
#> - some updates to the documentation
#>
#> Changes in version 1.3-0 (2010-06-25)
#>
#> - the metafor package now depends on the Formula package
#>
#> - made escalc() generic and implemented a default and a formula
#> interface
#>
#> - added the (inverse) arcsine transformation to the set of
#> transformation functions
#>
#> Changes in version 1.2-0 (2010-05-18)
#>
#> - 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 permutation 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())
#>
#> Changes in version 1.1-0 (2010-04-28)
#>
#> - cint() generic removed and replaced with confint() method for
#> objects of class rma.uni
#>
#> - slightly improved the code to set the x-axis title in the forest()
#> and funnel() functions
#>
#> - added coef() method for permutest.rma.uni objects
#>
#> - 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
#>
#> Changes in version 1.0-1 (2010-02-02)
#>
#> - version jump in conjunction with the upcoming publication of a paper
#> in the Journal of Statistical Software describing the metafor
#> 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., for fixed- and random-effets models)
#>
#> - forest() function can now also show the prediction 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 called 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() to extract the weights used when fitting
#> models with rma.uni()
#>
#> - some small improvements to the documentation
#>
#> Changes in version 0.5-7 (2009-12-06)
#>
#> - added permutest() function for permutation tests
#>
#> - added metafor.news() function to display the NEWS file of the
#> metafor package within R (based on 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)
#>
#> Changes in version 0.5-6 (2009-10-19)
#>
#> - 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)
#>
#> Changes in version 0.5-5 (2009-10-08)
#>
#> - 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
#>
#> Changes in version 0.5-4 (2009-09-18)
#>
#> - 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
#>
#> Changes in version 0.5-3 (2009-07-31)
#>
#> - 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
#>
#> Changes in version 0.5-2 (2009-07-06)
#>
#> - 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 for adjusting the
#> size of the labels, annotations, and symbols in the forest()
#> function when the number of studies is large
#>
#> Changes in version 0.5-1 (2009-06-14)
#>
#> - made some small changes to the documentation (some typos corrected,
#> some confusing points clarified)
#>
#> Changes in version 0.5-0 (2009-06-05)
#>
#> - first version released on CRAN