2012-10-11 21 views

Respuesta

56
In [12]: import scipy.stats as stats 

In [13]: x = stats.norm.rvs(size = 100) 

In [14]: stats.normaltest(x) 
Out[14]: (1.627533590094232, 0.44318552909231262) 

normaltest devuelve una 2-tupla de la estadística de chi-cuadrado, y el valor p asociado. Dada la hipótesis nula de que x proviene de una distribución normal, el valor p representa la probabilidad de que se vea una estadística chi-cuadrado que sea grande (o más grande).

Si el p-val es muy pequeño, significa que es poco probable que los datos provengan de una distribución normal. Por ejemplo:

In [15]: y = stats.uniform.rvs(size = 100) 

In [16]: stats.normaltest(y) 
Out[16]: (31.487039026711866, 1.4543748291516241e-07) 
+0

Gracias por la respuesta rápida. –

+1

¿Cómo cuantificamos "muy pequeño" aquí? – AmanArora

+1

Es una elección arbitraria: http://stats.stackexchange.com/a/55693/842. Solo asegúrese de decidir cuál es su nivel de significación * antes * de aplicar una prueba estadística. – unutbu

10

Primero descubrí que scipy.stats.normaltest es casi lo mismo. La biblioteca mstats se usa para matrices enmascaradas. Arrays donde puede marcar los valores como inválidos y no incluirlos en el cálculo.

import numpy as np 
import numpy.ma as ma 
from scipy.stats import mstats 

x = np.array([1, 2, 3, -1, 5, 7, 3]) #The array needs to be larger than 20, just an example 
mx = ma.masked_array(x, mask=[0, 0, 0, 1, 0, 0, 0]) 
z,pval = mstats.normaltest(mx) 

if(pval < 0.055): 
    print "Not normal distribution" 

"Tradicionalmente, en las estadísticas, es necesario un valor de p menor de 0,05 a rechazar la hipótesis nula." - http://mathforum.org/library/drmath/view/72065.html

+5

¿Por qué '<0.055' en lugar de' <0.05'? – Olli

+1

Si el p-val es muy pequeño, significa que es poco probable que los datos provengan de una distribución normal. 0.05 es el umbral estándar, pero para estar más seguro, puede aumentar la certeza como 0.055 o algo más. Es solo un umbral para decir que sí, es una distribución normal. –