Wie teste ich richtig auf Normalverteilung?

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
rosarot

Wie teste ich richtig auf Normalverteilung?

Beitrag von rosarot »

Hallo!

Mein Datensatz: data
Treatment x
C 836
C 999
C 1030
C 745
C 839
O 686
O 665
O 740
O 502
O 523
F 1042
F 1335
F 1588
F 1262
F 869
F2 787
F2 656
F2 717
F2 629
F2 714
T 1005
T 654
T 763
T 738
T 925
T2 470
T2 582
T2 445
T2 528
T2 607

Ich will meine Daten auf Normalverteilung testen, und zwar
1. Alle auf einmal, um rauszufinden, welchen Test ich danach brauche, um alle 5 Treatments gleichzeitig miteinander zu vergleichen
2. Jeweils nur Zeile 1-10 (C & O), 11-20 (F & F2), 21-30 (T & T2) einzeln, um rauszufinden, welchen Test ich für einen paarweisen Vergleich brauche, wenn ich NUR C mit O ODER NUR F mit F2 vergleichen will.

Habe es mit einem Shapiro Test versucht:
shapiro.test(data$x) #nicht normalverteilt für 1.
shapiro.test(data[1:10, 1]) #normalverteilt für 2.a
shapiro.test(data[11:20, 1]) #normalverteilt für 2.b
shapiro.test(data[21:30, 1]) #normalverteilt für 2.c

Das kam mir komisch vor, also wollte ich noch einen Kolmogorov-Smirnov machen, aber ich habe nicht rausgefunden, wie man es richtig in R eingibt.
Habe verschiedene Varianten probiert, die unterschiedliche Ergebnisse liefern:
für 1.:
ks.test(data$x, "rnorm") #nichtnormal
ks.test(data$x, "pnorm", mean=mean(data$x), sd=sd(data$x)) #normal

für 2. war ich komplett ratlos.

Kann mir jemand helfen, wie mein R-Skript aussehen muss?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Wie teste ich richtig auf Normalverteilung?

Beitrag von EDi »

welchen Test ich danach brauche, um alle 5 Treatments gleichzeitig miteinander zu vergleichen
Jeweils nur Zeile 1-10 (C & O), 11-20 (F & F2), 21-30 (T & T2) einzeln, um rauszufinden, welchen Test ich für einen paarweisen Vergleich brauche, wenn ich NUR C mit O ODER NUR F mit F2 vergleichen will.
Der Test auf Normalverteilung aller Daten sagt dir nicht viel, vorallem wen du ja Treatmentunterschiede erwartest.
Der Test der Gruppen ist auch nicht sinvoll (zig tests, jeder einzelne hat eine Fehlerwahrscheinlichkeit, da kommt was zusammen) und die Power bei n=5 dürfte auch dürftig sein.


Ich würde es gar nicht testen...
Schau dir die Residuen von deinem Model an und entscheide anhand derer, ob die Modellannahmen passen und bei Bedarf anpassen (z. b. bei varianzinhomogenität).

http://onlinelibrary.wiley.com/doi/10.1 ... x/abstract

ist ein must-read.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Wie teste ich richtig auf Normalverteilung?

Beitrag von bigben »

EDi hat Recht. Vielleicht hilft folgendes Beispiel bei der Überzeugungsarbeit:
> set.seed(123)
> shapiro.test(runif(10))$p.value
[1] 0.51445
> shapiro.test(runif(10))$p.value
[1] 0.3660925
> shapiro.test(runif(10))$p.value
[1] 0.5977586
> shapiro.test(runif(10))$p.value
[1] 0.4565689
Obwohl die Werte einer Gleichverteilung entnommen sind, kann der Shapiro-Test bei n = 10 keine Abweichung von der Normalität nachweisen. Tatsächlich wird hier in nur 8% der Fälle ein p-Wert unter 5% erreicht:

Code: Alles auswählen

n <- 10000   # hier größere Zahl einfügen für genaueres Ergebnis bei dann aber längerer Rechenzeit
positiv <- 0
for (i in 1:n) if(shapiro.test(runif(10))$p.value < 0.05) positiv <- positiv + 1
print(positiv/n)
Zehn Werte auf Normalverteilung zu testen macht nur Sinn, wenn man damit seine Lehrer beruhigt.

bezüglich ks.test, solltest Du mal help(ks.test) in R eingeben und ganz unten bei der Überschrift "Examples" gucken. Dann siehst Du, dass die Verteilungsfunktion mit dem "p" die richtige ist.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten