Skip to content
Prev 2330 / 5636 Next

[R-meta] Data Extraction

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