Làm thế nào để kiểm tra giả thuyết rằng mối tương quan bằng giá trị đã cho bằng R?


10

Có một hàm để kiểm tra giả thuyết rằng mối tương quan của hai vectơ bằng một số đã cho, giả sử 0,75? Sử dụng cor.test tôi có thể kiểm tra cor = 0 và tôi có thể xem liệu 0,75 có nằm trong khoảng tin cậy hay không. Nhưng có một hàm để tính giá trị p cho cor = 0,75 không?

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

2
Câu hỏi này phù hợp hơn cho crossvalidated.com
Sacha Epskamp

1
@sacha - vui lòng kiểm tra Câu hỏi thường gặp của một trang web trước, trang fa.se faq khuyên rằng các câu hỏi lập trình sử dụng R được đăng trên SO.
Kev

Câu hỏi "có chức năng tính giá trị p cho cor = 0,75 không?" không có gì để làm với lập trình. Đó là một câu hỏi thống kê.
Sacha Epskamp

Tôi sẽ tham khảo ý kiến ​​của mọi người và xem họ nghĩ gì.
Kev

1
@mosaic Xin vui lòng, đăng ký tài khoản của bạn ở đây. Bằng cách này, bạn sẽ có thể liên kết tài khoản SO của mình với tài khoản hiện tại.
chl

Câu trả lời:


12

Sử dụng phương sai ổn định biến đổi atan của Fisher , bạn có thể nhận giá trị p là

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

hoặc bất kỳ phiên bản nào của giá trị p một mặt / hai mặt mà bạn quan tâm. Obviuosly, bạn cần cỡ mẫu nvà hệ số tương quan mẫu rlàm đầu vào cho giá trị này.


+1 Cảm ơn câu trả lời của bạn - Tôi không rõ ràng rằng biến đổi Fisher có phù hợp hay không trong trường hợp này, nhưng câu trả lời của bạn giúp làm rõ điều đó.
Gavin Simpson

@Gavin, bạn đã cố gắng làm rõ ý định của OP là gì. Tôi chỉ giả định tình huống phương thức trong đó một câu hỏi như thế sẽ xuất hiện, và có vẻ như nó đã được giải quyết :).
StasK

4

Việc phân phối r_hat xung quanh rho được đưa ra bởi hàm R này được điều chỉnh từ mã Matlab tại trang web của Xu Cui . Không khó để biến điều này thành ước tính cho xác suất giá trị quan sát "r" là không thể thực hiện được với kích thước mẫu là "n" và giá trị thực giả định là "ro".

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)) }

Sau đó, với chức năng đó, bạn có thể vẽ phân phối của null rho là 0,75, tính xác suất r_hat sẽ nhỏ hơn 0,6 và tô màu trong khu vực đó trên lô:

 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")

nhập mô tả hình ảnh ở đây


4

Một cách tiếp cận khác có thể kém chính xác hơn so với thông tin của Fisher, nhưng tôi nghĩ có thể trực quan hơn (và có thể đưa ra ý tưởng về ý nghĩa thực tế bên cạnh ý nghĩa thống kê) là thử nghiệm trực quan:

 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

Có một triển khai này trong vis.testhàm trong TeachingDemosgói cho R. Một cách có thể để chạy nó cho ví dụ của bạn là:

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 )

Tất nhiên nếu dữ liệu thực của bạn không bình thường hoặc mối quan hệ không tuyến tính thì điều đó sẽ dễ dàng được chọn với đoạn mã trên. Nếu bạn muốn kiểm tra đồng thời những thứ đó, thì đoạn mã trên sẽ làm điều đó hoặc đoạn mã trên có thể được điều chỉnh để thể hiện tốt hơn bản chất của dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.