28 votos

¿Es Shapiro-Wilk la mejor prueba de normalidad? ¿Por qué puede ser mejor que otras pruebas como la de Anderson-Darling?

He leído en alguna parte de la literatura que la prueba de Shapiro-Wilk se considera la mejor prueba de normalidad porque para un nivel de significación dado, $\alpha$ La probabilidad de rechazar la hipótesis nula si es falsa es mayor que en el caso de las otras pruebas de normalidad.

¿Podría explicarme, con argumentos matemáticos si es posible, cómo funciona exactamente en comparación con algunas de las otras pruebas de normalidad (por ejemplo, la prueba de Anderson-Darling)?

21voto

AdamSane Puntos 1825

Primero un comentario general: Tenga en cuenta que la prueba de Anderson-Darling es para distribuciones completamente especificadas, mientras que la de Shapiro-Wilk es para normales con cualquier media y varianza. Sin embargo, como se señala en D'Agostino y Stephens $^{[1]}$ el Anderson-Darling se adapta de forma muy conveniente al caso de la estimación, de forma parecida (pero converge más rápido y se modifica de forma más sencilla) al test de Lilliefors para el caso Kolmogorov-Smirnov. En concreto, en la normal, por $n=5$ , tablas del valor asintótico de $A^*=A^2\left(1+\frac{4}{n}-\frac{25}{n^2}\right)$ puede utilizarse (no hay que probar la bondad del ajuste para n<5).

He leído en alguna parte de la literatura que la prueba de Shapiro-Wilk se considera la mejor prueba de normalidad porque para un nivel de significación dado, α, la probabilidad de rechazar la hipótesis nula si es falsa es mayor que en el caso de las otras pruebas de normalidad.

Como afirmación general, esto es falso.

Qué pruebas de normalidad son "mejores" depende de las clases de alternativas que le interesen. Una de las razones por las que la prueba de Shapiro-Wilk es popular es que tiende a tener muy buena potencia bajo una amplia gama de alternativas útiles. Aparece en muchos estudios de potencia, y suele tener un buen rendimiento, pero no es universalmente la mejor.

Es bastante fácil encontrar alternativas bajo las cuales es menos potente.

Por ejemplo, frente a las alternativas de cola ligera suele tener menos potencia que la gama de estudios $u=\frac{\max(x)−\min(x)}{sd(x)}$ (compárelos en una prueba de normalidad sobre datos uniformes, por ejemplo - en $n=30$ una prueba basada en $u$ tiene una potencia de alrededor del 63%, frente a algo más del 38% del Shapiro Wilk).

El Anderson-Darling (ajustado para la estimación de los parámetros) lo hace mejor en la doble exponencial. La asimetría del momento lo hace mejor frente a algunas alternativas de asimetría.

¿Podría explicarme, con argumentos matemáticos si es posible, cómo funciona exactamente en comparación con algunas de las otras pruebas de normalidad (por ejemplo, la prueba de Anderson-Darling)?

Lo explicaré en términos generales (si quieres detalles más específicos los documentos originales y algunos de los documentos posteriores que los discuten serían tu mejor opción):

Considere una prueba más sencilla pero estrechamente relacionada, la de Shapiro-Francia; es efectivamente una función de la correlación entre las estadísticas de orden y las estadísticas de orden esperadas en condiciones de normalidad (y como tal, una medida bastante directa de "cuán recta es la línea" en el gráfico Q-Q normal). Según recuerdo, el Shapiro-Wilk es más potente porque también tiene en cuenta las covarianzas entre las estadísticas de orden, produciendo un mejor estimador lineal de $\sigma$ de la gráfica Q-Q, que luego se escala por $s$ . Cuando la distribución se aleja de la normalidad, la proporción no se acerca a 1.

En comparación, el Anderson-Darling, al igual que el Kolmogorov-Smirnov y el Cramér-von Mises, se basa en la FCD empírica. En concreto, se basa en las desviaciones ponderadas entre la ECDF y la ECDF teórica (la ponderación por la varianza hace que sea más sensible a las desviaciones en la cola).

La prueba de Shapiro y Chen $^{[2]}$ (1995) (basado en los espacios entre las estadísticas de orden) a menudo muestra un poco más de poder que el Shapiro-Wilk (pero no siempre); a menudo tienen un rendimiento muy similar.

--

Utilice el Shapiro Wilk porque suele ser potente, está ampliamente disponible y mucha gente está familiarizada con él (lo que elimina la necesidad de explicar detalladamente en qué consiste si lo utiliza en un artículo), pero no lo utilice con la ilusión de que es "la mejor prueba de normalidad". No hay una sola prueba de normalidad que sea la mejor.

[1]: D'Agostino, R. B. y Stephens, M. A. (1986)
Técnicas de bondad de ajuste ,
Marcel Dekker, Nueva York.

[2]: Chen, L. y Shapiro, S. (1995)
"Una prueba alternativa de normalidad basada en los espacios normalizados".
Revista de Cálculo y Simulación Estadística 53 , 269-287.

14voto

Eero Puntos 1612

Está claro que la comparación que has leído no incluía SnowsPenultimateNormalityTest ( http://cran.r-project.org/web/packages/TeachingDemos/TeachingDemos.pdf ) ya que tiene la mayor potencia posible entre todas las alternativas. Por lo tanto, debería ser considerado el "Mejor" si la potencia es la única consideración (Tenga en cuenta que mis opiniones son claramente sesgadas, pero documentadas en el enlace/documentación).

Sin embargo, estoy de acuerdo con el comentario de Nick Cox de que la mejor prueba es un gráfico más que una prueba formal, ya que la cuestión de "suficientemente normal" es mucho más importante que "exactamente normal". Si se quiere una prueba significativa, yo sugeriría combinar el gráfico qq con la metodología de este documento:

Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne, D.F y 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

Una de sus aplicaciones es el vis.test en el paquete TeachingDemos para R (el mismo paquete que SnowsPenultimateNormalityTest ).

10voto

Eero Puntos 1612

Una respuesta más seria para fomentar esta cuestión y sobre todo el interés continuo de @silverfish. Un enfoque para responder a preguntas como esta es ejecutar algunas simulaciones para comparar. A continuación se muestra un código R que simula los datos bajo varias alternativas y hace varias de las pruebas de normalidad y compara la potencia (y un intervalo de confianza en la potencia ya que la potencia se estima a través de la simulación). He ajustado un poco los tamaños de las muestras porque no era interesante cuando muchas de las potencias eran cercanas al 100% o al 5%, encontré números redondos que daban potencias cercanas al 80%. Cualquiera que esté interesado podría fácilmente tomar este código y modificarlo para diferentes supuestos, diferentes alternativas, etc.

Se puede ver que hay alternativas en las que algunas de las pruebas lo hacen mejor y otras en las que lo hacen peor. La cuestión importante es entonces qué alternativas son más realistas para sus preguntas/áreas científicas. Esto debería ir seguido de una simulación del efecto de los tipos de no normalidad de interés en otras pruebas que se realicen. Algunos de estos tipos de no normalidad afectan en gran medida a otras pruebas basadas en la normalidad, mientras que otros no les afectan demasiado.

> library(nortest)
> 
> simfun1 <- function(fun=function(n) rnorm(n), n=250) {
+   x <- fun(n)
+   c(sw=shapiro.test(x)$p.value, sf=sf.test(x)$p.value, ad=ad.test(x)$p.value,
+     cvm=cvm.test(x)$p.value, lillie=lillie.test(x)$p.value, 
+     pearson=pearson.test(x)$p.value, snow=0)
+ }
> 
> ### Test size using null hypothesis near true
> 
> out1 <- replicate(10000, simfun1())
> apply(out1, 1, function(x) mean(x<=0.05))
     sw      sf      ad     cvm  lillie pearson    snow 
 0.0490  0.0520  0.0521  0.0509  0.0531  0.0538  1.0000 
> apply(out1, 1, function(x) prop.test(sum(x<=0.05),length(x))$conf.int)  #$
             sw         sf         ad        cvm     lillie    pearson      snow
[1,] 0.04489158 0.04776981 0.04786582 0.04671398 0.04882619 0.04949870 0.9995213
[2,] 0.05345887 0.05657820 0.05668211 0.05543493 0.05772093 0.05844785 1.0000000
> 
> ### Test again with mean and sd different
> 
> out2 <- replicate(10000, simfun1(fun=function(n) rnorm(n,100,5)))
> apply(out2, 1, function(x) mean(x<=0.05))
     sw      sf      ad     cvm  lillie pearson    snow 
 0.0482  0.0513  0.0461  0.0477  0.0515  0.0506  1.0000 
> apply(out2, 1, function(x) prop.test(sum(x<=0.05),length(x))$conf.int)  #$
             sw         sf         ad        cvm     lillie    pearson      snow
[1,] 0.04412478 0.04709785 0.04211345 0.04364569 0.04728982 0.04642612 0.9995213
[2,] 0.05262633 0.05585073 0.05043938 0.05210583 0.05605860 0.05512303 1.0000000
> 
> #### now for the power under different forms of non-normality
> 
> ## heavy tails, t(3)
> rt3 <- function(n) rt(n, df=3)
> 
> out3 <- replicate(10000, simfun1(fun=rt3, n=75))
There were 50 or more warnings (use warnings() to see the first 50)
> round(apply(out3, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.788   0.831   0.756   0.726   0.624   0.440   1.000 
> round(apply(out3, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.780 0.824 0.748 0.717  0.614   0.431    1
[2,] 0.796 0.838 0.765 0.734  0.633   0.450    1
> 
> 
> ## light tails, uniform
> u <- function(n) runif(n)
> 
> out4 <- replicate(10000, simfun1(fun=u, n=65))
> round(apply(out4, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.906   0.712   0.745   0.591   0.362   0.270   1.000 
> round(apply(out4, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.900 0.703 0.737 0.581  0.353   0.261    1
[2,] 0.911 0.720 0.754 0.600  0.372   0.279    1
> 
> ## double exponential, Laplace
> de <- function(n) sample(c(-1,1), n, replace=TRUE) * rexp(n)
> 
> out5 <- replicate(10000, simfun1(fun=de, n=100))
> round(apply(out5, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.796   0.844   0.824   0.820   0.706   0.477   1.000 
> round(apply(out5, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.788 0.837 0.817 0.813  0.697   0.467    1
[2,] 0.804 0.851 0.832 0.828  0.715   0.486    1
> 
> ## skewed, gamma(2,2)
> g22 <- function(n) rgamma(n,2,2)
> 
> out6 <- replicate(10000, simfun1(fun=g22, n=50))
Warning message:
In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out6, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.954   0.930   0.893   0.835   0.695   0.656   1.000 
> round(apply(out6, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.950 0.925 0.886 0.827  0.686   0.646    1
[2,] 0.958 0.935 0.899 0.842  0.704   0.665    1
> 
> ## skewed, gamma(2,2)
> g99 <- function(n) rgamma(n,9,9)
> 
> out7 <- replicate(10000, simfun1(fun=g99, n=150))
> round(apply(out7, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.844   0.818   0.724   0.651   0.526   0.286   1.000 
> round(apply(out7, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.836 0.810 0.715 0.642  0.516   0.277    1
[2,] 0.851 0.826 0.732 0.660  0.536   0.294    1
> 
> ## tails normal, middle not
> mid <- function(n) {
+   x <- rnorm(n)
+   x[ x > -0.5 & x < 0.5 ] <- 0
+   x
+ }
> 
> out9 <- replicate(10000, simfun1(fun=mid, n=30))
Warning messages:
1: In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
2: In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out9, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.374   0.371   0.624   0.739   0.884   0.948   1.000 
> round(apply(out9, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.365 0.362 0.614 0.730  0.878   0.943    1
[2,] 0.384 0.381 0.633 0.747  0.890   0.952    1
> 
> ## mixture on variance
> mv <- function(n, p=0.1, sd=3) {
+   rnorm(n,0, ifelse(runif(n)<p, sd, 1))
+ }
> 
> out10 <- replicate(10000, simfun1(fun=mv, n=100))
Warning message:
In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out10, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.800   0.844   0.682   0.609   0.487   0.287   1.000 
> round(apply(out10, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.792 0.837 0.673 0.599  0.477   0.278    1
[2,] 0.808 0.851 0.691 0.619  0.497   0.296    1
> 
> ## mixture on mean
> mm <- function(n, p=0.3, mu=2) {
+   rnorm(n, ifelse(runif(n)<p, mu, 0), 1)
+ }
> 
> out11 <- replicate(10000, simfun1(fun=mm, n=400))
> round(apply(out11, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.776   0.710   0.808   0.788   0.669   0.354   1.000 
> round(apply(out11, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.768 0.701 0.801 0.780  0.659   0.344    1
[2,] 0.784 0.719 0.816 0.796  0.678   0.363    1

10voto

Aksakal Puntos 11351

Llego tarde a la fiesta, pero responderé con referencias a la investigación publicada y revisada por pares. La razón por la que no respondo Sí/No a la pregunta de la OP es que es más complicado de lo que parece. No hay una prueba que sea la más potente para las muestras procedentes de cualquier distribución con o sin valores atípicos. Los valores atípicos pueden disminuir mucho la potencia de una prueba y aumentar la de otra. Algunas pruebas funcionan mejor cuando la muestra procede de una distribución simétrica, etc.

  • Henry C. Thode, Pruebas de normalidad 2002 - Este es el libro más completo sobre el tema. Si tuviera que reducirlo a una respuesta simple, entonces el SW no es más poderoso que el AD en todos los casos. Aquí hay dos extractos para su placer de lectura.

De la sección 7.1.5: Sobre la base de la potencia, la elección de la prueba está directamente relacionada con la información disponible o los supuestos de la alternativa. Cuanto más específica sea la alternativa, más específica y potente será normalmente la prueba; esto también dará lugar a las recomendaciones más fiables.

y

Una prueba conjunta de asimetría y curtosis como $K_s^2$ proporciona una gran potencia contra una amplia gama de alternativas, al igual que el Anderson-Darling $A^2$ . La W de Wilk-Shapiro mostró una potencia relativamente alta entre los alternativos asimétricos y alternativas simétricas de cola corta en comparación con otras pruebas, y una potencia respetable para las alternativas simétricas de cola larga.

  • Romao, Xavier, Raimundo Delgado y Anibal Costa. "Una comparación de la potencia empírica de las pruebas de bondad de ajuste univariante para la normalidad". Journal of Statistical Computation and Simulation 80.5 (2010): 545-591. Este es la investigación más reciente publicada sobre el tema que conozco.

El estudio aborda la realización de 33 pruebas de normalidad, para varios tamaños de muestra, considerando varios niveles de significación y para una serie de distribuciones normales simétricas, asimétricas y modificadas. Generalidades recomendaciones generales para las pruebas de normalidad resultantes del estudio se se definen en función de la naturaleza de la no normalidad

Si realmente quieres reducir su investigación a un sí/no, la respuesta es SÍ. La prueba de Shapiro-Wilks parece ser un poco más potente en la mayoría de los casos que la de Anderson-Darling. Recomiendan la prueba de Shapiro Wilk cuando no se tiene en mente una distribución alternativa concreta. Sin embargo, si te interesa este tema, vale la pena leer el documento. Al menos mira las tablas.

  • Edith Seier, Pruebas de normalidad: Comparación de la potencia , en International Encyclopedia of Statistical Science, 2014 - Un estudio de la investigación publicada sobre el tema. De nuevo, la respuesta depende de la muestra y de su conocimiento sobre la distribución alternativa, pero la respuesta trivializada sería SÍ, Shapiro-Wilk suele ser más potente, pero no siempre.

  • Henry C. Thode, Pruebas de normalidad , en International Encyclopedia of Statistical Science, 2014 - Descripción de las pruebas de normalidad más populares. Su recomendación:

Como se ha indicado anteriormente, el número de pruebas de normalidad es grande, también demasiado grande como para mencionar aquí la mayoría de ellas. En general, las mejores pruebas parecen ser las de momento, Shapiro-Wilk W, Anderson-Darling $A^2$ (véase las pruebas de bondad de ajuste de Anderson-Darling), y la prueba de Jarque-Bera. En Thode (2002) y en el sitio web de la Comisión Europea normalidad y sus características se pueden encontrar en Thode (2002) y en sobre cuestiones generales de bondad de t, incluidas las pruebas de normalidad, en D'Agostino y Stephens (1986).

Ahora, todo esto era sobre pruebas univariadas. El Thode (2002) también tiene pruebas multivariadas, datos censurados, mezclas normales, pruebas en presencia de valores atípicos, y mucho más.

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