Skip to content
Prev 5238 / 5632 Next

[R-meta] Correlation between two continuous outcome

Dear Ishtiaq,

Thanks for providing the data. Some of the variables got mixed up though, so I am assuming that the 'study_label' variable is actually 'ncon' (or maybe ncon and nexp are mixed up now, but I'll leave that up to you to sort out):

dat <- structure(list(ncon = c(32L, 34L, 34L, 12L, 21L, 22L, 15L, 15L,
11L, 12L, 24L), nexp = c(16L, 17L, 17L, 12L, 22L, 21L, 15L, 15L, 12L, 11L,
24L), ncon = c("PCP-intensity", "NPS(0-10)", "NPS(0-10)", "VAS(0-10)",
"VAS(0-10)", "VAS(0-10)", "VAS(0-10)", "VAS(0-10)", "VAS(0-10)", "VAS(0-10)",
"NRS(0-10)"), Int_mean = c(-7.32, -3.91, -3.12, -3.37, -0.42, -1.09, -3.69,
-6.41, -4.04, -5.29, -0.25), Int_sd = c(4.26, 1.489, 1.42, 2.45, 2.66, 2.44,
2.41, 1.73, 2.18, 2.19, 0.72), Con_mean = c(-3.87, -1.91, -2.19, -1.54, -1.45,
-0.2, -3.15, -4.22, -4.26, -2.67, 0.08), Con_sd = c(6.12, 1.56, 1.51, 2.63,
2.45, 2.44, 2.14, 2.31, 2.52, 2.11, 1.04), BDNF = c("ng/ml", "ng/ml", "ng/ml",
"ng/ml", "ng/ml", "ng/ml", "ng/ml", "ng/ml", "ng/ml", "ng/ml", "ng/mL"),
Intmean = c(0.89, -15.76, -15.27, 38.07, -1.56, -1.32, -6.94, -15.2, 3.23,
3.18, 14.58), Intsd = c(18.98, 32.42, 35.77, 21.39, 5.17, 6.22, 36.6, 32.39,
16.75, 30.43, 25.96), Conmean = c(0.94, -10.99, -3.77, 25.68, -1.23, -0.52,
-1.42, 0.49, 2.23, -7.27, -7.86), Consd = c(19.19, 27.43, 31.46, 10.69, 3.97,
5.56, 32.29, 31.27, 13.1, 37.32, 26.06)), class = "data.frame", row.names =
c("Ali et al., 2022", "Mustafaoglu et al., 2024", "Rustem et al., 2024",
"Dall?Agnol et al., 2014", "de Paula et al., 2023", "Lao et al., 2023",
"Graca-Tarrag? et al., 2019", "Fatif et al., 2019", "Medeiros et al., 2016",
"Ahmed et al., 2016", "Zhao et al., 2019"))
dat

First, I would compute the effect sizes for each outcome in the same dataset:

## For pain
dat <- escalc(measure="SMD", n1i=nexp, m1i=Int_mean, sd1i=Int_sd,
                             n2i=ncon, m2i=Con_mean, sd2i=Con_sd,
                             data=dat, var.names=c("yi.p","vi.p"))

## ForBDNF
dat <- escalc(measure="SMD", n1i=nexp, m1i=Intmean, sd1i=Intsd,
                             n2i=ncon, m2i=Conmean, sd2i=Consd,
                             data=dat, var.names=c("yi.b","vi.b"))

Then we can reshape the dataset into a long format:

dat <- reshape(dat, direction="long",
               varying=list(c("yi.p","yi.b"), c("vi.p","vi.b")),
               v.names=c("yi","vi"), timevar="outcome",
               times=c("pain","bdnf"), idvar="study")
dat <- dat[order(dat$study),]
rownames(dat) <- NULL
dat

The two effect sizes are not independent, since they are measured in the participants. Therefore, one should compute the covariance between the SMD for pain and the MD for BDNF within studies. In essence, this covariance depends on the correlation between pain and BDNF. Since this is presumably not reported within the studies, you could 'guestimate' this correlation and construct the var-cov matrix of the effect sizes with:

V <- vcalc(vi, data=dat, cluster=study, obs=outcome, rho=<correlation>)

where <correlation> needs to be replaced with this guestimate.

Then one could fit a bivariate model to these data with:

res <- rma.mv(yi, V, mods = ~ 0 + outcome, random = ~ outcome | study, struct="UN", data=dat)
res

This part of the output gives the estimated correlation between the treatment effect for pain and the treatment effect for BDNF:

      rho.bdnf  rho.pain    bdnf  pain
bdnf         1                 -    11
pain       ???         1      no     -

where ??? will the correlation (rho).

I tried out some correlations in vcalc() above, but unless one uses a fairly *negative* correlation, the estimate of rho drifts to -1.

I can't really help further beyond this, but at least the code above shows that this is in essence application of the bivariate/multivariate meta-analysis approach as illustrated here:

https://www.metafor-project.org/doku.php/analyses:berkey1998

Best,
Wolfgang
Message-ID: <AS8PR08MB9193813055F77338F45DED958B1B2@AS8PR08MB9193.eurprd08.prod.outlook.com>
In-Reply-To: <DB8PR01MB610750CAA60FC623E695616F860C2@DB8PR01MB6107.eurprd01.prod.exchangelabs.com>