*! version 3.3 David Fisher 25nov2020

Title

admetan -- Perform meta-analysis of aggregate (summary) data

NOTE: As of November 2020, this command is no longer maintained. Please use the latest version of metan instead.

(The commands ipdmetan and ipdover continue to be maintained under the package name ipdmetan, available from SSC.)

Syntax

admetan varlist [if] [in]
[, options]

where varlist is one of the following:

Generic effect measures:

ES seES effect size and standard error

ES lci uci effect size and 95% confidence limits

Specific effect measures:

event_treat noevent_treat event_ctrl noevent_ctrl cell counts from 2x2 contingency table

n_treat mean_treat sd_treat n_ctrl mean_ctrl sd_ctrl sample size, mean and standard deviation
in treatment and control groups

Log-rank O-E and V:

O_E V observed minus expected number of events, and variance, from the control arm of a log-rank survival analysis
(must also specify logrank option; see below)

The terms "generic effect measure" and "specific effect measure", corresponding to Syntaxes 1 and 2 respectively in the ipdmetan documentation,
differentiate between input of an effect size and standard error that may be associated with any effect measure,
and which may only be analysed with inverse-variance based models and Cochran Q or I-squared heterogeneity statistics ("generic");
and input of cell counts from a 2x2 contingency table, means and SDs by treatment arm, or log-rank estimates of O-E and V
which allow for additional methods and statistics such as Mantel-Haenszel methods or Standardised Mean Differences ("specific").
For both admetan and ipdmetan, certain options are limited to "specific effect measure" input only.

Main
study(varname [, missing]) study (trial) identifier

by(varname [, missing]) group the studies in the output

citype(string) method of constructing confidence intervals for individual studies (not pooled results)

cumulative cumulative meta-analysis

influence investigate influence of each study in turn on the overall estimate

altwt (with cumulative or influence only) display study weights from the standard (non-cumulative or influence) model

coef, log display log effect sizes and confidence limits

eform_option display exponentiated (antilog) effect sizes and confidence limits

effect(string) title for "effect size" column in the output

keepall display all studies in the output, even those for which no effect could be estimated

keeporder display "no effect" studies in the order in which they would otherwise appear (by default these are moved to the end)

model(model) alternative models (random-effects etc.) for meta-analytic pooling

nograph suppress the forest plot

nohet suppress all heterogeneity statistics

nokeepvars do not add new variables to the dataset

norsample do not even add new variable _rsample recording which observations were used (cf. e(sample))

nooverall nosubgroup suppress overall pooling, or pooling within subgroups

notable suppress printing the table of effect sizes to screen; see also summaryonly

ovwt sgwt override default choice of whether to display overall weights or subgroup weights

qe(varname) variable containing Quality Effects (Doi et al 2015b; see also model)

re | random specify the standard DerSimonian & Laird random-effects model

t use a t-distribution on k-1 degrees of freedom to calculate confidence intervals for pooled results

sortby(varname|_n) ordering of studies in table and forest plot

wgt(varname) specify a variable containing user-defined weights

npts(varname) (generic effect measures only) specify variable containing participant numbers, to be displayed in forest plot if applicable

Specific effect measures only
breslow display Breslow-Day test for homogeneity of odds ratios

cc([#] [, cc_options]) use continuity correction value other than 0.5 for zero cells;
implement alternative methods of Sweeting (2004)

nocc suppress continuity correction entirely

chi2 test significance of pooled odds ratio using chi-squared statistic (instead of z)

cochranq display Cochran's Q heterogeneity statistic (default is Mantel-Haenszel)

cornfield compute confidence intervals for odds ratios by method of Cornfield

nointeger allow cell counts to be non-integers

iv use inverse-variance pooling (default is Mantel-Haenszel)

peto use Peto's method to pool odds ratios

cohen pool standardised mean differences (SMDs) by the method of Cohen (default)

hedges pool SMDs by the method of Hedges

glass pool SMDs by the method of Glass

md, wmd, nostandard pool unstandardised ("weighted") mean differences (WMDs)

Log-rank O-E and V only
logrank specify that varlist contains O_E V rather than ES seES

Forest plot and/or saved data
efficacy additionally display odds ratios or risk ratios expressed in terms of vaccine efficacy

hetstat(string) override default display of I-squared statistic on the forest plot;
display heterogeneity p-value

rfdist, rflevel(#) display approximate predictive interval, with optional coverage level

lcols(varlist), rcols(varlist) display (and/or save) columns of additional data

plotid(varname) define groups of observations in which to apply specific plot rendition options

summaryonly show only summary estimates (diamonds) in the forest plot and on screen

saving(saving_option) save data in the form of a "forestplot results set" to filename

nowarning suppress the default display of a note warning that studies are weighted from random effects anaylses

counts (specific effect measures only) display data counts (n/N or N, mean, SD) for treatment and control group

group1(string), group2(string) (specific effect measures only) specify title text for the two columns created by counts

npts (specific effect measures only) display participant numbers in the forest plot

oev (log-rank O-E and V only) display columns containing O_E and V

forestplot(forestplot_options) other options as described under forestplot

where model is model_name [, model_opts]

and where saving_option is filename [, replace stacklabel].

model_name

Note: references for particular models may be found in Fisher 2015
if not specifically referenced below.

tau-squared estimators for standard inverse-variance random-effects model
dl DerSimonian-Laird estimator (equivalent to specifying re alone, with no sub-option)

bdl | dlb Bootstrap DerSimonian-Laird estimator

ca | he | vc Cochran ANOVA-like estimator aka Hedges aka "variance component" estimator

eb | gq | mp Mandel-Paule aka Generalised Q aka "empirical Bayes" estimator

ml Maximum likelihood (ML) estimator

reml Restricted maximum likelihood (REML) estimator

hm Hartung-Makambi estimator (Hartung and Makambi 2003)

b0 bp Rukhin B0 and BP estimators

sj2s [, init(model_name)] Sidik-Jonkman two-step estimator, with initial estimate of tau-squared using model_name (default is vc)

dk2s [, init(vc | dl)] DerSimonian-Kacker two-step estimator (DerSimonian and Kacker 2007),
with initial estimate vc (default) or dl

sa [, isq(real) tausq(real)] Sensitivity analysis with user-defined I-squared
(taking values between 0 and 100; default is 80%) or tau-squared (>=0)

non-standard models, or modifications to standard model
hksj [, notruncate] Hartung-Knapp-Sidik-Jonkman variance correction
applied to the standard DerSimonian-Laird model;
optionally without truncation of correction factor at 1 (Röver et al 2015)

pl [, bartlett skovgaard z] Estimation using profile likelihood,
optionally with Bartlett's (Huizenga et al 2011) or Skovgaard's (Guolo 2012) correction.
Option z displays the signed (square-root) log-likelihood statistic compared to a standard normal distribution, instead of the default
log-likelihood statistic compared to a chi-squared distribution.

kr [, eim oim] Kenward-Roger variance correction,
using expected (default) or observed information matrix to compute degrees of freedom (Morris et al 2018)

bt Biggerstaff-Tweedie approximate Gamma model

hc Henmi-Copas approximate Gamma model (Henmi and Copas 2010)

ivhet "Inverse-variance heterogeneity" (IVHet) model (Doi et al 2015a)

mult Multiplicative heterogeneity model (Thompson and Sharp 1999)

model_opts

hksj [notruncate] The Hartung-Knapp-Sidik-Jonkman variance correction (see above)
may also be applied to any other standard model involving a tau-squared estimator; e.g. re(reml, hksj)

qprofile Request a confidence interval for tau-squared using Q Profile method (Viechtbauer 2007);
note that most iterative tau-squared estimators produce their own confidence intervals, which are otherwise reported by default

robust Use the Sidik-Jonkman robust (sandwich-like) variance estimator (Sidik and Jonkman 2006)

options for iteration, replication or numerical integration
itol(#) Tolerance for iteration convergence (with eb, ml, reml, pl, kr, bt or hc)

maxiter(#) Maximum number of iterations (as above)

maxtausq(#) Upper bound of search interval; may need to be raised in extreme cases (as above)

quadpts(#) Number of quadrature points to use in numerical integration (with bt or hc; see integrate)

reps(#) Number of replications for Bootstrap DerSimonian-Laird estimator (with bdl)

Description

admetan performs meta-analysis of aggregate (summary) data, in contrast to ipdmetan which performs meta-analysis of individual participant data (IPD).
It has all the functionality of the popular metan package, and includes many additional features.
As such, it may be seen as a direct update of metan.
In particular, the syntax of admetan has been deliberately kept similar to that of metan; any differences are noted below.

varlist must be supplied, and (as with metan) may contain two, three, four or six variables.
As noted in the Syntax section, these alternatives are categorised into syntaxes concerned with "generic effect measures"
and "specific effect measures". This is done for two reasons: to clarify certain options which are only permissible with specific effect measures;
and for consistency with the documentation for ipdmetan where there are substantial differences in command syntax.

"Specific effect measures" require a four- or a six-element varlist.
When four variables are supplied, these correspond to the number of events and non-events in the experimental group followed by those of the control group,
and analysis of binary data is performed on the 2x2 table.
With six variables, the data are assumed continuous and to be the sample size,
mean and standard deviation of the experimental group followed by those of the control group.

"Generic effect measures" require a two- or a three-element varlist.
If three variables are specified these are assumed to be the effect estimate and its lower and upper confidence interval.
Confidence intervals are assumed to be symmetric, and the standard error is derived as (CI width)/2z.
Hence, supplied confidence limits must be based on a Normal distribution, or the pooled result will not be accurate.
Finally, if two variables are specified, by default these are assumed to be the effect estimate and standard error.
However, for time-to-event data, the observed minus expected number of control-arm events (O-E) and variance (V) may instead be supplied.
In this case, the logrank option must also be supplied in order for admetan to interpret varlist correctly.

Most admetan options are also applicable to ipdmetan.
However, some options are only applicable to the "specific effect measure" syntax (Syntax 2) of ipdmetan
in which the IPD is directly collapsed into aggregate data.
Conversely, ipdmetan has options which are only applicable to "generic effect measures" (Syntax 1) and which are not applicable at all with admetan.

Options

Main

study(study_ID [, missing]) specifies the variable containing the study identifier,
which must be either integer-valued or string.
Alternatively, the metan syntax label([namevar=namevar], [yearvar=yearvar]) may be used.
If none of these are supplied, studies will simply be labelled sequentially as "1", "2", etc.
In the absence of [if] [in], the entire dataset in memory will be included
except observations for which varlist is entirely system missing.

missing requests that missing values be treated as potential study identifiers; the default is to exclude them.

by(subgroup_ID [, missing]) specifies a variable identifying subgroups of studies (and must therefore be constant within studies),
which must be either integer-valued or string.

missing requests that missing values be treated as potential subgroup identifiers; the default is to exclude them.

citype(string) specifies how confidence limits are constructed for individual studies.
Note that confidence limits for pooled results are calculated separately:
either consistently with the specified model,
or using the Normal (by default) or t (see the t option) distributions.

citype(normal) or citype(z) is the default, specifying use of the Normal distribution (i.e. a z-statistic)

citype(t) specifies use of the ("Student's") t distribution.
Degrees of freedom may be specified using the df(varname) option;
otherwise admetan will assume degrees of freedom of n-2 where n is the study sample size.

citype(logit) recreates the logit-transformed confidence limits outputted by default (as of Stata 13) by proportion.

cumulative requests that the meta-analysis be performed cumulatively; that is, performed repeatedly with one study being added each time, in the order specified by sortby().
Pooled effect information (tests of z = 0, heterogeneity etc.) will be based on the model following the addition of the final study.

influence requests that each study in turn is removed from the meta-analysis to investigate its influence on the overall result.
Pooled effect information remains identical to that if influence were not specified.

Note that for both cumulative and influence, use of random-effects and variance-correction models
may result in weights greater than 100%, since weights are expressed relative to the total weight in the model with all studies included.

altwt does not alter the effect estimates, but presents the original weights (and participant numbers in the forest plot, if applicable)
corresponding to each individual study, rather than the relative weights of each fitted cumulative or influence model.
In other words, presented weights are as if cumulative or influence were not specified.

eform_option specifies that effect sizes and confidence limits should be exponentiated in the table and forest plot.
The option also generates a heading for the effect size column.

coef or log are synonyms, and report results on the log scale (valid for ratio statistics only, that is OR, RR, HR etc).
If both eform_option and log are supplied, log takes priority.

effect(string) specifies a heading for the effect size column in the output.
This overrides any heading generated by eform_option.

keepall, keeporder request that all values of study_ID should be visible in the table and forest plot,
even if no effect could be estimated (e.g. due to insufficient observations or missing data).
For such studies, "(Insufficient data)" will appear in place of effect estimates and weights.

keeporder requests such studies are displayed in their "natural" sort order.
By default, such studies are moved to the end.

model(model_name [, model_opts])
specifies a model for meta-analytic pooling other than the standard DerSimonian-Laird random-effects model.

This includes a range of alternative estimators for the between-study heterogeneity (tau-squared),
but also models which correct the variance of the pooled estimate, or use alternative weighting systems, or something else.
Such models are often proposed to improve statistical performance under conditions such as a limited number of studies,
or the suspected presence of publication bias.

See also the qe(varname) option.

nograph, notable request the suppression of, respectively,
construction of the forest plot and the table of effect sizes.
Additionally, the forest plot option summaryonly has a similar effect to notable on the printed output.

nohet suppresses heterogeneity statistics in both table and forest plot.

nokeepvars, norsample specify that new variables
should not be added to the dataset upon conclusion of the routine.

nokeepvars suppresses the addition of effect statistics such as _ES, _seES and _NN but retains _rsample.
Effect statistics are instead returned in the matrix r(coeffs) (see ipdmetan).

norsample further suppresses the addition of the variable _rsample,
an analogue of e(sample) which identifies which observations were included in the analysis.
Therefore, norsample requests that the data in memory not be changed in any way
upon conclusion of the routine.

nooverall, nosubgroup affect which groups of data are pooled, thus affecting both the table of effect sizes
and the forest plot (if applicable).

nooverall suppresses the overall pooled effect, so that (for instance) subgroups are considered entirely
independently. Between-subgroup heterogeneity statistics are also suppressed.

nosubgroup suppresses the within-subgroup pooled effects, so that subgroups are displayed
separately but with a single overall pooled effect with associated heterogeneity statistics.

npts(varname) specifies a variable containing numbers of participants in each study, for display in tables and forest plots.

ovwt, sgwt override the default choice of whether to display overall weights or within-subgroup weights
in the screen output and forest plot. Note that this makes no difference to calculations of pooled effect estimates,
as weights are normalised anyway.

qe(varname) specifies a variable, containing quality scores for each study,
with which to run the Quality Effects model (Doi et al 2015b).

re | random specify the standard DerSimonian and Laird random-effects model;
see also model(model_name)

t requests that a ("Student's") t distribution with k-1 degrees of freedom be used to calculate confidence intervals
for pooled results, where k is the number of studies. Intervals will be at least as wide as using a Normal distribution.
Note that certain random-effects and variance-correction models (e.g. Hartung-Knapp-Sidik-Jonkman) use a t distribution by default.

See also the citype() option, which requests alternative confidence intervals for individual studies
but not the pooled result.

sortby(varname) allows user-specified ordering of studies in the table and forest plot,
without altering the data in memory.

wgt(varname) specifies user-defined weighting for any data type. You should only use this option if you are satisfied that the weights are meaningful.

Regardless of whether a fixed- or random-effects model is specified, pooled effects are calculated as:

theta = sum(w_i y_i) / sum(w_i)

For a fixed-effect model, pooled effect variances are calculated as:

Var(theta) = sum(w_i^2 v_i) / sum(w_i)^2

and for a random-effects model:

Var(theta) = sum(w_i^2 (v_i + tau^2)) / sum(w_i)^2

where v_i are the individual study variances and w_i are the user-defined weights.

Note that the scale of user-defined weights is immaterial, since individual weights are normalised.
Hence, once run, an analysis may be recreated using the option wgt(_WT). This also applies to datasets created using saving().
(If the raw numbers stored in varname are important, they may be saved and displayed using the forest plot options lcols() or rcols().)

Specific effect measures only

For cell counts from 2x2 contingency tables (that is, a four-element varlist),
the default outcome is a Risk Ratio (Relative Risk), pooled using the Mantel-Haenszel method
with the associated Mantel-Haenszel heterogeneity statistic.
For sample sizes, means and SDs (that is, a six-element varlist),
the default outcome is a Standardised Mean Difference (SMD) pooled using the method of Cohen.
The following options act with respect to these defaults, over-riding them if appropriate.

breslow requests the Breslow-Day test for homogeneity of Odds Ratios (Breslow and Day 1980).

cc([#] [, cc_options]) controls continuity correction in the case where studies contain zero cells.

By default (unless using Peto odds ratios) admetan adds 0.5 to each cell of a trial where a zero is encountered
to enable finite variance estimators to be derived.
However, the cc(#) option allows the use of other constants (including none). See also the nointeger option.

nocc is synonymous with cc(0), and suppresses continuity correction.
Studies containing zero cells are likely to be excluded from the analysis.

Sweeting (2004) discusses the issue of continuity correction, and suggested two alternative approaches.
In both cases a constant of proportionality is required, which defaults to 0.5 but may be chosen by the user:

cc([#], opposite) uses the reciprocal of the opposite group arm size as the correction term.

cc([#], empirical) uses an empirical estimate for the correction term, derived from the remaining studies.
This approach requires that at least one study does not contain zero cells.

chi2 displays the chi-squared statistic (instead of z) for the test of significance of the pooled effect size.
This is available only for odds ratios pooled using Peto or Mantel-Haenszel methods.

cochranq requests that Cochran's Q heterogeneity statistic be reported.

cornfield computes confidence intervals for odds ratios by method of Cornfield, rather than the (default) Woolf method
(see help for cc; not to be confused with admetan's cc() option!).

nointeger allows cell counts or sample sizes to be non-integers.
This may be useful when a variable continuity correction is sought for studies containing zero cells;
but may also be used in other circumstances, such as where a cluster-randomised trial is to be incorporated
and the "effective sample size" is less than the total number of observations.

iv requests that pooled analysis is done using the inverse-variance method.

peto requests that pooling of Odds Ratios is done using the method of Peto.

cohen, hedges, glass pool standardised mean differences by the methods of Cohen (default),
Hedges and Glass respectively (Deeks, Altman and Bradburn 2001).
Only appropriate with continuous data; that is, a six-element varlist.

md, wmd, nostandard are synonyms, and pool unstandardised ("weighted") mean differences.
Only appropriate with continuous data; that is, a six-element varlist.

logrank specifies that a two-element varlist supplied to admetan contains the statistics O-E and V
rather than the default ES and seES. See also the oev option.

Forest plot and/or saved data

efficacy expresses results as the vaccine efficacy (the proportion of cases that would have been prevented
in the placebo group that would have been prevented had they received the vaccination).
Only available with odds ratios (OR) or risk ratios (RR).

hetstat(string) alters the default heterogeneity information displayed on the forest plot. string can be either, or both, of:

pvalue requests that the p-value associated with the relevant heterogeneity test be displayed.

q (inverse-variance models only) or isq (other models only) changes the heterogeneity statistic that appears on the forest plot.
For inverse-variance models, the default is I-squared which can optionally be changed to Cochran's Q statistic.
Otherwise, the default is the Cochran, Mantel-Haenszel or Peto Q statistic (as appropriate), from which I-squared can optionally be derived
as (Q - Qdf)/Q.

rfdist displays the confidence interval of the approximate predictive distribution of a future trial, based on the extent of heterogeneity.
This incorporates uncertainty in the location and spread of the random effects distribution
using the formula t(df) * sqrt(se2 + tau2) where t is the t-distribution with k-2 degrees of freedom,
se2 is the squared standard error and tau2 the heterogeneity statistic.
The CI is then displayed with lines extending from the diamond.
Note that with <3 studies the distribution is inestimable and thus not displayed (this behaviour differs from that in metan)
and where heterogeneity is zero there is still a slight extension as the t-statistic is always greater than the corresponding normal deviate.
For further information see Higgins and Thompson (2009).

rflevel(#) specifies the coverage (e.g. 95 percent) for the confidence interval of the predictive distribution.
Default is c_level. See set level.

lcols(varlist), rcols(varlist) define columns of additional data to the left or right of the graph.
By default, the first two columns on the right contain the effect size and weight. If counts is used this will be set as the third column.
Columns are labelled with the variable label, or the variable name if this is not defined.

Note: for compatibility with metan, the first variable specified in lcols() is assumed to be the study identifier
if one is not otherwise specified with study() or label().

summaryonly shows only summary estimates in the graph.
This may be of use for multiple subgroup analyses; see also stacklabel.

saving(filename [, replace stacklabel]) saves the forestplot "results set" created by
ipdmetan in a Stata data file for further use or manipulation; see saved datasets.

replace overwrites filename

stacklabel takes the variable label of the left-most column variable (usually study_ID),
which would usually appear outside the plot region as the column heading, and instead stores it in the first observation of _LABELS.
This allows multiple such datasets to be appended without this information being lost.

counts (specific effect measures only) displays data counts (n/N) for each group when using binary data;
or the sample size, mean and SD for each group if mean differences are used.

group1(string), group2(string) are for use with the counts option, and contain names for the two groups.
If these are not supplied, the default names "Treatment" and "Control" are used.

npts (specific effect measures only) displays participant numbers in a column to the left of the graph.
(Note that for generic effect measures, participant numbers need instead to be supplied using the npts(varname) option.)

oev (only appropriate with logrank) displays the statistics O-E and V in columns to the right of the graph.

Saved results

By default, admetan adds new variables to the dataset corresponding to the individual study effect sizes,
standard errors, confidence intervals and weights used by the program.
Amongst other things, this provides a method of obtaining effect sizes and standard errors from other data structures such as 2x2 cell counts.
These new variables may be suppressed using the nokeepvars or norsample options.

(Note that, if cumulative or influence, these variables will still contain
individual study characteristics, which will therefore not agree with the results table shown on-screen,
except for the first iteration of a cumulative analysis.)

The following new variables may be added:

_ES Effect size (ES) on the interval scale (e.g. log odds ratio)

_seES Standard error of ES

_LCI Lower confidence limit for ES

_UCI Upper confidence limit for ES

_WT Study percentage weight (between 0 and 100)

_NN Study sample size

_rsample Marker of which observations were used in the analysis

admetan also saves the following in r():

(with some variation, and in addition to any scalars saved by forestplot)

Scalars

r(k) Number of included studies k

r(n) Number of included participants

r(eff) Overall pooled effect size

r(se_eff) Standard error of overall pooled effect size

r(Q) Q statistic of heterogeneity (with degrees of freedom k-1)

Macros

r(citype) Method of constructing study-level confidence intervals

r(method) Method of constructing study-level effect estimates

r(model) Pooling method used (e.g. Mantel-Haenszel, fixed-effect, DerSimonian-Laird)

r(measure) Name of effect measure

Matrices

r(ovstats) Matrix of overall effects, test statistics, heterogeneity statistics, p-values etc.

r(bystats) Matrix of effects, heterogeneity statistics etc. by subgroup

The following results may also be saved, depending on the combination of effect measure and model:

Scalars (specific effect measures only)

r(OR), r(RR) Mantel-Haenszel estimates of Odds Ratio or Risk Ratio (if appropriate)

r(chi2) Chi-squared test statistic (if requested)

r(OE), r(V) Overall pooled OE and V statistics (if appropriate)

r(cger), r(tger) Average event rate in control and treatment groups

Scalars (inverse-variance models only)

r(tausq) Between-study variance tau-squared

r(sigmasq) Average within-study variance

r(Isq) Heterogeneity measure I-squared

r(HsqM) Heterogeneity measure H-squared (Mittlböck modification)

r(Qr) "Generalised" Q, i.e. Cochran's Q calculated using random-effects weights and pooled estimate

Scalars (iterative random-effects models only; see mf_mm_root for interpretations of convergence success values)

r(tsq_var) Estimated variance of tau-squared

r(tsq_lci) Lower confidence limit for tau-squared

r(tsq_uci) Upper confidence limit for tau-squared

r(rc_tausq) Whether tau-squared point estimate converged successfully

r(rc_tsq_lci) Whether tau-squared lower confidence limit converged successfully

r(rc_tsq_uci) Whether tau-squared upper confidence limit converged successfully

r(rc_eff_lci) Whether effect estimate lower confidence limit converged successfully

r(rc_eff_uci) Whether effect estimate upper confidence limit converged successfully

Saved datasets

In order to construct a forest plot, admetan manipulates the data originally in memory into a format that forestplot understands.
This "forestplot results set" can be saved in a Stata data file using the saving() option, allowing the user to further manipulate it and
hence create highly customised forest plots.

The structure of these "results sets" is such that each row of data will appear in the plot, in the same order (top to bottom).
Variable labels will appear above columns of data within the plot region; value labels and formats (including string justification)
are honoured where possible. See forestplot for further details of how such data is interpreted, and for additional options.

Variables specified in lcols() or rcols() will have their variable names, labels and formats preserved within "results sets".
Otherwise, variables are given standardised names, as follows:

Core variables

_USE Indicates the type of content in each observation (e.g. study effect, pooled effect); see forestplot

_STUDY Value-labelled numeric variable identifying the studies

_LABELS String containing general information to be displayed on the left-hand side of the forestplot, including study names

_ES Effect size (ES) on the interval scale (see saved results)

_seES Standard error of ES (see saved results)

_LCI Lower confidence limit for ES (see saved results)

_UCI Upper confidence limit for ES (see saved results)

_NN Study sample size (see saved results)

_WT Study percentage weight (see saved results)

_EFFECT String containing the effect size and confidence limits together, on the display scale (i.e. exponentiated if specified)

Option-dependent variables

_BY Value-labelled numeric variable identifying study subgroups (see by() option)

_CC Marker of whether continuity correction was applied (see cc option)

_counts1 String containing "events/total" numbers in the research arm (see counts option)

_counts0 String containing "events/total" numbers in the control arm (see counts option)

_counts1msd String containing "mean (SD)" in the research arm (see counts option)

_counts0msd String containing "mean (SD)" in the control arm (see counts option)

_OE Logrank O-E (see logrank option)

_V Logrank V (see logrank option)

_VE String containing vaccine efficacy and confidence limits (see efficacy option)

_rfLCI Lower confidence limit of approximate predictive distribution (see rfdist option)

_rfUCI Upper confidence limit of approximate predictive distribution (see rfdist option)

Some of these variables have associated characteristics; type char list to see these.

Note: Differences from metan

This version of admetan has been designed so that most syntaxes and options valid with metan will also work with admetan.
However, there are some exceptions. In particular, with admetan:

Options first(), firststats(), second(), secondstats() and nosecsub are not currently implemented (as of admetan v3.0);
the results of these options may instead be recreated using the saving() option and manipulating the saved dataset

Similarly, the forest plot option double is not currently implemented.

Most options specific to the forest plot (i.e. those that do not affect the results appearing in the Results Window)
need to be placed within the forestplot() option rather than directly to admetan. This includes nostats and nowt.

nooverall does not automatically enforce nowt

Prediction intervals (rfdist) are not displayed with dotted lines if the number of studies is less than three;
instead, the interval is simply not displayed at all. A message is printed in the Results Window explaining this.

If wgt() is supplied, the displayed Q statistic will still be based on the inverse-variance fixed-effect model.
metan here uses a statistic based on fixed-effect weights but the newly-weighted pooled effect size, which is just confusing.
Instead, admetan returns the "generalised Q" based on the new weights (scaled by the pooled variance), and the newly-weighted pooled effect size,
in r(Qr); whilst r(Q) contains the standard Cochran Q based on inverse-variance weights (i.e. ignoring wgt() in its calculation).
Note that the fixed-effect Q statistic is also displayed when a random-effects model is specified, so this behaviour is entirely consistent.

Examples

All examples are taken directly from metan, and use a simulated example dataset (Ross Harris 2006)

. use http://fmwww.bc.edu/repec/bocode/m/metan_example_data, clear

Risk difference from raw cell counts, random effects model, "label" specification with counts displayed
(demonstrating a direct port of metan syntax to admetan with no changes)

. admetan tdeath tnodeath cdeath cnodeath,

rd random label(namevar=id, yearvar=year) counts

(click to run)

Sort by year, use data columns syntax with all column data left-justified. Specify percentage of graph as text;
suppress stats, weight, heterogeneity stats and table.

. admetan tdeath tnodeath cdeath cnodeath, notable

sortby(year) lcols(id year country) rcols(population)

forestplot(astext(60) nostats nowt nohet leftjustify)

(click to run)

Analyse continuous data (six-parameter syntax), stratify by type of study, with weights summing to 100% within sub group,
display random-effects predictive distribution, show raw data counts, display "favours treatment vs. favours control" labels

. admetan tsample tmean tsd csample cmean csd,

study(id) by(type_study) sgwt random rfdist counts

forestplot(favours(Treatment reduces blood pressure # Treatment increases blood pressure))

(click to run)

Use admetan to generate log odds ratio and standard error from the raw cell counts,
then analyse with two-parameter syntax. Graph has exponential form,
scale is forced within set limits and ticks added, effect label specified.

. admetan tdeath tnodeath cdeath cnodeath, or nograph nooverall notable

. rename _ES logor

. rename _seES selogor

. admetan logor selogor, or

forestplot(xlabel(0.5 1 1.5 2 2.5, force) xtick(0.75 1.25 1.75 2.25))

(click to run)

Display diagnostic test data with three-parameter syntax. Weight is number of positive diagnoses, axis label set
and null specified at 50%. Overall effect estimate is not displayed, graph for visual examination only.

. admetan percent lowerci upperci, wgt(n_positives) study(id) nooverall notable

forestplot( xlabel(0(10)100, force) null(50) title(Sensitivity, position(6)) )

(click to run)

User has analysed data with a non-standard technique. User-defined weights are supplied,
and the "results set" is saved and loaded (see saved datasets).
User-defined effect estimates are then substituted for those generated by admetan,
before finally generating the forest plot.

(Note that this example could be run in one line using metan,
but admetan allows for a far greater flexibility in the look of the final forest plot
for only a little additional work.)

. tempfile myfile

. admetan OR ORlci ORuci, wgt(bweight) study(id) nogr saving(`myfile')

. preserve

. use `myfile', clear

. replace _ES = 0.924 if _USE == 5

. replace _LCI = 0.753 if _USE == 5

. replace _UCI = 1.095 if _USE == 5

. replace _LABELS = "Bayesian Overall (param V=3.86, p=0.012)" if _USE == 5

. forestplot, xlabel(0.25 0.5 1 2 4, force) null(1) aspect(1.2) scheme(economist)

. restore

(click to run)

Variable "counts" defined showing raw data. Options to change the box, effect estimate marker and confidence interval are used,
and the counts variable has been attached to the estimate marker as a label.

. gen counts = ". " + string(tdeath) + "/" + string(tdeath+tnodeath)

+ ", " + string(cdeath) + "/" + string(cdeath+cnodeath)

. admetan tdeath tnodeath cdeath cnodeath, lcols(id year) notable

forestplot(range(.3 3) boxopt( mcolor(forest_green) msymbol(triangle))

pointopt( msymbol(triangle) mcolor(gold) msize(tiny)mlabel(counts) mlabsize(vsmall) mlabcolor(forest_green) mlabposition(1))

ciopt( lcolor(sienna) lwidth(medium)))

(click to run)

Author

David Fisher, MRC Clinical Trials Unit at UCL, London, UK.

Email d.fisher@ucl.ac.uk

Acknowledgments

Many thanks to the authors of metan, upon which this code is based;
particularly Ross Harris for his comments and good wishes.

The "click to run" element of the examples in this document is handled using an idea originally developed by Robert Picard.

References

Breslow NE, Day NE. 1980. Statistical Methods in Cancer Research: Vol. I - The Analysis of Case-Control Studies.
Lyon: International Agency for Research on Cancer.

Deeks JJ, Altman DG, Bradburn MJ. 2001.
Statistical methods for examining heterogeneity and combining results from several studies in meta-analysis.
In Systematic Reviews in Health Care: Meta-analysis in Context, ed. Egger M, Davey Smith G, Altman DG, 2nd ed., 285-312. London: BMJ Books.

DerSimonian R, Kacker R. 2007.
Random-effects model for meta-analysis of clinical trials: An update.
Contemporary Clinical Trials 28: 105-114. doi: 10.1016/j.cct.2006.04.004

Doi SAR, Barendregt JJ, Khan S, Thalib L, Williams GM. 2015a.
Advances in the meta-analysis of heterogeneous clinical trials I: The inverse variance heterogeneity model.
Contemporary Clinical Trials 45: 130-138

Doi SAR, Barendregt JJ, Khan S, Thalib L, Williams GM. 2015b.
Advances in the meta-analysis of heterogeneous clinical trials II: The quality effects model.
Contemporary Clinical Trials 45: 123-129

Fisher DJ. 2015.
Two-stage individual participant data meta-analysis and generalized forest plots.
Stata Journal 15: 369-396

Guolo A. 2012.
Higher-order likelihood inference in meta-analysis and meta-regression.
Statistics in Medicine 31: 313-327. doi: 10.1002/sim.4451

Hartung J, Makambi KH. 2003.
Reducing the number of unjustified significant results in meta-analysis.
Communications in Statistics - Simulation and Computation 32: 1179-1190. doi: 10.1081/SAC-120023884

Henmi M, Copas JB. 2010.
Confidence intervals for random effects meta-analysis and robustness to publication bias.
Statistics in Medicine 29: 2969-2983. doi: 10.1002/sim.4029

Higgins JPT, Thompson SG, Spiegelhalter DJ. 2009.
A re-evaluation of random-effects meta-analysis.
JRSS Series A 172: 137-159

Huizenga HM, Visser I, Dolan CV. 2011.
Testing overall and moderator effects in random effects meta-regression.
British Journal of Mathematical and Statistical Psychology 64: 1-19

Morris TP, Fisher DJ, Kenward MG, Carpenter JR. 2018.
Meta-analysis of quantitative individual patient data: two stage or not two stage?
Statistics in Medicine. doi: 10.1002/sim.7589

Röver C, Knapp G, Friede T. 2015.
Hartung-Knapp-Sidik-Jonkman approach and its modification for random-effects meta-analysis with few studies.
BMC Medical Research Methodology 15: 99-105

Sidik K, Jonkman JN. 2006.
Robust variance estimation for random effects meta-analysis.
Computational Statistics & Data Analysis 50: 3681-3701. doi: 10.1016/j.csda.2005.07.019

Sweeting MJ, Sutton AJ, Lambert PC. 2004.
What to add to nothing? Use and avoidance of continuity corrections in meta-analysis of sparse data.
Statistics in Medicine 23: 1351-1375. doi: 10.1002/sim.1761

Thompson SG, Sharp SJ. 1999.
Explaining heterogeneity in meta-analysis: a comparison of methods.
Statistics in Medicine 18: 2693-2708

Viechtbauer W. 2007.
Confidence intervals for the amount of heterogeneity in meta-analysis.
Statistics in Medicine 26: 37-52. doi: 10.1002/sim.2514