2013-03-15 5 views
23

Ich möchte einen Shapiro-Wilk-Normalitätstest durchführen. Meine Daten sind csv Format. Es sieht wie folgt aus:Einen Shapiro-Wilk-Normalitätstest durchführen

> heisenberg 
    HWWIchg 
1 -15.60 
2 -21.60 
3 -19.50 
4 -19.10 
5 -20.90 
6 -20.70 
7 -19.30 
8 -18.30 
9 -15.10 

Allerdings, wenn ich den Test durchzuführen, erhalte ich:

> shapiro.test(heisenberg) 
Error in `[.data.frame`(x, complete.cases(x)) : 
    undefined columns selected 

Warum isnt`t die rechte Spalte R ausgewählt haben und wie das zu tun? Danke für deine Antwort !!!

Antwort

104

Was macht shapiro.test?

shapiro.test testet die Nullhypothese, dass „die Proben stammen aus einer Normalverteilung“ gegen die Alternativhypothese „die Proben kommen nicht von einer Normalverteilung“.

Wie shapiro.test in R durchführen?

Die R Hilfeseite für ?shapiro.test gibt,

x - a numeric vector of data values. Missing values are allowed, 
    but the number of non-missing values must be between 3 and 5000. 

Das heißt, erwartet shapiro.test einen numerischen Vektor als Eingabe, die auf die Probe entspricht würden Sie testen möchten und es ist die einzige Eingabe erforderlich .

> shapiro.test(heisenberg$HWWIchg) 
# Shapiro-Wilk normality test 

# data: heisenberg$HWWIchg 
# W = 0.9001, p-value = 0.2528 

Interpretation ergibt sich aus shapiro.test:

Erstens: Da Sie eine data.frame haben, werden Sie die gewünschte Spalte als Eingabe für die Funktion wie folgt passieren müssen I stark empfehlen Sie read this excellent answer von Ian Fellows auf testing for normality.

Wie oben gezeigt, testet die shapiro.test die NULL-Hypothese, dass die Proben aus einer Normalverteilung stammen. Das heißt, wenn Sie p-Wert < = 0,05, dann würden Sie die NULL-Hypothese ablehnen, dass die Proben aus einer Normalverteilung stammen. Als Ian Fellows es schön gesagt, testen Sie gegen die Annahme von Normalität“. Mit anderen Worten (korrigiert mich wenn ich falsch liege), wäre es viel besser sein wenn man die Nullhypothese prüft, dass die Proben nicht aus einer Normalverteilung kommen. Warum? Weil eine Nullhypothese verwerfen ist nicht die gleichen wie die alternative Hypothese zu akzeptieren.

Bei der Nullhypothese von shapiro.test, ein p-Wert < = 0,05 würde lehne die Nullhypothese ab, dass die Proben aus der Normalverteilung stammen, um es locker zu formulieren, gibt es eine seltene Chance, dass die Proben aus einer normalen Verteilung kamen. Der Nebeneffekt dieser Hypothesentests ist, dass diese seltene Chance passiert sehr selten.Zur Veranschaulichung nehmen zum Beispiel:

set.seed(450) 
x <- runif(50, min=2, max=4) 
shapiro.test(x) 
# Shapiro-Wilk normality test 
# data: runif(50, min = 2, max = 4) 
# W = 0.9601, p-value = 0.08995 

Also, das (insbesondere) Probe runif(50, min=2, max=4) kommt aus einer Normalverteilung nach diesem Test. Ich möchte damit sagen, dass es viele Fälle gibt, in denen die "extremen" Anforderungen (< 0,05) nicht erfüllt sind, was in den meisten Fällen zur Annahme der "NULL-Hypothese" führt, was irreführend sein könnte.

Ein weiteres Problem Ich mag würde hier von @PaulHiemstra unter Kommentaren über die Auswirkungen auf große Stichprobengröße zitieren:

Ein weiteres Problem mit dem Test-Shapiro-Wilks ist, dass, wenn Sie füttern es mehr Daten Die Wahrscheinlichkeit, dass die Nullhypothese abgelehnt wird, wird größer. Was passiert, ist, dass bei großen Datenmengen sogar sehr kleine Abweichungen von der Normalität festgestellt werden können, was zur Ablehnung des Nullhypothesenereignisses führt, obwohl die Daten für praktische Zwecke mehr als normal genug sind.

Obwohl er betont auch, dass die Datengrößenbeschränkung des R schützt dies ein wenig:

Zum Glück shapiro.test den Benutzer von dem oben beschriebenen Effekt schützt durch die Datengröße bis 5000. Begrenzung

Wenn die Nullhypothese war das Gegenteil, das heißt, die Proben nicht aus einer Normalverteilung kommen, und Sie erhalten einen p-Wert < 0,05, t Wenn Sie folgern, dass es sehr selten ist, dass diese Proben nicht kommen aus einer normalen Verteilung (die NULL-Hypothese ablehnen). Das bedeutet in loser Weise: Es ist sehr wahrscheinlich, dass die Stichproben normal verteilt sind (obwohl einige Statistiker diese Art des Dolmetschens vielleicht nicht mögen). Ich glaube, das hat Ian Fellows auch in seinem Beitrag versucht zu erklären. Bitte korrigieren Sie mich, wenn ich etwas falsch gemacht habe!

@PaulHiemstra kommentiert auch über praktische Situationen (zB Regression), wenn man über dieses Problem der Prüfung auf Normalität kommt:

In der Praxis, wenn eine Analyse Normalität geht davon aus, z.B. Ich würde diesen Shapiro-Wilk-Test nicht machen, aber die Analyse durchführen und die Diagnosediagramme des Ergebnisses der Analyse betrachten, um zu beurteilen, ob irgendwelche Annahmen der Analyse zu sehr verletzt wurden. Für die lineare Regression mit lm wird dies durch Betrachten einiger der Diagnose-Plots gemacht, die Sie mit plot (lm()) erhalten. Statistiken sind keine Serie von Schritten, die ein paar Zahlen aushusten (hey p < 0.05!), Sondern erfordert viel Erfahrung und Geschick bei der Beurteilung, wie man seine Daten richtig analysiert.

Hier finde ich die Antwort von Ian Fellows an Ben Bolker Kommentar unter der gleichen Frage bereits oben gleichermaßen verbunden ist (wenn nicht mehr) informativ:

Für lineare Regression,

  1. Mach dir keine Sorgen über Normalität. Die CLT übernimmt schnell und wenn Sie alle bis auf die kleinsten Stichprobengrößen und ein sogar aus der Ferne vernünftig aussehendes Histogramm haben, geht es Ihnen gut.

  2. Sorgen Sie sich über ungleiche Varianzen (Heteroskedastizität). Ich mache mir darüber Sorgen, dass HCCM-Tests standardmäßig (fast) verwendet werden. Ein Maßstabs-Ortsdiagramm wird eine Vorstellung davon geben, ob dies nicht immer, aber nicht immer möglich ist. Es gibt auch keinen Grund, in den meisten Fällen gleiche Varianzen anzunehmen.

  3. Ausreißer. Ein Kochabstand von> 1 ist ein Grund zur Besorgnis.

Das sind meine Gedanken (FWIW).

Hoffe, dass dies die Dinge ein wenig aufklärt.

+1

Daher wird dieser Datensatz nicht normaliy verteilt, ich glaube ... – maximus

+1

+1 .. gute Erklärung –

+2

Ein weiteres Problem mit dem Shapiro-Wilks-Test ist, dass, wenn Sie füttern es mehr Daten Die Wahrscheinlichkeit, dass die Nullhypothese abgelehnt wird, wird größer. Was passiert, ist, dass bei großen Datenmengen sogar sehr kleine Abweichungen von der Normalität erkannt werden können, was zur Ablehnung der Nullhypothese führt, obwohl die Daten für praktische Zwecke mehr als normal genug sind. –

5

Sie wenden shapiro.test() auf einen Datenrahmen anstelle der Spalte an. Versuchen Sie Folgendes:

shapiro.test(heisenberg$HWWIchg) 
0

Sie es versäumt, die genauen Spalten (Daten) angeben, für Normalität zu testen. verwenden stattdessen

shapiro.test(heisenberg$HWWIchg) 
Verwandte Themen