У мене є набір даних із такою структурою:
a word | number of occurrence of a word in a document | a document id
Як я можу виконати тест на нормальний розподіл у R? Можливо, це легке запитання, але я R новачок.
У мене є набір даних із такою структурою:
a word | number of occurrence of a word in a document | a document id
Як я можу виконати тест на нормальний розподіл у R? Можливо, це легке запитання, але я R новачок.
Відповіді:
Якщо я правильно розумію ваше запитання, то для перевірки того, чи трапляється слово в наборі документів, слід звичайне розповсюдження, ви можете просто використати тест shapiro-Wilk та деякі qqplots. Наприклад,
## 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)
Команди qqplot дають:
Ви можете бачити, що другий набір даних явно не є нормальним за важких хвостів ( Детальніше ).
У тесті на нормальність Shapiro-Walk значення р є великим для першого набору даних (> .9), але дуже малим для другого набору даних (<.01). Це призведе до відмови від нульової гіпотези на секунду.
qqline
повинен мати 1 нахил і мю перехоплювати.
Якщо припустити, що ваш набір даних викликається words
та має counts
стовпець, ви можете побудувати гістограму для візуалізації розподілу:
hist(words$counts, 100, col="black")
де 100 - кількість бункерів
Ви також можете зробити звичайний QQ графік, використовуючи
qqnorm(words$counts)
Нарешті, ви також можете використовувати тест Шапіро-Вілка для нормальності
shapiro.test(word$counts)
Хоча, дивіться на цю дискусію: Тестування на нормальність: "По суті марно?"
Жоден тест не покаже вам, що ваші дані мають нормальний розподіл - він зможе показати вам лише тоді, коли дані будуть досить невідповідними нормальному, що ви б відхилили нуль.
Але підрахунки не є нормальними в будь-якому випадку, це натуральні числа - яка ймовірність того, що спостереження з нормального розподілу прийме значення, яке не є цілим числом? (... це подія ймовірності 1).
Чому б ви перевіряли на нормальність у такому випадку? Це, очевидно, неправда.
[У деяких випадках не обов'язково має значення, що ви можете сказати, що ваші дані насправді не є нормальними. Реальні дані ніколи (або майже ніколи) не будуть фактично виведені із звичайного розподілу.]
Якщо вам справді потрібно зробити тест, тест Шапіро-Вілка ( ?shapiro.test
) - хороший загальний тест на нормальність, який широко використовується.
Більш формальний спосіб поглянути на нормальність - це перевірити, чи суттєво відрізняються від нуля куртози та косості.
Для цього нам потрібно отримати:
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
}
для куртозу та:
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
}
для Skewness.
Обидва ці тести є однобічними, тому вам потрібно буде помножити p-значення на 2, щоб стати двохвостим. Якщо ваше р-значення стане більшим, ніж одне, вам потрібно буде використовувати 1-kurtosis.test () замість kurtosis.test.
Якщо у вас є інші питання, ви можете надіслати мені електронну пошту на j.bredman@gmail.com
kurtosis()
та skewness()
функцій від пакету моментів ? Результати з використанням rnorm()
зразків різні.
Використовуючи nortest
пакет R, можна перевірити ці випробування:
Виконайте тест на нормальність Андерсона-Дарлінга
ad.test(data1)
Виконайте тест Крамера-фон Мізеса на нормальність
cvm.test(data1)
Виконайте тест на квадрат Пірсона на нормальність
pearson.test(data1)
Виконайте тест Шапіро-Франція на нормальність
sf.test(data1)
Багато інших тестів можна зробити за допомогою normtest
пакета. Дивіться опис на
https://cran.r-project.org/web/packages/normtest/normtest.pdf
zipfR
пакет.