Ver si los datos se distribuyen normalmente en R

¿Alguien puede ayudarme a completar la siguiente función en R:

#data is a single vector of decimal values normally.distributed <- function(data) { if(data is normal) return(TRUE) else return(NO) } 

Las pruebas de normalidad no hacen lo que la mayoría piensa que hacen. La prueba de Shapiro, Anderson Darling, y otros son pruebas de hipótesis nulas EN CONTRA de la suposición de la normalidad. No se deben usar para determinar si se deben usar procedimientos estadísticos teóricos normales. De hecho, prácticamente no tienen valor para el analista de datos. ¿En qué condiciones estamos interesados ​​en rechazar la hipótesis nula de que los datos se distribuyen normalmente? Nunca me he encontrado con una situación en la que una prueba normal sea lo correcto. Cuando el tamaño de la muestra es pequeño, incluso las grandes desviaciones de la normalidad no se detectan, y cuando el tamaño de la muestra es grande, incluso la desviación más pequeña de la normalidad dará lugar a un nulo rechazado.

Por ejemplo:

 > set.seed(100) > x <- rbinom(15,5,.6) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.8816, p-value = 0.0502 > x <- rlnorm(20,0,.4) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.9405, p-value = 0.2453 

Entonces, en ambos casos (variables binomiales y lognormales), el valor de p es> 0.05, lo que provoca que no se rechace el valor nulo (que los datos sean normales). ¿Significa esto que debemos concluir que los datos son normales? (sugerencia: la respuesta es no). La falta de rechazo no es lo mismo que aceptar. Esta es la prueba de hipótesis 101.

Pero, ¿qué pasa con los tamaños de muestra más grandes? Tomemos el caso donde la distribución es casi normal.

 > library(nortest) > x <- rt(500000,200) > ad.test(x) Anderson-Darling normality test data: x A = 1.1003, p-value = 0.006975 > qqnorm(x) 

enter image description hereenter image description here

Aquí estamos usando una distribución t con 200 grados de libertad. La gráfica qq muestra que la distribución es más cercana a la normal que cualquier distribución que probablemente veas en el mundo real, pero la prueba rechaza la normalidad con un alto grado de confianza.

¿La prueba significativa contra la normalidad significa que no deberíamos usar estadísticas teóricas normales en este caso? (Otra sugerencia: la respuesta es no :))

También recomendaría mucho SnowsPenultimateNormalityTest en el paquete TeachingDemos . La documentación de la función es mucho más útil para usted que la prueba en sí misma. Léalo a fondo antes de usar la prueba.

SnowsPenultimateNormalityTest ciertamente tiene sus virtudes, pero es posible que también desee ver qqnorm .

 X <- rlnorm(100) qqnorm(X) qqnorm(rnorm(100)) 

Considere usar la función shapiro.test , que realiza la prueba de Shapiro-Wilks para la normalidad. He sido feliz con eso.

biblioteca (DnE)

x <-rnorm (1000,0,1)

is.norm (x, 10,0.05)

La prueba de Anderson-Darling también es útil.

 library(nortest) ad.test(data) 

cuando realizas una prueba, siempre tienes la probabilidad de rechazar la hipótesis nula cuando es verdadera.

Ver el siguiente código R:

 p=function(n){ x=rnorm(n,0,1) s=shapiro.test(x) s$p.value } rep1=replicate(1000,p(5)) rep2=replicate(1000,p(100)) plot(density(rep1)) lines(density(rep2),col="blue") abline(v=0.05,lty=3) 

El gráfico muestra que si tiene un tamaño de muestra pequeño o grande un 5% de las veces tiene la oportunidad de rechazar la hipótesis nula cuando es verdadera (un error de tipo I)

Además de qqplots y la prueba de Shapiro-Wilk, los siguientes métodos pueden ser útiles.

Cualitativo:

  • histogtwig comparado con el normal
  • cdf en comparación con la normal
  • diagtwig de ggdensity
  • ggqqplot

Cuantitativo:

  • pruebas de normalidad del paquete nortest
  • Pruebas de normalidad del paquete normtest

Los métodos cualitativos se pueden producir utilizando lo siguiente en R:

 library("ggpubr") library("car") h <- hist(data, breaks = 10, density = 10, col = "darkgray") xfit <- seq(min(data), max(data), length = 40) yfit <- dnorm(xfit, mean = mean(data), sd = sd(data)) yfit <- yfit * diff(h$mids[1:2]) * length(data) lines(xfit, yfit, col = "black", lwd = 2) plot(ecdf(data), main="CDF") lines(ecdf(rnorm(10000)),col="red") ggdensity(data) ggqqplot(data) 

Una palabra de advertencia: no aplique ciegamente las pruebas. Tener una comprensión sólida de las estadísticas lo ayudará a comprender cuándo usar qué pruebas y la importancia de las suposiciones en las pruebas de hipótesis.

    Intereting Posts