R을 사용하여 상관이 주어진 값과 같다는 가설을 테스트하는 방법은 무엇입니까?


10

두 벡터의 상관이 주어진 수와 같다는 가설을 검정하는 함수가 있습니까 (0.75)? cor.test를 사용하여 cor = 0을 테스트 할 수 있으며 0.75가 신뢰 구간 내에 있는지 확인할 수 있습니다. 그러나 cor = 0.75에 대한 p- 값을 계산하는 함수가 있습니까?

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

2
이 질문은 crossvalidated.com에 더 적합합니다
Sacha Epskamp

1
@sacha-먼저 사이트의 FAQ를 확인하십시오. stats.se 사이트 FAQ는 R을 사용한 프로그래밍 질문을 SO에 게시 할 것을 권장합니다.
Kev

문제는 "cor = 0.75에 대한 p- 값을 계산하는 함수가 있습니까?" 프로그래밍과 관련이 없습니다. 통계적인 질문입니다.
Sacha Epskamp 12

나는 통계 전문가와 상담하고 그들이 어떻게 생각하는지 볼 것입니다.
Kev

1
@mosaic 여기에 귀하의 계정을 등록하십시오. 이렇게하면 SO 계정을 현재 계정과 연결할 수 있습니다.
chl

답변:


12

Fisher 's atan 변환을 안정화 하는 분산을 사용하면 p- 값을

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

또는 관심있는 단면 / 양면 p- 값의 버전이 무엇이든간에 명백히, 여기 에는 입력으로 샘플 크기 n와 샘플 상관 계수 가 필요합니다 r.


+1 귀하의 답변에 감사드립니다-이 경우 Fisher 변환이 적절한 지 또는 확실하지 않은지 확실하지 않지만 귀하의 답변이이를 명확하게하는 데 도움이됩니다.
개빈 심슨

@Gavin, OP의 의도가 무엇인지 명확히하려고했습니다. 나는 그와 같은 질문이 발생하는 모달 상황을 가정했으며, 그것이 효과가있는 것처럼 보입니다. :).
StasK

4

rho 주위의 r_hat 분포는 Xu Cui 웹 페이지의 Matlab 코드에서 수정 된이 R 함수에 의해 제공됩니다 . 표본 크기가 "n"이고 가상의 실제 값이 "ro"인 경우 관측 된 값 "r"을 예측할 수없는 확률에 대한 추정값으로이 값을 추정하는 것은 어렵지 않습니다.

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

그런 다음이 함수를 사용하여 null rho의 분포를 0.75로 플로팅하고 r_hat이 0.6보다 작을 확률을 계산하고 플롯의 해당 영역에서 음영을 생성 할 수 있습니다.

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

여기에 이미지 설명을 입력하십시오


4

Fisher의 변형보다 정확하지 않은 또 다른 접근법은 더 직관적 일 수 있다고 생각합니다 (통계적 유의성과 더불어 실제적 유의성에 대한 아이디어를 제공 할 수 있음).

 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

R 패키지 의 vis.test함수에 이것을 구현 TeachingDemos했습니다. 예제를 위해이를 실행하는 한 가지 방법은 다음과 같습니다.

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 )

물론 실제 데이터가 정상이 아니거나 관계가 선형이 아닌 경우 위 코드를 사용하여 쉽게 선택할 수 있습니다. 그것들을 동시에 테스트하려면 위의 코드가 그렇게하거나 데이터의 특성을 더 잘 표현하기 위해 위의 코드를 조정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.