10 votos

Cómo probar la hipótesis de que la correlación es igual al valor dado con R?

Hay una función para poner a prueba la hipótesis de que la correlación de dos vectores es igual a un número dado, decir 0.75? El uso de cor.la prueba de que yo pueda probar cor=0 y puedo ver si 0.75 está dentro del intervalo de confianza. Pero hay una función para calcular el valor de p para cor=0.75?

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

21voto

Eero Puntos 1612

Otro enfoque que puede ser menos exacto de Fisher tranformation, pero creo que podría ser más intuitiva (y podría dar ideas acerca de la importancia en la práctica además de la significación estadística) es la prueba visual:

 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

Existe una implementación de este en la vis.test función en el TeachingDemos paquete para R. Uno posiblemente la manera de ejecutar por su ejemplo de ello es:

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 )

Por supuesto, si los datos reales no es normal o que la relación no es lineal, a continuación, que será fácilmente recogido con el código anterior. Si usted desea en forma simultánea de prueba para aquellos, a continuación, el código anterior sería hacer eso, o el código anterior podría ser adaptado para representar mejor la naturaleza de los datos.

18voto

aron Puntos 174

La distribución de r_hat alrededor de rho está dada por esta función de R adaptado de código de Matlab en la página web de Xu Cui. No es tan difícil de convertir esto en una estimación de la probabilidad de que un valor observado "r" es improbable dado el tamaño de la muestra de "n" y un hipotético verdadero valor de la "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)) }

Entonces con esa función se puede graficar la distribución de un null rho de 0.75, calcular la probabilidad de que r_hat será menor que 0,6 y sombra en esa área de la parcela:

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

enter image description here

12voto

StasK Puntos 19497

El uso de la varianza de la estabilización de Fisher atan transformación, se puede obtener el valor de p

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

o cualquier versión de una cara/dos caras p-valor usted está interesado en. Obviuosly, usted necesita el tamaño de la muestra n y la muestra coeficiente de correlación r como entradas a este.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X