I've got data for three experiments, pre-post data, where I have all the individual level data (not shown). I want to produce a comparison with summary data in the form of a meta-analysis and forest plot. e.g. mean difference, with CI and the summary mean difference and CI for all three datasets combined. The experiments are by one team but in three separate regions. I thought a meta-analysis would do the trick, but using meta in R, I can only figure out how to enter the overall mean/SD and not how to show the data is paired. The unpaired data does not appear to show a statistically significant change, yet the p-value for the paired data (in region 1 and 2, and all data combined, but not region 3) does show a statistically significant change.

Forest plot of pre-post paired data using Mean/sd  in meta-analysis for Experiment/control method

I can use a t-test to get the mean difference with 95% CIs and I've plotted this for all three regions individually and when the raw data is combined (all).

Mean dif with 95% CI

I assume that combining the raw data is not the right method to get a summary mean/CI.

The cochrane hand book for individual patient data, (IPD) says: https://training.cochrane.org/handbook/current/chapter-26#section-26-4 "To date, most IPD meta-analyses have used a two-stage approach to analysis (Simmonds et al 2005, Bowden et al 2011, Simmonds et al 2015), whereby each individual study is analysed independently in the first stage, reducing the IPD to summary statistics (i.e. aggregate data). In the second stage, these are combined to provide a pooled estimate of effect, in much the same way as for a conventional systematic review (Simmonds et al 2005). Thus, standard statistics and forest plots can be produced."

So which data do I need to summarise and how do I use them with meta or metafor in R. Mean -sd of pre-post entered into meta/metafor as experiment/control is not the right approach. What is?

Example data:

df1 <- data.frame(n = 32,
                  mean_start = 88.125,
                  sd_start   = 19.129,
                  mean_end   = 85.344,
                  sd_end     = 19.622,
                  mean_diff =  2.781,
                  sd_diff =    6.489,
                  cor =        0.944,
                  p_value =    0.022,
                  country    = "Group1")

df2 <- data.frame(n = 30,
                  mean_start = 90.835,
                  sd_start   = 29.077,
                  mean_end   = 85.284,
                  sd_end     = 27.661,
                  mean_diff =  4.386,
                  sd_diff =    9.404,
                  cor =        0.948,
                  p_value =    0.001,
                  country    = "Group2")

df3 <- data.frame(n = 22,
                  mean_start = 84.9,
                  sd_start   = 14.294,
                  mean_end   = 84.195,
                  sd_end     = 16.435,
                  mean_diff =  0.705,
                  sd_diff =    5.8,
                  cor =        0.938,
                  p_value =    0.17,
                  country = "Group3")

df <- rbind(df1, df2, df3)

meta_output <- metacont(
  n.e =    n, #number in experimental group
  mean.e = mean_start, # mean of experimental group
  sd.e =   sd_start, # sd 
  n.c =    n, #number in control group
  mean.c = mean_end, # mean of control group
  sd.c   = sd_end, # sd 
  studlab = country, 
  data = df)```
  • $\begingroup$ What makes you think that combining the raw data and then fitting a suitable model is not an acceptable approach? $\endgroup$
    – mdewey
    May 3, 2022 at 10:01
  • $\begingroup$ Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking. $\endgroup$
    – Community Bot
    May 3, 2022 at 10:52
  • $\begingroup$ @mdewey I've clarified the question more. $\endgroup$
    – ChrisD
    May 3, 2022 at 13:18
  • $\begingroup$ You can calculate the change score for each study then pool them. Cochrane Handbook provides instructions on how to do this. Other option is to use the post-treatment means. If you jave the raw data then calculate the change score for each subject and get the mean /SE for pooling across studies. $\endgroup$
    – abousetta
    May 4, 2022 at 1:31
  • $\begingroup$ Since you have all measurements, the best approach it to combine them in one dataset and analyze it with one model (regression?) with a region effect and possibly interactions. This is a much more informative analysis (and with more power) than first summarizing each experiment into a mean and std error and then combining the summaries. $\endgroup$
    – dipetkov
    May 4, 2022 at 6:47

1 Answer 1


So this was quite straightforward in the end. Many thanks for the comments, I've posted code here.
So instead of taking mean-start and sd-start, mean-final and sd-final and entering this into metacont (for continuous variables) as experiment and control, you take the mean-change, se-change and enter this into meta::metamean in R. That's it.

And using metamean instead of merely combining the raw data gives you the heterogenity data which is good to have.

  n =    n, #number
  mean = mean, # mean of change in weight measured for each participant
  sd =   sd, # sd of change in weight
  studlab = Country, 
  data = Weight_meta

[![Forest plot of mean change][1]][1]

[1]: https://i.stack.imgur.com/16kAO.png

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.