Modificato dopo un utile feedback di Mark White (grazie!)
Un'opzione è calcolare entrambe le relazioni (B1 con A e B2 con A) in un singolo modello che stima anche la differenza tra loro. Questo è facile da realizzare con regressione multipla . Dovresti eseguire un modello con A come variabile dipendente, quindi una variabile continua con tutti i punteggi per B1 e B2, una variabile categoriale che indica quale variabile era (B1 o B2) e l'interazione tra di loro. In 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
Ecco le correlazioni dai dati che ho generato:
> 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
>
Modifica del formato dei dati per soddisfare le esigenze del modello (riformattazione in "lungo"):
> mydata <- as.data.frame(mydata) %>%
+ gather("var", "value", B1, B2)
>
Ecco il modello:
riepilogo (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
I risultati qui (dai miei dati inventati) suggeriscono che esiste una relazione significativa tra B1 e A (il test del coefficiente "valore", poiché B1 è il gruppo di riferimento per il coefficiente "var"), ma che la differenza tra la relazione B1 con A e la relazione B2 con A non è significativa (il test del coefficiente "valore: varB2").
Se ti piace pensare in termini di correlazione piuttosto che di coefficienti di regressione, basta standardizzare tutte le variabili (A, B1 e B2) prima di eseguire il modello e i coefficienti di regressione che otterrai saranno standardizzati (non esattamente la stessa cosa di un correlazione di ordine zero, ma molto più vicina in termini di interpretazione).
Si noti inoltre che ciò limiterà la tua analisi solo ai casi che hanno sia B1 che B2 ( cancellazione listwise ). Fintanto che ti lascia abbastanza dati per non essere sottodimensionato e fintanto che i dati mancanti mancano in modo casuale (o una proporzione abbastanza piccola dei dati totali per non importare molto anche se mancano in modo casuale), allora va bene.
Il fatto che stai limitando la tua analisi allo stesso set di dati per stimare gli effetti sia per B1 che per B2 (piuttosto che usare set di dati leggermente diversi, basati su diversi modelli di mancanza) ha il vantaggio di rendere leggermente l'interpretazione della differenza tra correlazioni più semplice. Se si calcolano le correlazioni separatamente per ciascuna e quindi si verifica la differenza tra loro , si verifica il problema che i dati sottostanti sono leggermente diversi in ogni caso --- qualsiasi differenza che vedi potrebbe essere dovuta alle differenze nei campioni tanto quanto alle differenze nelle relazioni effettive tra variabili.