Wykonaj test normalności Shapiro-Wilk

Chcę wykonać test normalności Shapiro-Wilka. Moje dane są w formacie csv. Wygląda to tak:

> 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

Jednak, kiedy wykonuję test, dostaję:

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

Dlaczego R nie wybiera prawej kolumny i jak to zrobić? Thx za odpowiedz!!!

Author: Arun, 2013-03-15

3 answers

Co robi shapiro.test zrobić?

shapiro.test testuje hipotezę zerową że "próbki pochodzą z rozkładu normalnego" przeciwko hipoteza alternatywna "próbki nie pochodzą z rozkładu normalnego".

Jak wykonać shapiro.test w R?

Strona pomocy R dla ?shapiro.test daje,

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

To znaczy shapiro.test oczekuje wektora liczbowego jako wejścia, który odpowiada próbce, którą chcesz Lubię testować i jest to jedyne wymagane wejście. Ponieważ masz dane.ramka , będziesz musiał przekazać żądaną kolumnę jako wejście do funkcji w następujący sposób:

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

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

Interpretacja wyników z shapiro.test:

Po pierwsze, ja mocno sugeruję przeczytaj tę doskonałą odpowiedź od Ian Fellows na testing for normality.

Jak pokazano powyżej, shapiro.test testuje hipotezę zerową, że próbki pochodzą z rozkładu normalnego. Oznacza to, że jeśli wartość p , wtedy odrzucić hipotezę zerową, że próbki pochodzą z rozkładu normalnego. Jak to ładnie ujął Ian Fellows, testujesz przeciwko założeniu normalności". Innymi słowy (popraw mnie, jeśli się mylę), byłoby znacznie lepiej jeśli przetestuje się hipotezę zerową, że próbki nie pochodzą z rozkładu normalnego. Dlaczego? Ponieważ odrzucenie hipotezy zerowej jest nie tak samo jak przyjęcie hipotezy alternatywnej.

W przypadku hipotezy zerowej shapiro.test, wartość p rzadka szansa że próbki pochodzą z rozkładu normalnego. Efektem ubocznym badania tej hipotezy jest to, że ta rzadka szansa zdarza się bardzo rzadko. Aby zilustrować, Weźmy na przykład:

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

Więc to (szczególnie) próbka runif(50, min=2, max=4) pochodzi z rozkładu normalnego zgodnie z tym testem. Próbuję powiedzieć, że istnieje wiele przypadków, w których" ekstremalne "wymagania (p

Kolejna kwestia, którą chciałbym zacytować tutaj z @PaulHiemstra z pod komentarzy na temat wpływu na duży rozmiar próbki:

[[10]}dodatkowym problemem testu Shapiro-Wilka jest to, że kiedy karmić go więcej danych, szanse na odrzucenie hipotezy zerowej staje się większa. Tak więc, co się dzieje, jest to, że dla dużych ilości danych nawet bardzo małe odchylenia od normalności mogą być wykryte, co prowadzi do odrzucenia hipotezy zerowej zdarzenia choć do celów praktycznych danych jest więcej niż wystarczająco normalne.

Chociaż zaznacza również, że limit rozmiaru danych R Chroni Ten bit:

Na szczęście shapiro.test chroni użytkownika przed powyższymi opisywany efekt poprzez ograniczenie rozmiaru danych do 5000.

Jeśli hipoteza zerowa była odwrotna, co oznacza, że próbki Nie pochodzą z rozkładu normalnego, a otrzymasz wartość p , to wnioskujesz, że jest bardzo rzadko , że te próbki nie pochodzą z rozkładu normalnego (Odrzuć hipotezę zerową). To luźno przekłada się na: jest wysoce prawdopodobne, że próbki są normalnie rozmieszczone (chociaż niektórzy statystycy może nie podoba się ten sposób tłumaczenia). Wierzę, że to właśnie Ian Fellows próbował wyjaśnić w swoim poście. Proszę popraw mnie, jeśli coś się stało!

@PaulHiemstra komentuje również sytuacje praktyczne (przykład regresji), gdy natkniemy się na ten problem testowania normalności:

W praktyce, gdyby analiza zakładała normalność, np. lm, nie zrobiłbym tego testu Shapiro-Wilka, ale zrobił analizę i przyjrzał się diagnozującym wykresom wyniku analiza, aby ocenić, czy jakiekolwiek założenia analizy, gdzie naruszone zbyt wiele. W przypadku regresji liniowej za pomocą lm można to zrobić, patrząc na niektóre wykresy diagnostyczne, które otrzymujesz za pomocą plot(lm()). Statystyki nie są serią kroków, które dają kilka liczb (Hej p

Tutaj znajduję odpowiedź Iana Fellowsa na komentarz Bena Bolkera pod tym samym pytaniem już podlinkowanym powyżej równie (jeśli nie więcej) informatywny:

Dla regresji liniowej,

  1. Nie martw się o normalność. CLT przejmuje kontrolę szybko i jeśli masz wszystkie, oprócz najmniejszych rozmiarów próbek i nawet zdalnie rozsądnie wyglądającego histogramu, jesteś w porządku.

  2. Martwić się o nierówne wariancji (heteroskedastyczność). Martwię się o to do tego stopnia, że (prawie) domyślnie używam testów HCCM. Podziałka lokalizacji Da jakiś pomysł na czy to jest zepsute, ale nie zawsze. Ponadto nie ma a priori powodu, aby zakładać równe wariancje w większości przypadków.

  3. Odstające. Odległość kucharska > 1 jest uzasadnionym powodem do niepokoju.

To są moje myśli (FWIW).

Mam nadzieję, że to trochę wyjaśni.
 114
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:14

Stosujesz shapiro.test () do ramki danych zamiast kolumny. Wypróbuj następujące:

shapiro.test(heisenberg$HWWIchg)
 7
Author: stackoverflowuser2010,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-15 15:24:29

Nie udało Ci się określić dokładnych kolumn (danych) do sprawdzenia normalności. Użyj tego zamiast

shapiro.test(heisenberg$HWWIchg)
 1
Author: Samuel Terkper Ahuno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-29 08:55:20