Тест Шапиро – Уилка в программировании на R
Тест Шапиро-Уилка или тест Шапиро - это тест на нормальность в частотной статистике. Нулевая гипотеза теста Шапиро состоит в том, что популяция распределена нормально. Это один из трех тестов на нормальность, предназначенных для обнаружения всех видов отклонений от нормы. Если значение p равно или меньше 0,05, то гипотеза о нормальности будет отклонена тестом Шапиро. В случае неудачи тест может констатировать, что данные не будут соответствовать нормальному распределению с достоверностью 95%. Однако при прохождении теста можно констатировать, что существенного отклонения от нормы не существует. Этот тест можно очень легко выполнить в программировании на R.
Формула теста Шапиро-Уилка
Предположим, что образец, скажем x 1 , x 2 …… .x n , был получен из нормально распределенной совокупности. Тогда согласно тестам Шапиро-Уилка проверка нулевой гипотезы
where,
- x(i) : it is the ith smallest number in the given sample.
- mean(x) : ( x1+x2+……+xn) / n i.e the sample mean.
- ai : coefficient that can be calculated as (a1,a2,….,an) = (mT V-1)/C . Here V is the covariance matrix, m and C are the vector norms that can be calculated as C= || V-1 m || and m = (m1, m2,……, mn ).
Реализация в R
Для выполнения теста Шапиро Уилка R предоставляет функцию shapiro.test () .
Syntax:
shapiro.test(x)
Parameter:
x : a numeric vector containing the data values. It allows missing values but the number of missing values should be of the range 3 to 5000.
Давайте посмотрим, как выполнить тест Шапиро Уилка шаг за шагом.
- Шаг 1: Сначала установите необходимые пакеты . Для выполнения теста необходимы два пакета: dplyr . Пакет dplyr необходим для эффективного управления данными. Установить пакеты из консоли R можно следующим образом:
install.packages ("dplyr")
- Шаг 2: Теперь загрузите установленные пакеты в сценарий R. Это можно сделать с помощью функции library () следующим образом.
р
# loading the package library (dplyr) |
- Шаг 3: Самая важная задача - выбрать правильный набор данных . Здесь давайте поработаем с набором данных ToothGrowth. Это встроенный набор данных в библиотеке R.
р
# loading the package library ( "dplyr" ) # Using the ToothGrowth data set # loading the data set my_data <- ToothGrowth |
Также можно создать собственный набор данных. Для этого сначала подготовьте данные, затем сохраните файл и затем импортируйте набор данных в сценарий. Файл может включать в себя, используя следующий синтаксис:
data <- read.delim (file.choose ()), если формат файла .txt data <- read.csv (file.choose ()), если формат файла .csv
- Шаг 4: Теперь выберите случайное число с помощью функции set.seed () . После чего мы начинаем отображать выходной образец из 10 строк, выбранных случайным образом с помощью функции sample_n () пакета dplyr. Вот как мы проверяем наши данные.
р
# loading the package library ( "dplyr" ) # Using the ToothGrowth package # loading the data set my_data <- ToothGrowth # Using the set.seed() for # random number generation set.seed (1234) # Using the sample_n() for # random sample of 10 rows dplyr:: sample_n (my_data, 10) |
Выход:
лен суп доза 1 11,2 VC 0,5 2 8,2 ОДж 0,5 3 10,0 ОДж 0,5 4 27,3 OJ 2,0 5 14,5 ОДж 1,0 6 26,4 OJ 2,0 7 4,2 VC 0,5 8 15,2 ВК 1.0 9 14,5 ОДж 0,5 10 26,7 ВК 2,0
- Шаг 5: Наконец выполните тест Шапиро Уилка с помощью функции shapiro.test () .
р
# loading the package library ( "dplyr" ) # Using the ToothGrowth package # loading the data set my_data <- ToothGrowth # Using the set.seed() # for random number generation set.seed (1234) # Using the sample_n() # for random sample of 10 rows dplyr:: sample_n (my_data, 10) # Using the shapiro.test() to check # for normality based # on the len parameter shapiro.test (my_data$len) |
Выход:
> dplyr :: sample_n (мои_данные, 10) лен суп доза 1 11,2 VC 0,5 2 8,2 ОДж 0,5 3 10,0 ОДж 0,5 4 27,3 OJ 2,0 5 14,5 ОДж 1,0 6 26,4 OJ 2,0 7 4,2 VC 0,5 8 15,2 ВК 1.0 9 14,5 ОДж 0,5 10 26,7 ВК 2,0 > shapiro.test (my_data $ len) Тест Шапиро-Уилка на нормальность данные: my_data $ len W = 0,96743, значение p = 0,1091
Исходя из полученного результата, можно предположить нормальность. Значение p больше 0,05. Следовательно, распределение данных данных существенно не отличается от нормального распределения.