Отредактировано после полезного отзыва от Mark White (спасибо!)
Одним из вариантов является вычисление обоих отношений (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)
>
Вот модель:
сводка (лм (A ~ значение * переменная, данные = 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) перед запуском модели, и вы получите стандартизированные коэффициенты регрессии (не совсем то же самое, что и корреляция нулевого порядка, но гораздо ближе с точки зрения интерпретации).
Также обратите внимание , что это будет ограничивать свой анализ, только в тех случаях , которые имеют как В1 и В2 ( listwise удаление ). До тех пор, пока у вас остается достаточно данных, чтобы их не было недостаточно, и если отсутствующие данные отсутствуют случайным образом (или достаточно малая доля общих данных, чтобы они не имели большого значения, даже если они отсутствуют случайно), то это нормально.
Тот факт, что вы ограничиваете свой анализ одним и тем же набором данных для оценки эффектов как для B1, так и для B2 (вместо того, чтобы использовать немного разные наборы данных, основанные на разных типах пропусков), имеет то преимущество, что немного интерпретирует разницу между корреляциями более простой. Если вы рассчитываете корреляции отдельно для каждого из них, а затем проверяете разницу между ними , вы сталкиваетесь с проблемой, заключающейся в том, что базовые данные немного отличаются в каждом случае - любое различие, которое вы видите, может быть связано как с различиями в выборках, так и с различиями. в фактических отношениях между переменными.