Necesito usar normaltest en scipy para probar si el conjunto de datos es distributet normal. Pero parece que no puedo encontrar ningún buen ejemplo de cómo usar scipy.stats.normaltest
.
Mi conjunto de datos tiene más de 100 valores.
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 tupla de 2 del estadístico chi-cuadrado y el valor p asociado. Dada la hipótesis nula de que x
provenía de una distribución normal, el valor p representa la probabilidad de que se vea una estadística de ji cuadrado de grande (o mayor).
Si el valor de p 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)
Primero descubrí que scipy.stats.normaltest es casi lo mismo. La biblioteca mstats se utiliza para matrices enmascaradas. Matrices en las que puede marcar valores como no válidos y no incluidos 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 estadística, se necesita un valor de p inferior a 0.05 para rechazar la hipótesis nula". - http://mathforum.org/library/drmath/view/72065.html