Modifié après les commentaires utiles de Mark White (merci!)
Une option consiste à calculer les deux relations (B1 avec A et B2 avec A) dans un modèle unique qui estime également la différence entre elles. Ceci est facile à réaliser avec une régression multiple . Vous exécuteriez un modèle avec A comme variable dépendante, puis une variable continue avec tous les scores pour B1 et B2, une variable catégorielle indiquant de quelle variable il s'agissait (B1 ou B2) et l'interaction entre eux. En r:
> 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
Voici les corrélations à partir des données que j'ai générées:
> 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
>
Modification du format des données pour répondre aux besoins du modèle (reformatage en "long"):
> mydata <- as.data.frame(mydata) %>%
+ gather("var", "value", B1, B2)
>
Voici le modèle:
résumé (lm (A ~ value * 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
Les résultats ici (à partir de mes données synthétiques) suggèrent qu'il existe une relation significative entre B1 et A (le test du coefficient "valeur", puisque B1 est le groupe de référence pour le coefficient "var"), mais que la différence entre la relation B1 avec A et la relation B2 avec A n'est pas significative (le test du coefficient "valeur: varB2").
Si vous aimez penser en termes de corrélation plutôt que de coefficients de régression, standardisez simplement toutes vos variables (A, B1 et B2) avant d'exécuter le modèle et les coefficients de régression que vous obtiendrez seront standardisés (pas tout à fait la même chose qu'un corrélation d'ordre zéro, mais beaucoup plus proche en termes d'interprétation).
Notez également que cela limitera votre analyse aux seuls cas qui ont à la fois B1 et B2 ( suppression par liste ). Tant que cela vous laisse suffisamment de données pour ne pas être sous-alimenté, et tant que les données manquantes sont manquantes de manière aléatoire (ou une proportion suffisamment petite du total des données pour ne pas avoir beaucoup d'importance même si elles manquent de manière non aléatoire), alors c'est bien.
Le fait que vous limitez votre analyse au même ensemble de données pour estimer les effets à la fois pour B1 et B2 (plutôt que d'utiliser des ensembles de données légèrement différents, en fonction des différents modèles de manque) a l'avantage de rendre l'interprétation de la différence entre les corrélations un peu plus simple. Si vous calculez les corrélations séparément pour chacune et testez ensuite la différence entre elles , vous rencontrez le problème que les données sous-jacentes sont légèrement différentes dans chaque cas --- toute différence que vous voyez pourrait être due à des différences dans les échantillons autant qu'à des différences dans les relations réelles entre les variables.