R kullanarak korelasyonun verilen değere eşit olduğu hipotezi nasıl test edilir?


10

İki vektörün korelasyonunun verilen bir sayıya eşit olduğu hipotezini test etmek için bir fonksiyon var mı, örneğin 0.75? Cor.test kullanarak cor = 0'ı test edebilirim ve 0.75'in güven aralığında olup olmadığını görebilirim. Fakat cor = 0.75 için p-değerini hesaplamak için bir fonksiyon var mı?

x <- rnorm(10)
y <- x+rnorm(10)
cor.test(x, y)

2
Bu soru crossvalidated.com
Sacha Epskamp

1
@sacha - lütfen önce bir sitenin SSS'sini kontrol edin, stats.se sitesi faq, R'yi kullanarak programlama sorularının SO'ya gönderilmesini önerir.
Kev

"Cor = 0.75 için p-değerini hesaplamak için bir fonksiyon var mı?" programlama ile ilgisi yoktur. Bu istatistiksel bir sorudur.
Sacha Epskamp

İstatistik insanlarına danışacağım ve ne düşündüklerini göreceğim.
Kev

1
@mosaic Lütfen hesabınızı buradan kaydedin. Bu şekilde, SO hesabınızı mevcut hesapla ilişkilendirebileceksiniz.
chl

Yanıtlar:


12

Fisher'ın atanan dönüşümünü dengeleyen varyansı kullanarak, p değerini

pnorm( 0.5 * log( (1+r)/(1-r) ), mean = 0.5 * log( (1+0.75)/(1-0.75) ), sd = 1/sqrt(n-3) )

veya ne olursa olsun sürümü. obviuosly ilgilenen edilir / iki taraflı p değeri one-taraflı, Örnek boyutunu ihtiyaç nve örnek korelasyon katsayısı rbu girdi olarak.


+1 Cevabınız için teşekkürler - Fisher dönüşümünün bu durumda uygun olup olmadığı benim için net değildi, ancak cevabınız bunun netleşmesine yardımcı oluyor.
Gavin Simpson

@Gavin, OP'nin niyetinin ne olduğunu açıklamaya çalıştın. Sadece böyle bir sorunun ortaya çıkacağı modsal durumu varsaydım ve işe yaramış gibi görünüyor :).
StasK

4

R_hat'ın rho etrafındaki dağılımı , Xu Cui'nin web sayfasındaki Matlab kodundan uyarlanan bu R fonksiyonu tarafından verilir . "N" örnek büyüklüğü ve "ro" varsayımsal bir gerçek değeri göz önüne alındığında, gözlenen bir "r" değerinin olanaksız olduğu olasılığını tahmin etmek o kadar da zor değildir.

corrdist <- function (r, ro, n) {
        y = (n-2) * gamma(n-1) * (1-ro^2)^((n-1)/2) * (1-r^2)^((n-4)/2)
        y = y/ (sqrt(2*pi) * gamma(n-1/2) * (1-ro*r)^(n-3/2))
        y = y* (1+ 1/4*(ro*r+1)/(2*n-1) + 9/16*(ro*r+1)^2 / (2*n-1)/(2*n+1)) }

Daha sonra bu işlevle, 0.75'lik bir boş rho'nun dağılımını çizebilir, r_hat'ın 0.6'dan küçük olma olasılığını hesaplayabilir ve arsa üzerindeki o alanda gölgeleme yapabilirsiniz:

 plot(seq(-1,1,.01), corrdist( seq(-1,1,.01), 0.75, 10) ,type="l")
 integrate(corrdist, lower=-1, upper=0.6, ro=0.75, n=10)
# 0.1819533 with absolute error < 2e-09
 polygon(x=c(seq(-1,0.6, length=100), 0.6, 0), 
         y=c(sapply(seq(-1,0.6, length=100), 
         corrdist, ro=0.75, n=10), 0,0), col="grey")

resim açıklamasını buraya girin


4

Fisher'ın dönüşümünden daha az kesin olan başka bir yaklaşım, ancak daha sezgisel olabileceğini düşünüyorum (ve istatistiksel anlamlılığa ek olarak pratik önem hakkında fikir verebilir) görsel test:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

Bunun R vis.testiçin TeachingDemospaketteki işlevinde bir uygulaması var . Örneğin için çalıştırmanın muhtemelen bir yolu:

vt.scattercor <- function(x,y,r,...,orig=TRUE)
{
    require('MASS')
    par(mar=c(2.5,2.5,1,1)+0.1)
    if(orig) {
        plot(x,y, xlab="", ylab="", ...)
    } else {
        mu <- c(mean(x), mean(y))
        var <- var( cbind(x,y) )
        var[ rbind( 1:2, 2:1 ) ] <- r * sqrt(var[1,1]*var[2,2])
        tmp <- mvrnorm( length(x), mu, var )
        plot( tmp[,1], tmp[,2], xlab="", ylab="", ...)
    }
}

test1 <- mvrnorm(100, c(0,0), rbind( c(1,.75), c(.75,1) ) )
test2 <- mvrnorm(100, c(0,0), rbind( c(1,.5), c(.5,1) ) )

vis.test( test1[,1], test1[,2], r=0.75, FUN=vt.scattercor )
vis.test( test2[,1], test2[,2], r=0.75, FUN=vt.scattercor )

Tabii ki gerçek verileriniz normal değilse veya ilişki doğrusal değilse, yukarıdaki kodla kolayca alınacaktır. Bunları eşzamanlı olarak test etmek isterseniz, yukarıdaki kod bunu yapar veya yukarıdaki kod, verilerin niteliğini daha iyi temsil edecek şekilde uyarlanabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.