Statystyka · Korelacja

Jak porównać dwie korelacje?

Krótka odpowiedź: test zależy od tego, czy korelacje pochodzą z dwóch grup, czy z tej samej próby. Pokazujemy oba przypadki w R, z przedziałem ufności dla różnicy i gotowym opisem do pracy.

Strona główna / Blog / Porównanie dwóch korelacji
W skrócie: Najpierw ustal, czy korelacje są niezależne (dwie grupy osób), czy zależne (ta sama próba). Dla dwóch grup użyj testu z po transformacji Fishera, dla korelacji z tej samej próby – testu Williamsa albo Steigera. Podaj różnicę z 95% przedziałem ufności. To, że jedna korelacja jest istotna, a druga nie, nie jest testem różnicy.

Najpierw ustal, które korelacje porównujesz

Wybór testu zależy od tego, skąd pochodzą obie korelacje. Jeśli policzyłeś je w dwóch różnych grupach osób, są niezależne. Jeśli obie pochodzą z tej samej próby, są zależne, a test musi uwzględnić, że opierają się na tych samych osobach. Diedenhofen i Musch (2015) wyróżniają trzy sytuacje:

Trzy sytuacje porównywania korelacji i odpowiadające im testy
SytuacjaPrzykładTest
Dwie grupy osób (korelacje niezależne)Stres a sen u studentów stacjonarnych i niestacjonarnychTest z dla różnicy korelacji po transformacji Fishera
Ta sama próba, wspólna zmiennaStres a wyczerpanie i stres a sen, te same osobyTest Williamsa lub inne testy dla korelacji zależnych
Ta sama próba, bez wspólnej zmiennejStres a sen w pierwszym i drugim pomiarzeTest Steigera dla korelacji zależnych bez wspólnej zmiennej

Przegląd testów dla korelacji zależnych i wzory podaje Steiger (1980). Zou (2007) pokazał, jak dla każdej z tych sytuacji policzyć przedział ufności różnicy, i ten przedział warto podać obok wartości p. Poniżej dwa przykłady na danych symulowanych: 72 studentów stacjonarnych i 58 niestacjonarnych, razem 130 osób.

Pułapka: jedna korelacja istotna, druga nie

Najczęstszy błąd wygląda tak: „u studentów stacjonarnych korelacja jest istotna, a u niestacjonarnych nie, więc związek różni się między grupami”. To rozumowanie nie jest testem różnicy. Gelman i Stern (2006) pokazują, że nawet duża różnica wartości p może odpowiadać małej i nieistotnej różnicy samych efektów. Diedenhofen i Musch (2015) podkreślają, że o różnicy korelacji można wnioskować tylko z bezpośredniego testu tej różnicy.

Dwie grupy: test z Fishera

W przykładzie stres koreluje z problemami ze snem na poziomie r = .40 u 72 studentów stacjonarnych (p < .001) i r = .14 u 58 niestacjonarnych (p = .298). Pierwsza korelacja jest istotna, druga nie. Żeby je porównać, zamień każdą na z Fishera (z = atanh r) i podziel różnicę przez jej błąd standardowy:

z = (z1 − z2) / √[1/(n1 − 3) + 1/(n2 − 3)]

Wynik: z = 1.55, p = .121. Różnica korelacji wynosi .26, ale jej 95% przedział ufności według metody Zou (2007) to [−.07, .58]. Obejmuje zero i bardzo duże różnice, więc dane nie pozwalają rozstrzygnąć, czy związek w grupach jest taki sam. Nie piszesz więc, że grupy się różnią, ani że się nie różnią.

Miarą wielkości tej różnicy jest q Cohena (1992), czyli różnica dwóch z Fishera. Tutaj q = 0.28. Żeby wykryć taką różnicę z mocą .80 przy α = .05, potrzeba 103 osób w każdej grupie. Porównanie korelacji między grupami wymaga więc zwykle znacznie większej próby niż sama korelacja. Warto to policzyć przed badaniem (zob. dobór liczebności próby).

Ta sama próba: korelacje zależne

Inne pytanie: czy w całej próbie (N = 130) stres silniej wiąże się z wyczerpaniem niż z problemami ze snem? Obie korelacje mają wspólną zmienną (stres) i pochodzą od tych samych osób. Stres koreluje z wyczerpaniem na poziomie r = .54, a ze snem na poziomie r = .28. Test musi uwzględnić także trzecią korelację, między snem a wyczerpaniem (r = .37).

Test Williamsa daje t(127) = 3.03, p = .003, a różnica wynosi .26, 95% CI [.09, .43]. Różnica ma tę samą wielkość co w porównaniu grup, a mimo to jest istotna. Tym razem obie korelacje policzono na wszystkich 130 osobach, a test korzysta z tego, że ich oszacowania są ze sobą powiązane. Gdyby porównać te korelacje testem dla grup niezależnych, wynik byłby błędny.

Gdy korelacje nie mają wspólnej zmiennej, np. ten sam związek w dwóch pomiarach, potrzebny jest test Steigera. W R wykona go funkcja r.test() z pakietu psych z argumentami r12, r34 i czterema korelacjami krzyżowymi. Pakiet cocor oferuje wiele testów naraz z przedziałem Zou (Diedenhofen i Musch, 2015).

Kiedy zamiast korelacji porównać nachylenia

Korelacja w grupie zależy nie tylko od siły związku, ale też od rozrzutu wyników. Jeśli w jednej grupie stres ma mniejszy zakres, korelacja spadnie, nawet gdy stres wpływa na sen tak samo. Jeśli pytasz, czy wpływ jednej zmiennej na drugą zależy od grupy, porównaj nachylenia w regresji z interakcją. To jest moderacja (zob. efekt interakcji i poradnik analiza moderacji krok po kroku). Porównanie korelacji odpowiada na pytanie o siłę związku w standaryzowanych jednostkach, a nachylenia – o wielkość zmiany w jednostkach skali.

Podstawy korelacji, w tym przedział ufności dla pojedynczego r i wybór między korelacją Pearsona a Spearmana, opisujemy w poradniku korelacja Pearsona i Spearmana krok po kroku. O tym, jak oceniać samą siłę r, piszemy we wpisie czy korelacja .30 to dużo, a inne testy znajdziesz w przewodniku testy statystyczne – przewodnik po wyborze.

Jak to opisać w pracy

Dwie grupy:

Stres korelował z problemami ze snem u studentów stacjonarnych, r(70) = .40, p < .001, natomiast u studentów niestacjonarnych związek był słaby i nieistotny, r(56) = .14, p = .298. Różnica między korelacjami nie była jednak istotna statystycznie (test z dla korelacji niezależnych po transformacji Fishera: z = 1.55, p = .121; różnica = .26, 95% CI [−.07, .58]). Na podstawie tych danych nie można stwierdzić, że siła związku różni się między grupami.

Ta sama próba:

W całej próbie (N = 130) stres silniej korelował z wyczerpaniem (r = .54) niż z problemami ze snem (r = .28). Różnica między tymi zależnymi korelacjami była istotna statystycznie (test Williamsa: t(127) = 3.03, p = .003; różnica = .26, 95% CI [.09, .43]).
Przykład reprodukowalny

Porównanie dwóch korelacji w R

Kod liczy test z Fishera dla dwóch grup (ręcznie i funkcją psych::r.test()), przedział ufności Zou dla różnicy, q Cohena z potrzebną liczebnością oraz test Williamsa dla korelacji zależnych.

Korelacje niezależne i zależne

Dane wejściowe: dane symulowane: 72 studentów stacjonarnych i 58 niestacjonarnych, zmienne stres, sen i wyczerpanie.

Co odczytać: r i p w grupach, z i p dla różnicy, 95% CI różnicy, q i n na grupę, macierz korelacji, t, df i p testu Williamsa oraz różnicę korelacji zależnych z 95% CI.

R
# Porównanie dwóch korelacji: grupy niezależne i korelacje zależne (dane symulowane)
library(MASS); library(psych)
set.seed(1427)
sym <- function(n, R) { d <- as.data.frame(mvrnorm(n, rep(0, 3), R))
  names(d) <- c("stres", "sen", "wyczerpanie"); d }
R1 <- matrix(c(1, .45, .55,  .45, 1, .40,  .55, .40, 1), 3)    # studia stacjonarne
R2 <- matrix(c(1, .20, .50,  .20, 1, .35,  .50, .35, 1), 3)    # studia niestacjonarne
d <- rbind(cbind(tryb = "stacjonarne", sym(72, R1)), cbind(tryb = "niestacjonarne", sym(58, R2)))

# Funkcje: CI dla r (Fisher) i CI Zou (2007) dla różnicy dwóch korelacji
ci_r <- function(r, n) tanh(atanh(r) + c(-1, 1) * qnorm(.975) / sqrt(n - 3))
zou <- function(r1, n1, r2, n2, c12 = 0) {          # c12 = korelacja między r1 i r2 (0 dla grup niezależnych)
  l1 <- ci_r(r1, n1); l2 <- ci_r(r2, n2)
  c(r1 - r2 - sqrt((r1 - l1[1])^2 + (l2[2] - r2)^2 - 2 * c12 * (r1 - l1[1]) * (l2[2] - r2)),
    r1 - r2 + sqrt((l1[2] - r1)^2 + (r2 - l2[1])^2 - 2 * c12 * (l1[2] - r1) * (r2 - l2[1])))
}

# 1. Dwie grupy niezależne: stres a problemy ze snem
s <- split(d, d$tryb)
k <- sapply(s, function(g) { t <- cor.test(g$stres, g$sen)
  c(n = nrow(g), r = unname(t$estimate), p = t$p.value) })
round(k, 4)
z <- (atanh(k["r", "stacjonarne"]) - atanh(k["r", "niestacjonarne"])) /
  sqrt(1 / (k["n", "stacjonarne"] - 3) + 1 / (k["n", "niestacjonarne"] - 3))
c(z = round(unname(z), 2), p = round(2 * pnorm(-abs(unname(z))), 3))
rt <- r.test(n = 72, r12 = k["r", "stacjonarne"], r34 = k["r", "niestacjonarne"], n2 = 58)  # to samo w psych
round(c(z = rt$z, p = rt$p), 3)
round(zou(k["r", "stacjonarne"], 72, k["r", "niestacjonarne"], 58), 2)                   # 95% CI różnicy
q <- atanh(k["r", "stacjonarne"]) - atanh(k["r", "niestacjonarne"]); round(unname(q), 2)  # q Cohena
ceiling(((qnorm(.975) + qnorm(.80)) / q)^2 + 3)          # n na grupę dla mocy .80 przy takim q

# 2. Korelacje zależne ze wspólną zmienną (cała próba): stres–sen a stres–wyczerpanie
N <- nrow(d); r <- cor(d[, c("stres", "sen", "wyczerpanie")])
round(r, 2)
rw <- r.test(n = N, r12 = r["stres", "wyczerpanie"], r13 = r["stres", "sen"], r23 = r["sen", "wyczerpanie"])
round(c(t = rw$t, df = N - 3, p = rw$p), 4)                 # test Williamsa
r12 <- r["stres", "wyczerpanie"]; r13 <- r["stres", "sen"]; r23 <- r["sen", "wyczerpanie"]
c12 <- ((r23 - .5 * r12 * r13) * (1 - r12^2 - r13^2 - r23^2) + r23^3) / ((1 - r12^2) * (1 - r13^2))
round(c(roznica = r12 - r13, ci = zou(r12, N, r13, N, c12)), 2)
Wynik w R
  niestacjonarne stacjonarne
n        58.0000     72.0000
r         0.1391      0.3971
p         0.2977      0.0006
    z     p 
1.550 0.121 
    z     p 
1.550 0.121 
[1] -0.07  0.58
[1] 0.28
[1] 103
            stres  sen wyczerpanie
stres        1.00 0.28        0.54
sen          0.28 1.00        0.37
wyczerpanie  0.54 0.37        1.00
       t       df        p 
  3.0252 127.0000   0.0030 
roznica     ci1     ci2 
   0.26    0.09    0.43 

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 z pakietami MASS (wersja 7.3.65) i psych (wersja 2.6.5).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. psych: Revelle, W. (2026). psych: Procedures for psychological, psychometric, and personality research (R package version 2.6.5) [Computer software]. Northwestern University. https://CRAN.R-project.org/package=psych
  3. MASS (wersja 7.3.65): Venables, W. N., & Ripley, B. D. (2002). Modern applied statistics with S (4th ed.). Springer.

Najczęstsze pytania

Czy jeśli korelacja jest istotna w jednej grupie, a w drugiej nie, to grupy się różnią?

Nie. Taki wniosek wymaga bezpośredniego testu różnicy korelacji. W przykładzie z tego wpisu korelacja .40 była istotna, a .14 nie, ale test różnicy dał p = .121, a przedział ufności różnicy objął zero.

Jak porównać dwie korelacje bez programu statystycznego?

Wystarczą dwie korelacje i liczebności grup. Zamień każdą korelację na z Fishera (z = atanh r), odejmij wyniki i podziel różnicę przez pierwiastek z 1/(n1 − 3) + 1/(n2 − 3). Wartość p odczytasz z rozkładu normalnego, np. w kalkulatorze wartości p.

Jak porównać dwie korelacje policzone na tych samych osobach?

Użyj testu dla korelacji zależnych, który uwzględnia trzecią korelację między porównywanymi zmiennymi, np. testu Williamsa, gdy korelacje mają wspólną zmienną. Test dla grup niezależnych daje tu błędny wynik. W R wykonasz go funkcją psych::r.test().

Ile osób potrzeba, żeby porównać dwie korelacje?

Zwykle znacznie więcej niż do jednej korelacji. Aby z mocą .80 wykryć różnicę o wielkości q = 0.28 (np. .40 wobec .14), potrzeba około 103 osób w każdej grupie.

Powiązane hasła

Przeczytaj też

Chcesz porównać związki w dwóch grupach?

Dobierzemy właściwy test różnicy korelacji, policzymy przedział ufności i wyjaśnimy wynik tak, żebyś umiał(a) go opisać i obronić.

Oferta dla studentówWyceń analizę

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Cohen, J. (1992). A power primer. Psychological Bulletin, 112(1), 155–159. https://doi.org/10.1037/0033-2909.112.1.155
  2. Diedenhofen, B., & Musch, J. (2015). cocor: A comprehensive solution for the statistical comparison of correlations. PLOS ONE, 10(4), Article e0121945. https://doi.org/10.1371/journal.pone.0121945 ● Otwarty dostęp
  3. Gelman, A., & Stern, H. (2006). The difference between “significant” and “not significant” is not itself statistically significant. The American Statistician, 60(4), 328–331. https://doi.org/10.1198/000313006x152649
  4. Steiger, J. H. (1980). Tests for comparing elements of a correlation matrix. Psychological Bulletin, 87(2), 245–251. https://doi.org/10.1037/0033-2909.87.2.245
  5. Zou, G. Y. (2007). Toward using confidence intervals to compare correlations. Psychological Methods, 12(4), 399–413. https://doi.org/10.1037/1082-989x.12.4.399

Cytowania BibTeX

@article{cohen1992power, author={Cohen, Jacob}, title={{A power primer}}, journal={Psychological Bulletin}, year={1992}, volume={112}, number={1}, pages={155--159}, doi={10.1037/0033-2909.112.1.155}}
@article{diedenhofen2015cocor, author={Diedenhofen, Birk and Musch, Jochen}, title={{cocor: A comprehensive solution for the statistical comparison of correlations}}, journal={PLOS ONE}, year={2015}, volume={10}, number={4}, eid={e0121945}, doi={10.1371/journal.pone.0121945}}
@article{gelman2006difference, author={Gelman, Andrew and Stern, Hal}, title={{The difference between “significant” and “not significant” is not itself statistically significant}}, journal={The American Statistician}, year={2006}, volume={60}, number={4}, pages={328--331}, doi={10.1198/000313006x152649}}
@article{steiger1980tests, author={Steiger, James H.}, title={{Tests for comparing elements of a correlation matrix}}, journal={Psychological Bulletin}, year={1980}, volume={87}, number={2}, pages={245--251}, doi={10.1037/0033-2909.87.2.245}}
@article{zou2007toward, author={Zou, Guang Yong}, title={{Toward using confidence intervals to compare correlations}}, journal={Psychological Methods}, year={2007}, volume={12}, number={4}, pages={399--413}, doi={10.1037/1082-989x.12.4.399}}
R