Mam zestaw danych o następującej strukturze:
a word | number of occurrence of a word in a document | a document id
Jak mogę wykonać test normalnej dystrybucji w R? Prawdopodobnie jest to łatwe pytanie, ale jestem początkującym R.
Mam zestaw danych o następującej strukturze:
a word | number of occurrence of a word in a document | a document id
Jak mogę wykonać test normalnej dystrybucji w R? Prawdopodobnie jest to łatwe pytanie, ale jestem początkującym R.
Odpowiedzi:
Jeśli dobrze rozumiem twoje pytanie, to aby sprawdzić, czy występowanie słów w zestawie dokumentów ma rozkład normalny, możesz po prostu użyć testu shapiro-Wilka i niektórych qqplotów. Na przykład,
## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)
## Have a look at the densities
plot(density(words1));plot(density(words2))
## Perform the test
shapiro.test(words1); shapiro.test(words2)
## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)
Polecenia qqplot dają:
Widzisz, że drugi zestaw danych wyraźnie nie jest normalny przy ciężkich ogonach ( więcej informacji ).
W teście normalności Shapiro-Walk wartość p jest duża dla pierwszego zestawu danych (> .9), ale bardzo mała dla drugiego zestawu danych (<.01). Doprowadzi cię to do odrzucenia hipotezy zerowej dla drugiej.
qqline
powinny mieć 1 nachylenie i punkt przecięcia mu .
Zakładając, że Twój zestaw danych jest wywoływany words
i ma counts
kolumnę, możesz wykreślić histogram, aby uzyskać wizualizację rozkładu:
hist(words$counts, 100, col="black")
gdzie 100 to liczba pojemników
Możesz również wykonać normalny wykres QQ, używając
qqnorm(words$counts)
Na koniec możesz także użyć testu Shapiro-Wilka dla normalności
shapiro.test(word$counts)
Chociaż spójrz na tę dyskusję: Testowanie normalności: „Zasadniczo bezużyteczne?”
Żaden test nie pokaże, że twoje dane mają rozkład normalny - będzie w stanie pokazać ci tylko, gdy dane będą wystarczająco niespójne z normalnym, że odrzucisz zero.
Ale w każdym razie liczby nie są normalne, są dodatnimi liczbami całkowitymi - jakie jest prawdopodobieństwo, że obserwacja z rozkładu normalnego przyjmie wartość, która nie jest liczbą całkowitą? (... to zdarzenie o prawdopodobieństwie 1).
Dlaczego miałbyś w tym przypadku testować normalność? To oczywiście nieprawda.
[W niektórych przypadkach niekoniecznie musi mieć znaczenie fakt, że można stwierdzić, że dane nie są normalne. Rzeczywiste dane nigdy (lub prawie nigdy) nie zostaną faktycznie wyciągnięte z normalnego rozkładu.]
Jeśli naprawdę musisz wykonać test, test Shapiro-Wilka ( ?shapiro.test
) jest dobrym ogólnym testem normalności, który jest szeroko stosowany.
Bardziej formalnym sposobem patrzenia na normalność jest testowanie, czy kurtoza i skośność różnią się znacznie od zera.
Aby to zrobić, musimy uzyskać:
kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue
}
w przypadku kurtozy i:
skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}
na skośność.
Oba te testy są jednostronne, więc musisz pomnożyć wartość p przez 2, aby stać się dwustronnym. Jeśli twoja wartość p stanie się większa niż jedna, musisz użyć 1-kurtosis.test () zamiast kurtosis.test.
Jeśli masz inne pytania, możesz wysłać do mnie e-mail na adres j.bredman@gmail.com
kurtosis()
i skewness()
z pakietu momentów ? Wyniki przy użyciu rnorm()
próbek są różne.
Korzystając z nortest
pakietu R, testy te można przeprowadzić:
Wykonaj test normalności Andersona-Darlinga
ad.test(data1)
Wykonaj test Craméra-von Misesa na normalność
cvm.test(data1)
Wykonaj test chi-kwadrat Pearsona dla normalności
pearson.test(data1)
Wykonaj test Shapiro-Francia pod kątem normalności
sf.test(data1)
Korzystając z normtest
pakietu, można wykonać wiele innych testów . Zobacz opis na
https://cran.r-project.org/web/packages/normtest/normtest.pdf
zipfR
paczkę.