2014-03-04 7 views
6

Ich habe einige Daten, die ich aus einem Radarsatellitenbild gesampelt habe und wollte einige statistische Tests durchführen. Vorher wollte ich einen Normalitätstest durchführen, damit ich sicher sein konnte, dass meine Daten normal verteilt waren. Meine Daten scheinen normal verteilt zu sein, aber wenn ich den Test mache, bekomme ich einen P-Wert von 0, was darauf hindeutet, dass meine Daten nicht normal verteilt sind.Normalitätstest einer Verteilung in Python

Ich habe meinen Code zusammen mit der Ausgabe und einem Histogramm der Verteilung beigefügt (Ich bin relativ neu zu Python so Entschuldigungen, wenn mein Code in irgendeiner Weise klobig ist). Kann mir jemand sagen, ob ich etwas falsch mache - ich kann es aus meinem Histogramm kaum glauben, dass meine Daten nicht normal verteilt sind?

values = 'inputfile.h5' 
f = h5py.File(values,'r') 
dset = f['/DATA/DATA'] 
array = dset[...,0] 
print('normality =', scipy.stats.normaltest(array)) 
max = np.amax(array) 
min = np.amin(array) 

histo = np.histogram(array, bins=100, range=(min, max)) 
freqs = histo[0] 
rangebins = (max - min) 
numberbins = (len(histo[1])-1) 
interval = (rangebins/numberbins) 
newbins = np.arange((min), (max), interval) 
histogram = bar(newbins, freqs, width=0.2, color='gray') 
plt.show() 

Dies druckt dies: (41099.095955202931, 0.0). Das erste Element ist ein Chi-Quadrat-Wert und das zweite Element ist ein p-Wert.

Ich habe eine Grafik der Daten erstellt, die ich angehängt habe. Ich dachte, dass, wenn ich mich mit negativen Werten beschäftige, es ein Problem verursachte, also normalisierte ich die Werte, aber das Problem besteht weiter.

histogram of values in array

+1

[Diese Frage] (http://stats.stackexchange.com/questions/2492/is-normality-testing-essential-useless) erklärt, warum Sie einen so kleinen p-Wert bekommen. Im Grunde lehnen Normalitätstests fast immer die Null bei sehr großen Stichproben ab (in Ihrem Beispiel können Sie auf der linken Seite nur ein kleines bisschen Schräge sehen, was bei Ihrer enormen Stichprobengröße viel mehr als genug ist) –

+0

@unutbu : Das ist nicht wahr: zu demonstrieren, 'normalest (np.random.normal (loc = 100, scale = 10, size = 1000))' gibt immer noch einheitliche p-Werte zurück, obwohl der Mittelwert 100 ist und die Standardabweichung 10. –

+0

@ DavidRobinson: Oh! Danke für die Korrektur. – unutbu

Antwort

2

Im Allgemeinen, wenn die Anzahl der Proben weniger als 50 ist, sollten Sie vorsichtig sein mit Tests der Normalität. Da diese Tests genügend Beweise benötigen, um die Nullhypothese zurückzuweisen, die "die Verteilung der Daten ist normal" ist, und wenn die Anzahl der Stichproben gering ist, sind sie nicht in der Lage, diese Beweise zu finden.

Beachten Sie, dass wenn Sie die Nullhypothese nicht ablehnen, dies nicht bedeutet, dass die alternative Hypothese korrekt ist. Es gibt eine andere Möglichkeit: Einige Implementierungen der statistischen Tests für Normalität vergleichen die Verteilung Ihrer Daten mit der Standardnormalverteilung. Um dies zu vermeiden, empfehle ich Ihnen, die Daten zu standardisieren und dann den Test der Normalität anzuwenden.

7

This question erklärt, warum Sie einen so kleinen p-Wert zu bekommen. Im Grunde lehnen Normalitätstests fast immer die Null bei sehr großen Stichproben ab (bei Ihnen zum Beispiel können Sie auf der linken Seite nur einen gewissen Versatz sehen, was bei Ihrer enormen Stichprobengröße weit mehr ist als genug).

Was viel praktischer in Ihrem Fall wäre, ist eine normale Kurve, die zu Ihren Daten passt. Dann können Sie sehen, wie sich die Normalkurve tatsächlich unterscheidet (zB können Sie sehen, ob der Schwanz auf der linken Seite tatsächlich zu lang ist). Zum Beispiel:

from matplotlib import pyplot as plt 
import matplotlib.mlab as mlab 

n, bins, patches = plt.hist(array, 50, normed=1) 
mu = np.mean(array) 
sigma = np.std(array) 
plt.plot(bins, mlab.normpdf(bins, mu, sigma)) 

(Man beachte das normed=1 Argument: Dies stellt sicher, dass das Histogramm normalisiert wird eine Gesamtfläche von 1 zu haben, die es vergleichbar mit einer Dichte wie die Normalverteilung macht).

Verwandte Themen