Відредаговано після корисних відгуків від Марка Уайта (дякую!)
Один з варіантів - обчислити обидва відносини (B1 з A, а B2 з A) в одній моделі, яка також оцінює різницю між ними. Це легко досягти за допомогою багаторазової регресії . Ви б запустили модель з A як залежну змінну, а потім одну суцільну змінну з усіма оцінками для B1 і B2, категоричну змінну із зазначенням, якою вона була (B1 або B2) та взаємодію між ними. В г:
> set.seed(24601)
>
> library(tidyverse)
> library(mvtnorm)
> cov <- matrix(c(1, .4, .16,.4, 1, .4, .16, .4, 1), ncol=3, byrow=TRUE)
> mydata <- rmvnorm(n=100, sigma = cov)
> colnames(mydata) = c("A", "B1", "B2")
> head(mydata)
A B1 B2
[1,] -0.1046382 0.6031253 0.5641158
[2,] -1.9303293 -0.7663828 -0.7921836
[3,] 0.1244192 -0.4413581 -1.2376256
[4,] -3.2822601 -1.2512055 -0.5586773
[5,] -0.9543368 -0.1743740 1.1884185
[6,] -0.4843183 -0.2612668 -0.7161938
Ось кореляції з даних, які я створив:
> cor(mydata)
A B1 B2
A 1.0000000 0.4726093 0.3043496
B1 0.4726093 1.0000000 0.3779376
B2 0.3043496 0.3779376 1.0000000
>
Зміна формату даних для задоволення потреб моделі (переформатування на "довге"):
> mydata <- as.data.frame(mydata) %>%
+ gather("var", "value", B1, B2)
>
Ось модель:
резюме (lm (A ~ значення * var, data = mydata))
Call:
lm(formula = A ~ value * var, data = mydata)
Residuals:
Min 1Q Median 3Q Max
-2.89310 -0.52638 0.02998 0.64424 2.85747
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.09699 0.09014 -1.076 0.283
value 0.47445 0.09305 5.099 8.03e-07 ***
varB2 -0.10117 0.12711 -0.796 0.427
value:varB2 -0.13256 0.13965 -0.949 0.344
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.891 on 196 degrees of freedom
Multiple R-squared: 0.158, Adjusted R-squared: 0.1451
F-statistic: 12.26 on 3 and 196 DF, p-value: 2.194e-07
Отримані тут результати (з моїх складених даних) говорять про те, що між B1 і A існує значне співвідношення (тест коефіцієнта "значення", оскільки B1 є референтною групою для коефіцієнта "var"), але що різниця між співвідношенням B1 з A і зв'язком B2 з A не суттєво (тест коефіцієнта "значення: varB2").
Якщо вам подобається думати з точки зору кореляції, а не коефіцієнтів регресії, просто стандартизуйте всі свої змінні (A, B1 і B2), перш ніж запустити модель, і коефіцієнти регресії, які ви отримаєте, будуть стандартизовані (не зовсім те саме, що кореляція нульового порядку, але набагато ближча з точки зору інтерпретації).
Також зауважте, що це обмежить ваш аналіз лише випадками, що мають і B1, і B2 ( списки видалення ). Поки це залишає у вас достатньо даних, щоб не бути недооціненими, і поки відсутні дані відсутні випадковим чином (або достатньо невелика частка загальних даних, щоб вони не мали великого значення, навіть якщо вони відсутні випадково), то це добре.
Той факт, що ви обмежуєте свій аналіз одним і тим же набором даних для оцінки ефектів як для B1, так і для B2 (замість того, щоб використовувати дещо різні набори даних на основі різних моделей відсутності), має перевагу в тому, щоб зробити інтерпретацію різниці між кореляціями трохи більш прямолінійний. Якщо ви обчислюєте кореляції окремо для кожного, а потім перевіряєте різницю між ними , ви стикаєтеся з проблемою, що базові дані трохи відрізняються в кожному випадку --- будь-яка різниця, яку ви бачите, може бути пов’язана з різницею у вибірках стільки ж, скільки відмінностями у фактичних зв’язках між змінними.