help for ipdpower

Title

ipdpower -- Simulation based power calculations for mixed effects modelling

Syntax

ipdpower
, sn(#) ssl(#) ssh(#) b0(#) b1(#) b2(#) b3(#) [optional]

required
sn(#) Number of simulations to execute

ssl(#) Total number of patiens across all higher level units

ssh(#) Number of higher level units (e.g. studies, general practices etc)

b0(#) Coefficient for intercept

b1(#) Coefficient for exposure (intervention)

b2(#) Coefficient for covariate

b3(#) Coefficient for exposure-covariate interaction

data structure
minsh(#) Minimum mumber of patients in a higher level unit (default is 50)

hpoisson Higher unit sizes drawn from a Poisson distribution

icluster Clustered exposure group (e.g. cluster-RCT)

outc(string) Type of outcome: continuous("cont"- default); dichotomous ("binr"); count ("count")

cb(#) Probability for the exposure group, for unbalanced designs (default is 0.5)

cexp Continuous exposure instead of binary, the default

cexpd(string) Distribution for continuous exposure: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

errsd(#) For continuous outcome, residual error standard deviation (default is 1)

sderrsd(#) For continuous outcome, standard deviation across higher levels for residual error SD (default is 0)

derr(string) For continuous outcome, distribution for errors and hence outcome: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

ccovd(string) Distribution for continuous covariate: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

bcov Binary covariate instead of continuous, the default

bcb(#) Probability for the binary covariate (default is 0.5)

bsd(#) SD for varying probability for the binary covariate across higher level units (default is 0)

slcov Higher-level covariate, instead of patient-level (the default)

random effects
tsq0(#) Random effect between variance for the intercept (default is 0)

tsq1(#) Random effect between variance for the exposure (default is 0)

tsq2(#) Random effect between variance for the covariate (default is 0)

tsq3(#) Random effect between variance for the exposure-covariate interaction (default is 0)

dtp0(string) Distribution for intercept random effect: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

dtp1(string) Distribution for exposure random effect: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

dtp2(string) Distribution for covariate random effect: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

dtp3(string) Distribution for interaction random effect: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm")

covmat(name) Covariance matrix for normally distributed random-effects (alternative definition)

missing data
missp(#) Percentage of missing data

mar(#) Missing at random (MAR) assumption, Odds ratio for 'missingness'

mnar(#) Missing not at random (MNAR) assumption, Odds ratio for 'missingness'

minum(#) Number of multiple imputations

mipmm(#) For continuous outcome, impute using pmm instead of regress (# defines neighbours)

modelling
model(#) Model choice for analysis: 1 simple, 2 random effects for intercept, 3-7 various mixed effects options

clvl(#) Set confidence level

seed(#) Set seed number

nskip Add 'noskip' option to xtlogit or xtpoisson to return pseudo R^2

dnorm Add 'normal' option to xtpoisson to assume normally distributed random effect

xnodts Do not display simulation dots

nodisplay Do not display results

moreon Set more on (default is off)

Description

ipdpower is a simulations-based command that calculates power for complex mixed effects two-level data structures. The command was developed having
individual patient data meta-analyses in mind, where patients are nested within studies, but the methods apply to any two-level structure (say patients within
general practices in a primary care database). The command proceeds in two steps. First, it generates the outcome data according to the specified coefficients
for the intercept, the exposure (intervention), the covariate and the exposure-covariate interaction and the outcome can be continuous, binary or count data (selected
using outc(string)). Second, it uses regression modelling (selected using model(#)) to return average model fit statistics, power and coverage calculations.
Power indicates the percentage of iterations in which a model coefficient was found to be statistically significant and of the same direction as the hypothesised.
Coverage indicates the percentage of confidence intervals that include the true coefficient and should correspond to the hypothesised alpha level. Binomial confidence
intervals using the cii command are calculated for both power and coverage.
Inputs b0(#), b1(#), b2(#) and b3(#) always refer to coefficients (i.e. log odds ratios or log incidence rate ratios for binary and count outcomes respectively)
and the simulations always assume standardised exposure and covariate, when continuous. To help users define the correct coefficient values for hypothesised statistics,
we have provided a supplementary file in MS Excel available here. The command also returns aggregated simulation
statistics, allowing users to double-check the hypothesised coefficients and adjust if necessary.
ipdpower is flexible and the higher-level inputs can be ignored, for a simple power calculation of a sigle higher-level unit. In addition, if a parameter is
not needed (say the covariate or the interaction) the user can just set the respective coefficient to zero.

Required

sn(#) Number (integer) of simulations to execute. At least 1000 are recommended for relatively narrow confidence intervals.

ssl(#) Total number (integer) of patients across all higher level units (clusters).

ssh(#) Number (integer) of higher level units (e.g. studies, general practices etc).

b0(#) Coefficient (real) for the intercept (constant) of regression model. For logistic and Poisson regression log odds and log incidence-rate ratios are
expected respectively. The coefficient can be zero.

b1(#) Coefficient (real) for the exposure variable (e.g. intervention: treatment vs no treatment) of the regression model. For logistic and Poisson
regression log odds and log incidence-rate ratios are expected respectively. The coefficient can be zero.

b2(#) Coefficient (real) for the covariate variable (e.g. age) of the regression model. It can be continuous (default) or binary (bcov option),
and patient-level (default) or study-level (slcov option). For logistic and Poisson regression log odds and log incidence-rate ratios are expected respectively.
The coefficient can be zero. Note that the covariate, when continuous, is always assumed to be standardised (mean=0 and sd=1) since interactions are included in the models.
Users need to take that into consideration when deciding on b2.

b3(#) Coefficient (real) for the exposure*covariate interaction variable. The command can automatically handle a binary by continuous or binary by binary
interaction term. For logistic and Poisson regression log odds and log incidence-rate ratios are expected respectively. The coefficient can be zero. Note that the covariate, when continuous, is always assumed to be standardised (mean=0 and sd=1) to allow for meaningful estimates. Users need to
take that into consideration when deciding on b3.

Optional

Data structure

minsh(#) Minimum mumber (integer) of patients in a higher level unit. The default is 50 since this is usually the threshold above which the effort required to
obtain individual patient data for meta-analysis is justified. The command uses the numbers provided with ssl(#), ssh(#) and minsh(#) to draw sizes
for the higher level units from a uniform distribution. If the average size for the higher level unit is smaller than the minimum number of patients the command will
return an error.

hpoisson Inform the command that the higher level unit sizes will not be drawn from a uniform but a Poisson distribution with mean=ssl(#)/ssh(#). This approach provides cluster
sizes that are much more similar in size. Cannot be used with option minsh(#).

icluster Inform the command that the exposure is clustered at the higher level units (e.g. cluster-RCT). Can only be selected when exposure is binary and with balanced designs (i.e. cannot be
used with cexp or cb(#)). Clusters assigned an odd identifier are assumed to include controls and clusters assigned even identifiers are assumed to include the intervention cases (i.e. if an odd
number of higher level units is simulated with icluster there will be an additional cluster of controls).

outc(string) Type of outcome: continuous ("cont"-default); dichotomous ("binr"); count ("count"). The model for a continuous outcome is y=b0+b1*grp+b2*xcovar+b3*xcovar*grp+u0+u1*grp+u2*xcovar+u3*xcovar*grp+errx,
where grp the exposure variable, xcovar the covariate, xcovar*grp their interaction, u0-u3 the random effects components and errx the residual errors.
For a binary outcome the model is y=uniform()<invlogit(b0+b1*grp+b2*xcovar+b3*xcovar*grp+u0+u1*grp+u2*xcovar+u3*xcovar*grp) and for a count outcome it is
y=rpoisson(exp(b0+b1*grp+b2*xcovar+b3*xcovar*grp+u0+u1*grp+u2*xcovar+u3*xcovar*grp)). Negative binomial models were considered as an alternative for count data but they were thought to be too complex
to be of much practical use in the assumption-laden context of power calculations. Note that residual errors can only be directly controlled in the OLS regression model.

cb(#) Probability (real) for patient membership to the exposure group (grp=1). The default is 0.5 for a balanced design.

cexp Inform the command that exposure is continuous (standardised, i.e. mean=0 and sd=1) rather than binary (the default).

cexpd(string) Distribution for continuous exposure: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm"). Normal distribution for the exposure (skew=0, kurtotis=3), when continuous, is the default.
Moderate (skew=1, kurtotis=4) and extreme skewness (skew=2, kurtotis=9) are implemented using the Ramberg et al. (1979) method. The distribution for the exposure will not affect the distribution of the outcome much
unless b1 is reasonably large. Note that the exposure, when continuous, is always assumed to be standardised (mean=0 and sd=1) since interactions are included in the models. Users need to take that into
consideration when deciding on b2 and b3.

errsd(#) For continuous outcome only, standard deviation for the residual error (real). The default is 1. This value, combined with the model coefficients, will affect the model fit; e.g.
a large value will drive down the average adjusted R^2. It also affects model heterogeneity since this is effectively the sd for the outcome within the higher level unit (e.g. within-study variability).

sderrsd(#) For continuous outcome only, standard deviation for the standard deviation of the residual error (real). In other words, it allows the residual error to vary across higher-level units,
which might be a more realistic modelling strategy. The default is 0, not allowing variation which complies with modelling and heterogeneity assumptions (e.g. pooled within-variance is used for heterogeneity calculations).

derr(string) For continuous outcome only, distribution for errors and hence outcome: normal ("norm"-default); moderate skew ("sknorm");extreme skew ("xsknorm"). Normal distribution for the error (skew=0, kurtotis=3)
is the default. Moderate (skew=1, kurtotis=4) and extreme skewness (skew=2, kurtotis=9) are implemented using the Ramberg et al. (1979) method. The distribution for the errors will affect the distribution of the outcome and
the larger the modelled errors the more similar the two distributions.

ccovd(string) Distribution for continuous covariate: normal ("norm"-default); moderate skew ("sknorm"); extreme skew ("xsknorm"). Normal distribution for the covariate (skew=0, kurtotis=3) is the default.
Moderate (skew=1, kurtotis=4) and extreme skewness (skew=2, kurtotis=9) are implemented using the Ramberg et al. (1979) method. The distribution for the covariate will not affect the distribution of the outcome much
unless b2 is reasonably large. Note that the covariate, when continuous, is always assumed to be standardised (mean=0 and sd=1) since interactions are included in the models. Users need to take that into
consideration when deciding on b2 and b3.

bcov Inform the command that the covariate is binary instead of continuous (the default).

bcb(#) For binary covariate only, probability (real) that xcovar=1. The default is 0.5.

bsd(#) For binary covariate only, standard deviation of the probability (real) that xcovar=1 across higher level units (default is 0). Allows for higher level units with very different
composition in terms of the binary covariate (e.g. studies that only enrolled men or women).

slcov Inform the command that the covariate is higher-level (e.g. study-level: recruitment setting) rather than patient-level(the default).

Random effects

tsq0(#) Random effect between higher level variance for the intercept. The default value is 0, which assumes homogeneity and no random effects. Heterogeneity for this model factor (intercept) would
be calculated using tsq0 and errsd. For example I^2=100*tausq0/(tausq0+errsd^2) and H^2=1/(1-tausq0/(tausq0+errsd^2)). Solving for tausq0 we obtain tausq0=(I^2/100*errsd^2)/(100-I^2/100) and tausq0=H^2*errsd^2-errsd^2.
Although ipdpower does not allow I^2 or H^2 inputs for the random effects components, they can be easily calculated using these formulas. Additionally users can use the obtained
hypothesised heterogeneity levels for the inputted within- and between- variance parameters (say in a small trial simulation, if unsure of calculations).

tsq1(#) Random effect between higher level variance for the exposure. The default value is 0, which assumes homogeneity and no random effects. Heterogeneity for this model factor (exposure) would
be calculated using tsq1 and errsd. See tsq0(#) for calculation details.

tsq2(#) Random effect between higher level variance for the covariate. The default value is 0, which assumes homogeneity and no random effects. Heterogeneity for this model factor (covariate) would
be calculated using tsq2 and errsd. See tsq0(#) for calculation details.

tsq3(#) Random effect between higher level variance for the exposure*covariate interaction term. The default value is 0, which assumes homogeneity and no random effects. Heterogeneity for this model
factor (interaction) would be calculated using tsq3 and errsd. See tsq0(#) for calculation details.

dtp0(string) Distribution for intercept random effect: normal ("norm"); moderate skew ("sknorm"); extreme skew ("xsknorm"). Normal distribution (skew=0, kurtotis=3) is the default. Moderate (skew=1, kurtotis=4)
and extreme skewness (skew=2, kurtotis=9) are implemented using the Ramberg et al. (1979) method. In the standard two-stage meta-analysis setting, a non-normal distribution for the random effects has been found
to have a small effect on power and coverage - even when the distribution is quite extreme (Kontopantelis and Reeves, 2010).

dtp1(string) Distribution for exposure random effect: normal ("norm"-default, skew=0 kurtosis=3); moderate skew ("sknorm", skew=1 kurtosis=4); extreme skew ("xsknorm", skew=2 kurtosis=9).

dtp2(string) Distribution for covariate random effect: normal ("norm"-default, skew=0 kurtosis=3); moderate skew ("sknorm", skew=1 kurtosis=4); extreme skew ("xsknorm", skew=2 kurtosis=9).

dtp3(string) Distribution for exposure*covariate interaction random effect: normal ("norm"-default, skew=0 kurtosis=3); moderate skew ("sknorm", skew=1 kurtosis=4); extreme skew ("xsknorm", skew=2 kurtosis=9).

covmat(name) Covariance matrix for normally distributed random effects. Alternative random effects definition to allow modelling of relationships between the random effects components.
The matrix needs to be a 4x4 symmetrical non-negative matrix, with the diagonal elements corresponding to the random effects variances for intercept (name[1,1]), exposure ((name[2,2]),
covariate ((name[3,3]) and interaction ((name[4,4]). Non-normal random effects cannot be modelled using this approach.

Missing data

missp(#) Probability (real) that outcome is missing, to allow for missing data mechanisms. If option mar(#) is defined, data is assumed to be missing
under a missing at random (MAR) mechanism. If option mnar(#) is defined, data is assumed to be missing under a missing not at random (MNAR) mechanism. If neither
mar(#) or mnar(#) are provided along with missp(#), data is assumed to be missing under a missing completely at random (MCAR) mechanism.
Please note that multiple imputation models can satisfactorily deal with MCAR and MAR mechanisms and not MNAR mechanisms, although they will improve power in all three scenarios.
In terms of minimising estimate bias, multiple imputations are not really needed for MCAR data (a complete case analysis should provide similar estimates) and are mainly needed for MAR data.
There is some evidence that multiple imputation can offer some protection against MNAR mechanisms, but in general the estimates from such models will be biased. However, it is impossible
to assess whether data are MNAR, without obtaining additional external data, and the multiple imputation models are now used routinely to deal whenever 'missingness' is encountered.
Therefore, we decided to offer a MNAR modelling option with the underperforming, in this scenario, multiple imputation approach to allow inquisitive researchers to practically calculate
the performance of these models, in terms of power.

mar(#) Odds ratio (real) that defines a missing at random (MAR) mechanism. The relationship between the covariate and missingness in the outcome is
defined by z=ln(mar(#))*xcovar (i.e a logistic regression model), and the missing data are selected (i.e. set to missing) from the z=1 subsample. So a value of 1 implies the
mechanism is MCAR, a value above 1 implies that the outcome is more likely to be missing for larger values of the covariate and a value below 1 implies that the
outcome is more likely to be missing for smaller values of the covariate.

mnar(#) Odds ratio (real) that defines a missing not at random (MNAR) mechanism. The relationship between the outcome and missingness in the outcome is
defined by z=ln(mnar(#))*y (i.e a logistic regression model), and the missing data are selected (i.e. set to missing) from the z=1 subsample. So a value of 1 implies the
mechanism is MCAR, a value above 1 implies that the outcome is more likely to be missing for larger values of the outcome and a value below 1 implies that the
outcome is more likely to be missing for smaller values of the outcome.

minum(#) Number (integer>1) of multiple imputations to be executed. This options informs ipdpower that multiple-imputation models will be used and therefore missing data with one
of the three available structures (MCAR, MAR, MNAR) need to have been defined. For the imputations, univariate linear, logistic or Poisson regression is used depending on the outcome (see mi impute).
Under all imputation models, the outcome depends on exposure, covariate and their interaction, and for multi-level models (2-7) additionally on higher level units (clusters - see strategy #1
here). The imputed
datasets are then analysed using mi estimate as a prefix, for the seven available models. Note that this process can be time consuming for complex models and binary or count outcomes, while convergence issues
are amplified since all imputed datasets must run successfully for to return results. Therefore 5 imputations are recommended for most models, and 2-3 for non-continuous outcomes and
models 5, 6 or 7 (see option model(#)).

mipmm(#) For a continuous outcome, it informs that missing data will be imputed using a predictive mean matching algorithm (rather than linear regression). The algorithm is computationally more expensive and
# defines the number (integer>=1) of closest observations (nearest neighbors) to draw from.

Modelling

model(#) Model choice for analysis: 1 simple, 2 random effects for intercept, 3-7 various mixed effects options. Model 1 corresponds to a regression with regress, logit or poisson,
for continuous, binary and count outcomes respectively. Random effects are not considered at all under these models. Model 2 uses the xt family of models, sets the higher level as a panel variable with
xtset and analyses with xtreg, xtlogit or xtpoisson.Only a random effects component for the intercept is considered under with this set of models.
Models 3-7 allow for more advanced modelling options, accounting for various random effect components, but are computationally expensive and do not always converge (using xtmixed, xtmelogit and
xtmepoisson which have been renamed in Stata v13 - but we wished to ensure ipdpower was compatible with v12). The modelling approaches have been described for ipdforest (Kontopantelis and Reeves, 2013)
and in the following descriptions we assume the highel level is study (i.e. patients nested within studies), for convenience. Model 3 assumes a fixed common intercept, random treatment effects and fixed effect for the
covariate. Model 4 assumes fixed study specific intercepts, random treatment effects and fixed study specific effects for the covariate (which is usually the recommended model for performing individual patient data
meta-analysis). Model 5 assumes random study intercepts, random treatment effects and fixed study specific effects for the covariate. Model 6 assumes random study intercepts, random treatment effects and random effects
for the covariate. Model 7 assumes random study intercept, random treatment effects, random effects for the covariate and random effects for the interaction. Models 5 and 6 often fail to converge and for model 7 non-convergence
is more frequent than convergence.

+

model | commands intercept exposure covariate interaction

+

1 | regress/logit/poisson fixed fixed fixed fixed
2 | xtreg/xtlogit/xtpoisson random fixed fixed fixed
3 | xtmixed/xtmelogit/xtmepoisson fixed random fixed fixed
4 | xtmixed/xtmelogit/xtmepoisson fixed* random fixed* fixed
5 | xtmixed/xtmelogit/xtmepoisson random random fixed* fixed
6 | xtmixed/xtmelogit/xtmepoisson random random random fixed
7 | xtmixed/xtmelogit/xtmepoisson random random random random

+

*cluster-specific fixed-effects, i.e. a different estimate for each higher level unit rather than an overall fixed effect

clvl(#) Set confidence level. The default is 95% (alpha level of 5%). See level.

seed(#) Set initial value of random-number seed, for the simulations. See set seed.

nskip Add noskip option to xtlogit or xtpoisson to return pseudo R^2. This option is only relevant when model(2) with outc(binr) or outc(count) is used. Computationally, this approach is more expensive
since it additionally fits a full maximum-likelihood model with only a constant for the regression equation be fit (which is used as the base model for the comparison with the final model).

dnorm Add normal option to xtpoisson to assume normally distributed random effects for the intercept. The default is gamma-distributed which is computationally less expensive. Additionally, when the
normal option is specified, model convergence often fails. This option is only relevant when model(2) with outc(count). A skew-normal distribution is similar to gamma and perhaps skew-normal random
effects should be considered when modelling count data.

xnodts Suppress simulation progress display. If option not specified, a '.' is displayed for each successful model run (i.e. converging) and an 'x' for each unsuccessful iteration.

nodisplay Do not display results at the end of the simulation process. Suppressed results include: simulation characteristics, average model fit, average statistics for the outcome,
average b0-b3, hypothesised heterogeneity values, power and coverage.

moreon Set more on (default is off).

Remarks

A description of methods and details in the use of ipdpower, as well as more examples, have been provided in a Journal paper: https://www.jstatsoft.org/article/view/v074i12

Effectively breaking the command can be difficult. The Stata break button is likely to terminate a regression iteration which will be marked as non-coverging (reported as an 'x') but not ipdpower. To exit the command,
Windows users should keep Ctrl+Pause/Break pressed for a few seconds. Users of other systems please see here.

Examples

100 simulations, total sample size 5000, from 20 studies with no heterogeneity modelled and using defaults: continuous normally distributed outcome, balanced exposure, continuous patient-level covariate.

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1)

Adding heterogeneity for the exposure (I^2=33.3%, H^2=1.5).

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1) tsq1(0.5)

Binary outcome modelled with logit.

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1) tsq1(0.5) outc(binr)

Binary outcome modelled with xtlogit (which assumes heterogeneity for the intercept, not the exposure).

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1) tsq1(0.5) outc(binr) model(2)

Continuous non-normally distributed outcome modelled with xtreg (which assumes heterogeneity for the intercept, not the exposure) and higher residual error.

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1) tsq1(0.5) errsd(2) derr(sknorm) model(2)

As above but with a binary covariate and assuming heterogeneity for the intercept instead.

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1) tsq0(0.5) errsd(2) derr(sknorm) model(2) bcov bcb(0.8)

As above but with a study-level covariate instead.

. ipdpower, sn(100) ssl(5000) ssh(20) b0(1) b1(0.5) b2(0.3) b3(0.1) tsq0(0.5) errsd(2) derr(sknorm) model(2) bcov bcb(0.8) slcov

Saved results

ipdpower saves the following in r():

Scalars

r(bo) Average coefficient estimate for the intercept

r(b1) Average coefficient estimate for the exposure

r(b2) Average coefficient estimate for the covariate

r(b3) Average coefficient estimate for the interaction

r(nsim) Number of simulations

r(nrun) Number of successful simulations

r(ctime) Computational time in minutes

r(rsq) Adjusted or pseudo R^2

r(errsd) within-sd (error)

r(consd) between-sd (intercept)

r(grpsd) between-sd (exposure)

r(covsd) between-sd (covariate)

r(intsd) between-sd (interaction)

r(pow0) Power to detect b0

r(lpow0) Power to detect b0, lower CI

r(upow0) Power to detect b0, upper CI

r(pow1) Power to detect b1

r(lpow1) Power to detect b1, lower CI

r(upow1) Power to detect b1, upper CI

r(pow2) Power to detect b2

r(lpow2) Power to detect b2, lower CI

r(upow2) Power to detect b2, upper CI

r(pow3) Power to detect b3

r(lpow3) Power to detect b3, lower CI

r(upow3) Power to detect b3, upper CI

r(cov0) Coverage for b0

r(lcov0) Coverage for b0, lower CI

r(ucov0) Coverage for b0, upper CI

r(cov1) Coverage for b1

r(lcov1) Coverage for b1, lower CI

r(ucov1) Coverage for b1, upper CI

r(cov2) Coverage for b2

r(lcov2) Coverage for b2, lower CI

r(ucov2) Coverage for b2, upper CI

r(cov3) Coverage for b3

r(lcov3) Coverage for b3, lower CI

r(ucov3) Coverage for b3, upper CI

Author

Evangelos Kontopantelis, Centre for Health Informatics, Institute of Population Health

University of Manchester, e.kontopantelis@manchester.ac.uk

Please cite as

Kontopantelis E, Springate D, Parisi R and Reeves D. 2015.
Simulation-based power calculations for mixed effects modelling: ipdpower in Stata.
JSS, 2016, 74(12). Paper available here.

Other references

Ramberg JS, Dudewicz EJ, Tadikamalla PR and Mykytka EF. A probability distribution and its uses in fitting data. Technometrics 1979; 21(2): 201–214.

Kontopantelis E and Reeves D. Performance of statistical methods for meta-analysis when true study effects are non-normally distributed: A simulation study.
Statistical Methods in Medical Research (first published online on December 9, 2010), 2012 Aug; 21(4): 409-426. doi: 10.1177/0962280210392008.

Kontopantelis E and Reeves D. A short guide and a forest plot command (ipdforest) for one-stage meta-analysis. The Stata Journal, 2013 Oct; 13(3): 574-587.

Also see

help for ipdforest