Website-Icon Björn Walther

Normalverteilung in R prüfen

Warum Prüfung auf Normalverteilung?

Häufig hört man, dass für gewisse Verfahren die Daten normalverteilt sein müssen. Hier kann ich bereits mit dem ersten Mythos aufräumen. Eine pauschale Normalverteilung von Daten bzw. Variablen ist in keinem Verfahren notwendig. Es gibt jedoch Verfahren, die normalverteilte Residuen benötigen, so wie die lineare Regression. Die Variablen (egal ob abhängig oder unabhängig) an sich müssen nicht normalverteilt sein.

Wieso dann dennoch dieser Artikel, wenn es nicht notwendig ist? Weil man im Rahmen der deskriptiven Statistik evtl. hierauf eingehen möchte bzw. der Gutachter dies wünscht. Es gibt zwei Möglichkeiten der Prüfung, analytisch und grafisch, die ich in diesem Artikel vorstelle. Ich neige ganz klar zur grafischen Methode, was ich an den geeigneten Stellen auch betonen werde.

 

Das Beispiel und Vorbemerkungen

Ich habe einen Datensatz mit 51 Beobachtungen in R eingelesen und möchte die Variable „Größe“ auf Normalverteilung testen. Der Dataframe heißt „data_xls“. Da ich die Variablen nicht mit dem attach()-Befehl aus dem Dataframe herauslöse, adressiere ich sie stets mit „data_xls$“, schreibe also „data_xls$Größe“ im Verlauf des Artikels.

 

Analytische Prüfung

Kolmogorov-Smirnov-Test

Den KS-Test führe ich hier nur der Vollständigkeit wegen auf – er ist eigentlich nicht mehr zeitgemäß. Ihm fehlt (besonders) bei kleinen Stichproben die Teststärke (Aldor-Noiman et al. (2013)). Außerdem wird er, wie jeder analytische Tests bei zunehmender Stichprobengröße, fast automatisch signifikant (Field (2018)), obwohl eine Normalverteilung vorliegt. Kleine Abweichungen bei großen Stichproben stellen demnach ein Problem dar.
Dennoch, der Funktionsaufruf ist mit ks.test() relativ einfach. Die Testvariable wird eingesetzt (data_xls$Größe). Lediglich das zusätzliche Argument „pnorm“ muss noch angefügt werden, damit tatsächlich auf Normalverteilung geprüft wird:


ks.test(data_xls$Größe, "pnorm")

Das führt zu folgendem Output:


One-sample Kolmogorov-Smirnov test

data:  data_xls$Größe
D = 0.93056, p-value 
alternative hypothesis: two-sided

Warning message:
In ks.test(data_xls$Größe, "pnorm") :
  für den Komogorov-Smirnov-Test sollten keine Bindungen vorhanden sein

Hier geht schon der Ärger los, dass keine Bindungen vorhanden sein sollten. Bindungen sind mehrfach vorkommende Ausprägungen, konkret im Beispiel sind mehrere Menschen gleich groß – das ist nicht wirklich ungewöhnlich. Dieser Umstand ist wohl auch der Grund für die extrem kleine Signifikanz von 2,2e-16. Die Signifikanz führt zum Verwerfen der Nullhypothese. Diese geht von Normalverteilung aus. Demzufolge würden wir mit diesem Testergebnis eine Normalverteilung ablehnen. Wir werden gleich sehen, dass dies bei den vorliegenden Daten problematisch ist.

 

Shapiro-Wilk-Test

Mit recht großer Power, auch bei kleinen Stichproben, kann der Shapiro-Wilk-Test (SW-Test) aufwarten. Allerdings leidet auch er unter dem „Phänomen“ des automatisch sinkenden p-Wertes bei steigender Stichprobengröße (gleiche Quellen) mit nur trivialen Abweichungen von der Normalverteilung. Dennoch, findet man ihn recht häufig. Der Befehl in R lautet shapiro.test()


shapiro.test(data_xls$Größe)

Das führt zu folgendem Output:


Shapiro-Wilk normality test

data:  data_xls$Größe
W = 0.97757, p-value = 0.4415

Der Output ist auch hier übersichtlich und nur der p-Wer von Interesse. p = 0,4415 liegt über den typischen Verwerfungsniveaus (hier: Alpha = 0,05). Demzufolge wird die Nullhypothese beibehalten. Es liegt Normalverteilung vor. Dies widerspricht dem Ergebnis des KS-Tests von oben und zeigt das Problem der vorliegenden Bindungen in der Stichprobe.

 

Grafische Prüfung

Q-Q-Plot / Q-Q-Diagramm

Das sog. Quantil-Quantil-Diagramm vergleicht die tatsächliche Verteilung mit der idealtypischen Normalverteilung – mit Hilfe der Quantile. Letzteres ist aber ehrlich gesagt unwichtig, da eigentlich nur ein Streudiagramm mit einer Gerade erzeugt und interpretiert werden muss, wie wir gleich sehen werden.
Für das Q-Q-Diagramm empfiehlt sich eine z-Standardisierung der betreffenden Variable mit dem scale()-Befehl. Ich erstelle im Dataframe data_xls eine neue Variable „zGröße“:


data_xls$zGröße 

Anschließend reicht mir der Befehl qqnorm() für die Punkte der tatsächlichen Verteilung und qqline() für die "Normalverteilungsgerade":


qqnorm(data_xls$zGröße)
qqline(data_xls$zGröße)

Im Ergebnis erhalte ich ein Diagramm der folgenden Art:

Hier ist es wichtig, dass die Beobachtungen (=Punkte) möglichst auf oder nahe der idealen Normalverteilung (= Gerade) liegen. Je weiter weg Punkte sind, desto eher sind sie "Ausreißer" bzw. von dem Punkt einer idealen Normalverteilung weg. Hier gibt es keine exakte Vorgehensweise, was normalverteilt ist und was nicht. Wenn die Mehrzahl der Punkte auf oder nahe der Gerade liegen, ist dies meist ausreichend, um von einer hinreichenden Normalverteilung auszugehen. Exakt einer Normalverteilung wird sowieso fast nie eine Verteilung entsprechen, weswegen der Anwender hier auch mitunter etwas pragmatischer sein kann. Es geht meist um in etwa und nicht exakt normalverteilte Daten.

 

Histogramm

Meine bevorzugte Art und Weise der Normalverteilungsprüfung ist das Histogramm. Hier werden die Ausprägungen gezählt und in Klassen in einem Säulendiagramm abgetragen. Im Zentrum der Verteilung sollten die Säulen höher sein und nach außen hin sollten sie symmetrisch weniger werden. Das sieht dann im Endeffekt wie eine stilisierte Glockenkurve aus und ist das, was wir am ehesten mit einer Normalverteilung verbinden. Der Code hierzu ist mit dem hist()-Befehl denkbar simpel:


hist(data_xls$zGröße)

Ich habe hier aus Konsistenzgründen erneut die z-standardisierte Variable verwendet. Man kann es auch mit der unstandardisierten Variable darstellen, im Ergebnis ist der Aussagegehalt der gleiche, die Säulenhöhen sind aufgrund der anderen Klassenbreiten aber nicht die gleichen:

Wie bereits erwähnt sollten die Säulen einer Glocke ähnlich sehen - in der Mitte hoch, nach außen hin jeweils niedriger werdende Säulen. Zwischen der 2 und 3 auf der x-Achse hat man langsam ausschleichende Häufigkeiten. Ein sog. long-tail. Auch hier würde man schließen, dass die Verteilung in etwa normalverteilt ist.

 

Literatur

Sivan Aldor-Noiman, Lawrence D. Brown, Andreas Buja, Wolfgang Rolke & Robert A. Stine (2013) The Power to See: A New Graphical Test of Normality, The American Statistician, 67:4, 249-260, DOI: 10.1080/00031305.2013.847865

Field, A. P. (2018). Discovering statistics using IBM SPSS statistics. London: SAGE Publications, S. 248f.

 

Die mobile Version verlassen