Skip to content

[R-meta] Correlation between two continuous outcome

6 messages · Ishtiaq Ahmed, Michael Dewey, Reza Norouzian +1 more

#
Hi everyone,
I hope everyone is doing well. My understanding of correlation meta-analysis is limited, and I'm seeking to enhance it. Currently, I'm conducting a meta-analysis to assess the effect of X intervention on both pain intensity and several pain biomarkers (such as BDNF, beta-endorphin, etc.) as compared with the control. I'm particularly interested in exploring the correlation between pain intensity and BDNF levels, both of which are continuous variables.
I used escalc() to calculate the standardized mean difference (SMD) for pain intensity, considering the varying measurement scales between the intervention and control groups. Additionally, I've also calculated the mean difference (MD) for BDNF levels using the differences between the intervention and control groups.
My question is whether it's possible to convert SMD/MD to correlation coefficient (r) to perform the correlation meta-analysis. Alternatively, are there other approaches to utilizing SMD and MD for this analysis? Additionally, some of the studies (though not all) have provided beta-values for the correlation between pain intensity and BDNF. Can I incorporate these beta-values into the meta-analysis?

I would greatly appreciate any suggestions or sources you can provide.



Best regards,


Ishtiaq Ahmed



Ph.D. Researcher

Vrije Universiteit Brussels
#
Dear Ishtiaq

It is not abcolutely clear to me what you are trying to achieve here. Is 
your scientific hypothesis that X will increase the correlation between 
your measures?

Michael
On 19/04/2024 16:30, Ishtiaq Ahmed via R-sig-meta-analysis wrote:

  
    
#
Dear Michael,
Thank you for your response. I am sorry for the confusion. I just want to see if the decrease in pain intensity is positively correlated with the decrease in BDNF level.
Both pain intensity (SMD) and BDNF concentration (MD) are continuous variables.



Best regards,


Ishtiaq Ahmed



Ph.D. Researcher

Vrije Universiteit Brussels
#
Hi Ishtiaque,

Can you possibly share a little more specifics about the dataset you are
working with? For example, how many studies do you have? How many of them
simultaneously studied the effect of X intervention on both pain intensity
and the several pain biomarkers of interest? Indeed, how many pain
biomarkers do you have and are there any that is/are not the focus of your
study?

Also, if you could share the structure of your data for a couple of studies
in a concise manner (ex. below), our list members could likely better
assist you.

Reza

study  SMD V   intensity   PDNF    . . . last_pain_biomarkers
1     .6  .1   number      number        number
1      1  .2   number      number        number
1     .9  .3   number      number        number
2     .7  .2   number      number        number
2     .8  .4   number      number        number



On Fri, Apr 19, 2024 at 10:30?AM Ishtiaq Ahmed via R-sig-meta-analysis <
r-sig-meta-analysis at r-project.org> wrote:

            

  
  
#
Dear Reza,
Thanks for your response. I want to see the correlation between them pain and BDNF.

##For pain
pain <- escalc(measure = "SMD", n1i = nexp, m1i = Int_mean, sd1i = Int_sd, n2i = ncon, m2i = Con_mean, sd2i = Con_sd, data = dat_pain)

##ForBDNF
bdnf <- escalc(measure = "MD", n1i = nexp, m1i = Intmean, sd1i = Intsd, n2i = ncon, m2i = Conmean, sd2i = Consd, data = dat_bdnf)


Please find my dataset below.

study_label
nexp
ncon

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





Best regards,


Ishtiaq Ahmed



Ph.D. Researcher



[cid:8eceda28-6691-4c9e-9c96-da240542ee88]  [cid:b92c3a1f-82f6-4334-9244-4bbba41e5a4f]









Faculty of Physical Education and Physiotherapy

Department KIMA/KINE

Vrije Universiteit Brussels

Pleinlaan 2 - 1050 Brussel - www.vub.be<https://www.vub.be/>

Pain in Motion International Research Group ? www.paininmotion.be<http://www.paininmotion.be/>

[cid:a2aa3461-f5a7-4e75-b521-5feb2a7c9ca2]
8 days later
#
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