Przykład silnego współczynnika korelacji o wysokiej wartości p

21

Zastanawiałem się, czy można mieć bardzo silny współczynnik korelacji (powiedzmy .9 lub wyższy), z wysoką wartością p (powiedzmy .25 lub wyższy)?

Oto przykład niskiego współczynnika korelacji o wysokiej wartości p:

set.seed(10)
y <- rnorm(100)
x <- rnorm(100)+.1*y
cor.test(x,y)

cor = 0,03908927, p = 0,6994

Wysoki współczynnik korelacji, niska wartość p:

y <- rnorm(100)
x <- rnorm(100)+2*y
cor.test(x,y)

cor = 0,8807809, p = 2,2e-16

Niski współczynnik korelacji, niska wartość p:

y <- rnorm(100000)
x <- rnorm(100000)+.1*y
cor.test(x,y)

cor = 0,1035018, p = 2,2e-16

Wysoki współczynnik korelacji, wysoka wartość p: ???

Zach
źródło

Odpowiedzi:

36

Dolna linia

Współczynnik korelacji próbki potrzebny do odrzucenia hipotezy, że rzeczywisty (Pearsona) współczynnik korelacji wynosi zero, staje się niewielki dość szybko wraz ze wzrostem wielkości próby. Tak w ogóle, nie, nie można równocześnie mieć duży (co do wielkości) Współczynnik korelacji i jednocześnie dużą -valuep .

The Top Line (Szczegóły)

Test zastosowany dla współczynnika korelacji Pearsona w funkcji jest bardzo nieznacznie zmodyfikowaną wersją metody, którą omawiam poniżej.Rcor.test

Załóżmy, że są to dwuwymiarowe normalne losowe wektory z korelacją ρ . Chcemy przetestować hipotezę zerową, że ρ = 0 w porównaniu z ρ 0 . Niech r będzie współczynnikiem korelacji próbki. Stosując standardową teorię regresji liniowej, nietrudno wykazać, że statystyka testowa, T = r (X1,Y1),(X2,Y2),,(Xn,Yn)ρρ=0ρ0r marozkładtn-2pod hipotezą zerową. W przypadku dużychnThetn-2Rozkład zbliża rozkładu normalnego. StądT2jest w przybliżeniu chi-kwadrat rozmieszczone o jednym stopniu swobody. (Przy przyjętych przez nas założeniachT2F1,n-2w rzeczywistości, aleprzybliżenieχ21wyjaśnia, co się dzieje, jak sądzę.)

T=rn2(1r2)
tn2ntn2T2T2F1,n2χ12

Tak więc gdzie q 1 - α jestkwantylem ( 1 - α ) rozkładu chi-kwadrat o jednym stopniu swobody.

P(r21r2(n2)q1α)α,
q1α(1α)

Teraz zauważ, że rośnie wraz ze wzrostem r 2 . Zmieniając liczbę w rachunku prawdopodobieństwa, mamy to dla wszystkich | r | 1r2/(1r2)r2 otrzymamy odrzucenie hipotezy zerowej na poziomieα. Najwyraźniej prawa strona maleje zn.

|r|11+(n2)/q1α
αn

Fabuła

Oto wykres regionu odrzucenia jako funkcja wielkości próby. Na przykład, gdy wielkość próbki przekracza 100, (absolutna) korelacja musi wynosić tylko około 0,2, aby odrzucić wartość zerową na poziomie α = 0,05 .|r|α=0.05

Symulacja

Możemy wykonać prostą symulację, aby wygenerować parę wektorów o zerowej średniej z dokładnym współczynnikiem korelacji. Poniżej znajduje się kod. Z tego możemy przyjrzeć się wynikowi cor.test.

k <- 100
n <- 4*k

# Correlation that gives an approximate p-value of 0.05
# Change 0.05 to some other desired p-value to get a different curve
pval <- 0.05
qval <- qchisq(pval,1,lower.tail=F)
rho  <- 1/sqrt(1+(n-2)/qval)

# Zero-mean orthogonal basis vectors
b1 <- rep(c(1,-1),n/2)
b2 <- rep(c(1,1,-1,-1),n/4)

# Construct x and y vectors with mean zero and an empirical
# correlation of *exactly* rho
x <- b1
y <- rho * b1 + sqrt(1-rho^2) * b2

# Do test
ctst <- cor.test(x,y)

Zgodnie z żądaniem w komentarzach, oto kod do odtworzenia wykresu, który można uruchomić natychmiast po powyższym kodzie (i wykorzystuje niektóre zmienne tam zdefiniowane).

png("cortest.png", height=600, width=600)
m  <- 3:1000
yy <- 1/sqrt(1+(m-2)/qval)
plot(m, yy, type="l", lwd=3, ylim=c(0,1),
     xlab="sample size", ylab="correlation")
polygon( c(m[1],m,rev(m)[1]), c(1,yy,1), col="lightblue2", border=NA)
lines(m,yy,lwd=2)
text(500, 0.5, "p < 0.05", cex=1.5 )
dev.off()
kardynał
źródło
1
Więc - jaki jest wynik końcowy? Myślę, że mówisz, że jeśli wielkość próby nie jest mała, wysoka wartość korelacji implikuje niską wartość p - ale myślę, że pomogłoby to wyraźnie to przeliterować.
DW
p
@cardinal, czy możesz opublikować kod źródłowy wygenerowanego wykresu?
aL3xa
@DW, podjąłem próbę rozwiązania twoich problemów. Jeśli zauważysz ulepszenia, które można wprowadzić, daj mi znać.
kardynał
1
@ aL3xa: Dodałem kod wydruku, którego użyłem. Mam nadzieję że to pomoże.
kardynał
17
cor.test(c(1,2,3),c(1,2,2))

cor = 0,866, p = 0,333

Aaron - Przywróć Monikę
źródło
6
@Zach: Prosimy o ponowne rozpatrzenie czeku, ponieważ kardynał i shabbychef poświęcili czas na udzielenie pełnych odpowiedzi.
Aaron - Przywróć Monikę
11

Wysokie oszacowanie współczynnika korelacji przy wysokiej wartości p może wystąpić tylko przy bardzo małej wielkości próby. Chciałem przedstawić ilustrację, ale właśnie to zrobił Aaron!

jeden przystanek
źródło
9

1/n3ρ^>0p

p=22Φ(atanh(ρ^)n3),
ΦH0:ρ=0

nρ^p

 #get n for sample correlation and p-value, 2-sided test of 0 correlation
 n.size <- function(rho.hat,p.val) {
   n <- 3 + ((qnorm(1 - 0.5 * p.val)) / atanh(rho.hat))^2
 }

ρ^=0.5p=0.2

print(n.size(0.5,0.2))

[1] 8.443062

n,pρ^

shabbychef
źródło
1

Tak. Wartość p zależy od wielkości próbki, więc mała próbka może to dać.

Powiedzmy, że prawdziwy rozmiar efektu był bardzo mały, a ty narysujesz małą próbkę. Na szczęście dostajesz kilka punktów danych o bardzo wysokiej korelacji. Wartość p będzie odpowiednio wysoka. Korelacja jest wysoka, ale nie jest to wynik bardzo niezawodny.

Przykładowa korelacja z cor's R () powie ci najlepsze oszacowanie korelacji (biorąc pod uwagę próbkę). Wartość p NIE mierzy siły korelacji. Mierzy prawdopodobieństwo, że mogło powstać w przypadku, gdy faktycznie nie wystąpił żaden efekt, biorąc pod uwagę wielkość próbki.

Inny sposób na zobaczenie tego: jeśli masz ten sam rozmiar efektu, ale otrzymujesz więcej próbek, wartość p zawsze spada do zera.

(Jeśli chcesz ściślej zintegrować pojęcia szacowanej wielkości efektu i pewności co do oszacowania, lepiej zastosować przedziały ufności; lub zastosować techniki bayesowskie.)

Brendan OConnor
źródło
„mała próbka” tutaj jest w zasadzie tak mała, że ​​jest bezcelowa, w zasadzie każda próbka większa niż 4 odrzuci zero α=0,05korelacji większy od 0,9: x <- seq(0,4); y <- seq(0,4) + rnorm(5); cor.test(x,y).
naught101