Skip to content

[R-meta] Data Extraction

3 messages · Tobias Saueressig, Wolfgang Viechtbauer

#
Please always cc the mailing list.

You can include the study if you know (or can guestimate) the pre-post correlation.

SD of the change scores = SD * sqrt(2*(1-r)),

where SD is the pre or post treatment SD (this assumes that the SD is the same before and after the treatment). So if you know r, you can easily recover the SD and standardize in the usual manner.

Best,
Wolfgang
#
se.from.p() back-calculates the SE based on a z-test, when we can probably safely assume that something more along the lines of a t-test was done. But we can do something along the same lines, but using a t-test, with:

1.88 / qt(.64/2, df=30+36-2, lower.tail=FALSE)

This yields 4.000567 for the SE. Using the back-calculation based on the CI, i.e.,

(9.3 - -5.7) / (2*qt(.975, df=30+36-2))

yields 3.754262. The discrepancy is quite large and cannot really be explained based on rounding errors. I don't know how that p-value was computed in the original study - the code above assumes that a t-test was done on the change scores for the two groups.

The SD reported by se.from.p() is based on multiplying the SE with sqrt(N), but this isn't appropriate here either. It should be SE / sqrt(1/n1 + 1/n2), so either

1.88 / qt(.64/2, df=30+36-2, lower.tail=FALSE) / sqrt(1/30 + 1/36)

or

(9.3 - -5.7) / (2*qt(.975, df=30+36-2)) / sqrt(1/30 + 1/36)

So either one of these (~16.2 or ~15.2) can be assumed as the SD of the change scores (within each group). If we now assume r = 0.5, then indeed the SD of the change scores is the same as the SD of the raw scores (although I would not call this conservative), so I would do either:

summary(escalc(measure="SMD", m1i=1.88, sd1i=16.2, m2i=0, sd2i=16.2, n1i=30, n2i=36))
summary(escalc(measure="SMD", m1i=1.88, sd1i=15.2, m2i=0, sd2i=15.2, n1i=30, n2i=36))

This isn't all that different from what got, but in my opinion more justifiable.

Best,
Wolfgang