# [R] metafor - Cochrane on change score in pre-post design

Antonello Preti antoviral at gmail.com
Mon Apr 13 21:46:55 CEST 2015

```Hi, this is another quesite related to the use of 'metafor' for calculation
of standardized mean change in pre-post design studies.
Essentially, my aim is to compare different method to arrive at the same
conclusion: Does the treatment work?

The Cochrane manual advise not to calculate change score:

"9.4.5.2  Meta-analysis of change scores

In some circumstances an analysis based on changes from baseline will be
more efficient and powerful than comparison of final values,
as it removes a component of between-person variability from the analysis.
However, calculation of a change score requires measurement of the outcome
twice
and in practice may be less efficient for outcomes which are unstable or
difficult to measure precisely,
where the measurement error may be larger than true between-person baseline
variability.
Change-from-baseline outcomes may also be preferred if they have a less
skewed distribution than final measurement outcomes.
Although sometimes used as a device to ‘correct’ for unlucky randomization,
this practice is not recommended.

The preferred statistical approach to accounting for baseline measurements
of the outcome variable
is to include the baseline outcome measurements as a covariate in a
regression model or analysis of covariance (ANCOVA)".

My question is: how do include both baseline (experimental and control
group)  in the analysis as a covariate in 'metafor'?
So, far, this is what I did.
I kinly request some help tp add the baseline as covariate to comply with
the Cochrane suggestion-
How can I add the baseline mean in both groups?
Should I consider baseline standard deviation, and if yes, how?
Should I take into account dropouts? I mean, in some sample at baseline n =
30 and 35 and at end of treatment n was 28 and 29...

Antonello Preti

This is my dataset (with imputed r = 0.70 for pre-post correlation, put in
the 'ri' variable):

##### the data

dat <- structure(list(study = structure(c(11L, 8L, 7L, 12L, 13L, 4L,
5L, 1L, 10L, 3L, 6L, 9L, 2L), .Label = c("Study A, 2012",
"Study B, 2013", "Study C, 2013", "Study D, 2010",
"Study E, 2012", "Study F, 2013", "Study G, 2006",
"Study H, 2005", "Study I, 2013", "Study L, 2012",
"Study M, 2003", "Study N, 2007", "Study P, 2007"
), class = "factor"), c_pre_mean = c(4.9, 15.18, 19.01, 5.1,
16.5, 27.35, 18.1, 2.4, 14.23, 0.08, 21.26, 21.5, 21.73), c_pre_sd = c(2.6,
2.21, 7.1, 1.5, 7.2, 13.92, 5.4, 0.13, 4.89, 0.94, 7.65, 5.22,
8.43), c_post_mean = c(6.1, 13.98, 18.5, 4.53, 15.9, 23, 16.9,
2.2, 16.58, -0.02, 16, 16.84, 23.54), c_post_sd = c(2.06, 3.24,
7, 2.06, 6.8, 12.06, 3.8, 0.13, 6.35, 0.88, 4.69, 4.64, 6.74),
c_sample = c(14, 13, 19, 15, 34, 20, 24, 35, 31, 26, 49,
21, 22), e_pre_mean = c(4.6, 13.81, 19.9, 5.3, 18.7, 22.71,
19.2, 2.7, 15.97, -0.22, 20.9, 20.43, 21.94), e_pre_sd = c(2.1,
6.64, 8.1, 2.9, 7.3, 7.82, 4.1, 0.13, 6.73, 0.93, 5.18, 4.87,
7.02), e_post_mean = c(4.64, 15.86, 18.1, 4.33, 17.2, 24.89,
17.6, 2.8, 13.6, 0.06, 17.41, 16.05, 19.29), e_post_sd = c(2.34,
7.76, 7.8, 2.26, 7.4, 11.89, 3.7, 0.13, 5.79, 1.12, 5.16,
4.17, 6.58), e_sample = c(14, 18, 16, 16, 33, 28, 29, 36,
38, 27, 43, 25, 17), ri = c(.70,
.70,.70,.70,.70,.70,.70,.70,.70,.70,.70,.70,.70)), .Names = c("study",
"c_pre_mean", "c_pre_sd",
"c_post_mean", "c_post_sd", "c_sample", "e_pre_mean", "e_pre_sd",
"e_post_mean", "e_post_sd", "e_sample", "ri"), class = "data.frame",
row.names = c(NA,
-13L))

### check the data

dim(dat)
str(dat)

attach(dat) #### yes, I know, do'nt do this....

# call the library

library(metafor)

# Computing Standardized Mean Difference (Hedges' g) for Each Group
(experimental and control) at post treatment
# use "SMD" for the standardized mean difference using raw score
standardization

datT <- escalc(measure="SMD", m1i=e_post_mean, sd1i=e_post_sd,
n1i=e_sample, m2i=c_post_mean, sd2i=c_post_sd, n2i=c_sample, vtype="UB",
data=dat, append=TRUE)

# Extract the effect size ( Standardized Mean Difference (Hedges' g)) and
its variance

yi <- datT\$yi
vi <- datT\$vi

###############################################
#
# fixed-effects model
#
###############################################

model.FE <- rma(yi, vi, method="FE", digits=2)

summary(model.FE)

# plot globale

plot(model.FE, slab=paste(study))

[[alternative HTML version deleted]]

```