Изменения

Перейти к: навигация, поиск
м
Сравнительная таблица реализации критериев в пакетах
На практике мы встречаемся с двумя вариантами задач по проверке принадлежности распределения нормальному закону: для одномерного и многомерного распределения.
 
{{Pkg-req-notice}}
== Одномерное нормальное распределение ==
В качестве Нулевой гипотезой (<math>H_0</math> ) для всех нижеприведённых критериев является предположение, что «случайная величина <math>X</math> распределена нормально».
Для демонстрации работы функций, реализующий реализующих различные критерий критерии проверки принадлежности распределения нормальному закону сгенерируем вектор случайных чисел, имеющих стандартное нормальное распределение:
<syntaxhighlight lang{{r-code|code="rsplus"><nowiki>> x <- rnorm(n = 1001000)</syntaxhighlightnowiki>}}
=== Пакет <code>stats</code> Статистические критерии ===
==== <code>shapiroВ R реализовано множество критериев проверки соответствия распределения нормальному закону.test</code> - критерий Шапиро - Уилка ====
<syntaxhighlight lang="rsplus">> shapiro.test(x)=== Сравнительная таблица реализации критериев в пакетах ====
Shapiro{| class="wide wikitable sortable" style="text-Wilk normality align: center"! Критерии !! {{r-package|stats|core=true}} !! {{r-package|nortest}} !! {{r-package|moments}} !! {{r-package|fBasics}} !! {{r-package|tseries}} !! {{r-package|lawstat}}|-| style="text-align: left" | Критерий Шапиро - Уилка || <code>shapiro.test</code> || - || - || <code>shapiroTest</code> || - || -|-| style="text-align: left" | Критерий Колмогорова - Смирнова || <code>ks.test</code><ref>Для оценки нормальности вызов выглядит следующим образом: <code>ks.test(x, y = "pnorm")</code>.</ref> || - || - || <code>ksnormTest</code> || - || -|-| style="text-align: left" | Критерий Андерсона - Дарлинга || - || <code>ad.test</code> || - || <code>adTest</code> || - || -|-| style="text-align: left" | Критерий Крамера - фон Мизеса || - || <code>cvm.test</code> || - || <code>cvmTest</code> || - || -|-| style="text-align: left" | Критерий Лиллиефорса || - || <code>lillie.test</code> || - || <code>lillieTest</code> || - || -|-| style="text-align: left" | Критерий <math>\chi^2</math> Пирсона || - || <code>pearson.test</code> || - || <code>pchiTest</code> || - || -|-| style="text-align: left" | Критерий Шапиро - Франчия || - || <code>sf.test</code> || - || <code>sfTest</code> || - || -|-| style="text-align: left" | Критерий Д'Агостино || - || - || <code>agostino.test</code> || <code>dagoTest</code> || - || -|-| style="text-align: left" | Критерий Бонетта – Сайера || - || - || <code>bonett.test</code> || - || - || -|-| style="text-align: left" | Критерий Жарка - Бера || - || - || <code>jarque.test</code> || <code>jarqueberaTest</code> || <code>jarque.bera.test</code> || <code>rjb.test</code>|}
data: xW = 0.9831, pПакет {{r-value = 0package|fBasics}} содержит также функцию <code>normalTest()</code>, которая является «обёрктой» для ряда функций из того же пакета.2301Необходимый критерий можно задать с помощью аргумента <code>method</syntaxhighlightcode>. Доступны следующие критерии:
* <code>sw</code> - критерий Шапиро - Уилка
* <code>jb</code> - критерий Жарка-Бера
* <code>ks</code> - критерий Колмогорова - Смирнова
* <code>da</code> - критерий Д'Агостино
* <code>ad</code> - критерий Андерсона - Дарлинга.
==== <code>ks.test</code> - критерий Колмогорова - Смирнова ====Пример вызова данной функции:
{{r-code|code=<syntaxhighlight lang="rsplus"nowiki>> ks.testnormalTest(x, y method = "pnormsw")
OneTitle: Shapiro -sample Kolmogorov-Smirnov testWilk Normality Test
dataTest Results: xD = STATISTIC: W: 0.0534, p-value = 0.9389831alternative hypothesis P VALUE: two-sided</syntaxhighlight> 0.2301
=== Пакет <code>nortestDescription: Fri Feb 14 19:59:59 2014 by user:</codenowiki> ===}}
Перед использованием функций из данного пакетаПакет <code>lawstat</code> содержит также функцию <code>sj.test()</code>, его необходимо предварительно установить и загрузить:которая является реализацией рабастного критерия нормальности, созданного на основа критерия Шапиро - Уилка.
Пакет <syntaxhighlight lang="rsplus"code>TeachingDemos</code> install.packages(pkgs = "nortest")содержит функцию <code> librarySnowsPenultimateNormalityTest(package = "nortest")</syntaxhighlightcode>, реализующую неописанный в литературе критерий. Данная функция возвращает только уровень статистической значимости, свидетельствующий об отклонения распределения от нормального закона.
==== <code>ad.test</code> - критерий Андерсона - Дарлинга Маленькие хитрости ====
<syntaxhighlight lang="rsplus">> ad.test(x)==== Применение функций к нескольким переменным =====
AndersonС помощью <code>apply</code>-Darling normality testфункций можно последовательно применить функцию к вектору, списку или массиву. Прежде чем всего нам необходимо сформировать таблицу данных. С помощью функции <code>replicate()</code> сгенерируем 10 переменных, имеющих стандартное нормальное распределение, которые объединяются в класс <code>data.frame</code>.
data: xA {{r-code|code= 0<nowiki>> DF <- data.4181frame(replicate(n = 10, p-value rnorm(n = 0.323100)))</syntaxhighlightnowiki>}}
==== <code>cvm.test</code> - критерий Крамера - фон Мизеса ====Структура сгенерированной таблицы выглядит следующим образом:
<syntaxhighlight lang{{r-code|code="rsplus"><nowiki> cvm.test> str(xDF)'data.frame': 100 obs. of 10 variables: $ X1 : num 1.051 1.08 -0.477 -1.396 3.423 ... $ X2 : num -0.602 2.29 -0.758 -1.615 -0.364 ... $ X3 : num 0.0559 -1.0117 0.5242 0.4105 -0.3191 ... $ X4 : num -0.0965 0.2006 0.29 0.7702 -0.0182 ... $ X5 : num -0.7074 -1.6111 0.3478 0.2504 0.0609 ... $ X6 : num -1.432 0.535 -0.932 0.581 -1.606 ... $ X7 : num -1.42407 -0.31827 -2.04648 -0.19856 0.00301 ... $ X8 : num 0.511 0.192 0.467 -1.308 2.496 ... $ X9 : num -0.8508 0.4481 -0.2828 -0.5464 0.0605 ... $ X10: num 1.421 0.408 1.254 -0.956 -1.91 ...</nowiki>}}
Cramer-von Mises normality Для решения поставленной задачи можно воспользоваться функцией <code>sapply()</code>. Но прежде, нам необходимо немного отформатировать формат вывода результатов нашей функции: нам нужно извлечь значения критерия и его уровень значимости, т.к. результат функции <code>shapiro.test()</code> содержит также информацию, которая не подлежит включению в итоговую таблицу, например, информация об используемом методе (критерии) и уточнение характера альтернативной гипотезы. Вывод результатов тест Шапиро - Уилка выглядит следующим образом:
data: xW = 0.048, p{{r-value code|code= 0.5359</syntaxhighlightnowiki>> shapiro.test(x)
==== <code>lillie.test</code> - критерий Лиллиефорса ==== <syntaxhighlight lang="rsplus">> lillie.test(x)  Lilliefors (KolmogorovShapiro-Smirnov) Wilk normality test
data: x
D W = 0.05219903, p-value = 0.72586882</syntaxhighlightnowiki>}}
Структура результата применения функции <code>shapiro.test()</code> представлена ниже:
{{r-code|code==== <codenowiki>pearson> str(shapiro.test</code> (x))List of 4 $ statistic: Named num 0.99 ..- критерий <math>\chi^2attr(*, "names")= chr "W" $ p.value : num 0.688 $ method : chr "Shapiro-Wilk normality test" $ data.name: chr "x" - attr(*, "class")= chr "htest"</mathnowiki> Пирсона ====}}
<syntaxhighlight lang="rsplus">> pearsonКак видим, помимо значений критерия и уровня значимости здесь содержится информация о применяемом методе.test(x)Мы можем отфильтровать вывод следующим образом:
Pearson chi{{r-square normality code|code=<nowiki>> normTest <- function (x) {+ res <- shapiro.test(x)+ return(c(res$statistic, p.value = res$p.value))+ }</nowiki>}}
dataРезультат теперь будет выглядеть следующим образом: xP = 17.78, p-value = 0.05879</syntaxhighlight>
{{r-code|code==== <codenowiki>>sfnormTest(x) W p.testvalue 0.9903 0.6882</codenowiki> - критерий Шапиро - Франчия ====}}
<syntaxhighlight lang="rsplus">> sfТеперь можно использовать данную функцию при обработке столбцов нашей таблицы.test(x)
Shapiro{{r-Francia normality testcode|code=<nowiki>> t(sapply(DF, normTest)) W p.valueX1 0.9831 0.2301X2 0.9936 0.9213X3 0.9800 0.1333X4 0.9829 0.2219X5 0.9874 0.4625X6 0.9862 0.3874X7 0.9839 0.2617X8 0.9833 0.2360X9 0.9915 0.7834X10 0.9808 0.1531</nowiki>}}
data: xW = 0.9781Того же результата можно добиться и с помощью функции <code>lapply()</code><ref>По результатам сравнения производительности, p-value = 0данный вариант оказался чуть быстрее предыдущего.08574</syntaxhighlightref>:
{{r-code|code=
<nowiki>> do.call(rbind, lapply(DF, normTest))
W p.value
X1 0.9831 0.2301
X2 0.9936 0.9213
X3 0.9800 0.1333
X4 0.9829 0.2219
X5 0.9874 0.4625
X6 0.9862 0.3874
X7 0.9839 0.2617
X8 0.9833 0.2360
X9 0.9915 0.7834
X10 0.9808 0.1531
</nowiki>
}}
=== Пакет <code>moments</code> == Применение функций к нескольким по группам =====
Перед использованием функций из данного пакета, его необходимо предварительно установить и загрузитьДобавим к нашей таблице группы испытуемых:
<syntaxhighlight lang{{r-code|code="rsplus"><nowiki> install.packages(pkgs = "moments")> libraryDF$GRP <- factor(package sample(LETTERS[1:3], size = "moments"100, replace = TRUE))</syntaxhighlightnowiki>}}
==== <code>agostino.test</code> - критерий Д'Агостино ====Состав групп получился следующим:
<syntaxhighlight lang{{r-code|code="rsplus"><nowiki> agostino.test> table(xDF$GRP) A B C 38 25 37 </nowiki>}}
D'Agostino skewness testРассчитаем значения критерия Шапиро - Уилка для первого столбца для каждоый группы испытуемых:
data: xskew {{r-code|code= 0<nowiki>> do.1087call(rbind, z = 0.3106tapply(DF$X1, DF$GRP, normTest)) W p-.value = A 0.75619522 0.13281alternative hypothesis: data have a skewnessB 0.9607 0.28697C 0.9410 0.07256</syntaxhighlightnowiki>}}
==== <code>bonett.test</code> - критерий Бонетта – Сайера =Графические методы ===
<syntaxhighlight lang="rsplus">> bonettМногие исследователи также используют графические методы для определения степени отклонения распределения от нормального закона. В R реализована возможность построения Q-Q графиков, гистограмм и кривых распределения плотностей вероятности.test(x)
Bonett-Seier test for Geary kurtosis==== Гистограмма ====
data: xtau = 0.8158, z = -0.6097, p-value = 0Гистограмма представляет собой графическое изображение зависимости частоты попадания элементов выборки от соответствующего интервала группировки.5421alternative hypothesisПостроить гистограмму в R можно с помощью следующей команды: kurtosis is not equal to sqrt(2/pi)</syntaxhighlight>
{{r-code|code==== <codenowiki>>jarque.testhist(x)</codenowiki> - критерий Жарка-Бера ====}}
<syntaxhighlight lang="rsplus">> jarque[[Файл:Graphics-hist.test(x)svg|400px|центр]]
Jarque-Bera Normality TestНа гистограмме изображены абсолютные частоты. Также можно построить гистограмму, отражающую плотности вероятностей:
data: xJB = 1.356, p{{r-value code|code= 0.5076alternative hypothesis: greater<nowiki>> hist(x, freq = FALSE)</syntaxhighlightnowiki>}}
=== Пакет <code>fBasics</code> ===[[Файл:Graphics-hist-probs.svg|400px|центр]]
В данном пакете не предлагается никакой оригинальной реализации критериев - код в основном заимствован из пакетов <code>stats</code>, <code>nortest</code>, <code>moments</code>. Данный пакет предлагает альтернативный вывод результатов в виде объекта S4-класса <code>fHTEST</code>, в том время как все предыдущие функции использовали S3-класс <code>htest</code>.==== График плотностей вероятности ====
Перед использованием функций из данного пакета, его необходимо предварительно установить и загрузить:===== Пакет <code>stats</code> =====
<syntaxhighlight lang{{r-code|code="rsplus"><nowiki> install.packages(pkgs = "fBasics")> libraryplot(package = "fBasics"density(x))</syntaxhighlightnowiki>}}
==== <code>normalTest</code> ====[[Файл:Stats-density.svg|400px|центр]]
Функция ===== Пакет <code>normalTest()car</code> является «обёрктой» для ряда функций из пакета <code>fBasics</code>. Задать необходимый критерий можно задать с помощью аргумента <code>method</code>. Доступны следующие критерии:=====
* <code>sw</code> {{r- критерий Шапиро - Уилка* <code>jb</|code> - критерий Жарка-Бера=* <codenowiki>ks</code> - критерий Колмогорова - Смирнова* <code>dadensityPlot(x)</codenowiki> - критерий Д'Агостино* <code>ad</code> - критерий Андерсона - Дарлинга.}}
==== <code>shapiroTest</code> [[Файл:Car- критерий Шапиро - Уилка ====densityPlot.svg|400px|центр]]
<syntaxhighlight lang="rsplus">> shapiroTest(x)=== Гистограммы с наложением графика плотностей вероятнотси ====
Title: Shapiro - Wilk Normality Test===== Пакет <code>stats</code> =====
Test Results:{{r-code|code= STATISTIC:<nowiki>> hist(x, freq = FALSE) W: 0.9831 P VALUE: 0.2301 > lines(density(x))</nowiki>}}
Description[[Файл: Fri Feb 14 17:27:33 2014 by user: </syntaxhighlight>Stats-hist-density.svg|400px|центр]]
==== <code>ksnormTest</code> - критерий Колмогорова - Смирнова ====Теперь наложим на наш график кривую плотностей вероятности для нормального распределения:
Данная функция вызывает <{{r-code|code=<nowiki>ks.test> xfit <- seq(min(x), max(x), length = 100) # Координаты по оси X> yfit <- dnorm(xfit, mean = mean(x), sd = sd(x)) # Вычисление координат по оси Y> hist(x, freq = FALSE)> lines(density(x), col = "pnormred")# Накладываем кривую плотностей вероятности> lines(xfit, yfit, col = "blue") # Накладываем «нормальную» кривую</codenowiki> для трёх альтернативных гипотез - двусторонней и двух односторонних.}}
<syntaxhighlight lang="rsplus">> ksnormTest(x)[[Файл:Stats-density-compare.svg|400px|центр]]
Title: One-sample Kolmogorov-Smirnov test===== Пакет <code>gamlss</code> =====
Test ResultsБолее простой способ сравнение графиков плотностей вероятности представлен в функции <code>histDist</code> из пакета <code>gamlss</code>: STATISTIC: D: 0.0534 P VALUE: Alternative Two-Sided: 0.938 Alternative Less: 0.7049 Alternative Greater: 0.5654
Description: Fri Feb 14 18:52:37 2014 by user:{{r-code|code=</syntaxhighlightnowiki>>histDist(x, family = "NO", density = TRUE)
==== <code>jarqueberaTest</code> - критерий Жарка-Бера ====Family: c("NO", "Normal") Fitting method: "nlminb"
<syntaxhighlight langCall: gamlssML(y = y, family ="rsplusNO">> jarqueberaTest(, formula = x)
TitleMu Coefficients:[1] Jarque - Bera Normalality Test0.0462Sigma Coefficients:[1] 0.023
Test Results Degrees of Freedom for the fit:2 Residual Deg. of Freedom 998 STATISTICGlobal Deviance: 2884 AIC: X-squared: 1.3562888 P VALUE SBC: 2898 Asymptotic p Value: 0.5076 </nowiki>}}
Description[[Файл: Fri Feb 14 18:58:29 2014 by user:</syntaxhighlight>Gamlss-histdist.svg|400px|центр]]
==== С помощью аргумента <code>dagoTestfamily</code> - критерий Д'Агостино ====можно задать семейство распределений для подгонки и сравнения<ref>Более подробную информацию о доступных семействах распределений можно получить с помощью команды <code>help("gamlss.family")</code>.</ref>.
<syntaxhighlight lang="rsplus">> dagoTest(x)=== Q-Q график ====
Title: D'Agostino Normality TestQ-Q график (Q - квантиль) — это график, на котором квантили из двух распределений расположены относительно друг друга. Чем ближе точки на графике к диагональной прямой, тем ближе распределение исследуемой переменной к нормальному закону.
Test Results: STATISTIC: Chi2 | Omnibus: 1Построение квантильных графиков в R реализовано в нескольких пакетах.8673 Z3 | Skewness: 0.4713 Z4 | Kurtosis: 1.2826 P VALUE: Omnibus Test: 0.3931 Skewness Test: 0.6374 Kurtosis Test: 0.1996
Description: Fri Feb 14 18:59:31 2014 by user: ===== Пакет <code>stats</syntaxhighlightcode>=====
==== Построение Q–Q plot с помощью пакета <code>adTeststats</code> - критерий Андерсона - Дарлинга ====выглядит следующим образом:
<syntaxhighlight lang{{r-code|code="rsplus"<nowiki>> qqnorm(x)> adTestqqline(x)</nowiki>}}
Title[[Файл: Anderson Stats- Darling Normality Testqqnorm.svg|400px|центр]]
Test Results: STATISTIC: A: 0.4181 P VALUE: 0.323 ===== Пакет <code>QTLRel</code> =====
Description: Fri Feb 14 19:00:49 2014 by user: Построение Q–Q plot с помощью пакета <code>QTLRel</syntaxhighlightcode>выглядит следующим образом:
{{r-code|code==== <codenowiki>cvmTest> qqPlot(x, x = "norm")</codenowiki> - критерий Крамера - фон Мизеса ====}}
<syntaxhighlight lang="rsplus">> cvmTest(x)[[Файл:Qtlrel-qqplot.svg|400px|центр]]
Title: Cramer - von Mises Normality Test===== Пакет <code>car</code> =====
Test ResultsАльтернативный вариант реализован в функции <code>qqPlot()</code> из пакета <code>car</code>: STATISTIC: W: 0.048 P VALUE: 0.5359
Description: Fri Feb 14 19:01:34 2014 by user:{{r-code|code=<nowiki>> qqPlot(x, distribution = "norm")</syntaxhighlightnowiki>}}
==== <code>lillieTest</code> [[Файл:Car- критерий Лиллиефорса ====qqPlot.svg|400px|центр]]
<syntaxhighlight lang="rsplus"==== Пакет <code>e1071</code> lillieTest(x)=====
TitleПостроение Q-Q plot можно осуществить с помощью функции <code>probplot</code> из пакета <code>e1071</code>: Lilliefors (KS) Normality Test
Test Results:{{r-code|code= STATISTIC:<nowiki>> probplot(x, qdist = qnorm)</nowiki> D: 0.0521 P VALUE: 0.7258 }}
Description[[Файл: Fri Feb 14 19:01:58 2014 by user:</syntaxhighlight>E1071-probplot.svg|400px|центр]]
==== <code>pchiTest</code> - критерий Пирсона ==Многомерное нормальное распределение ==
Перед началом обзора функций, реализующий критерии проверки многомерной нормальности, сгенерируем массив данных. Сделать это можно при помощью следующих функций * <syntaxhighlight lang="rsplus"code>mvrnorm</code> из пакета <code>MASS</code>* <code>rmvnorm</code> из пакета <code>mvtnorm</code>* <code>rmnorm</code> из пакета <code>mnormt</code> pchiTest(x)
TitleВот пример кода, генерирующего массив данных, имеющих многомерное нормальное распределение: Pearson Chi-Square Normality Test
Test Results:{{r-code|code= PARAMETER:> means <- c(0, 0, 0, 0) # средние для переменных Number of Classes: 13> sigmas <- diag(length(means)) # ковариационная матрица STATISTIC:> mx <- rmvnorm(100, mean = means, sigma = sigmas) P: 17.78 P VALUE: Adhusted: 0.05879 Not adjusted: 0.1225 }}
DescriptionПакет {{r-package|mvnormtest}} реализует модификацию критерия Шапиро - Уилка для многомерных данных - функция <code>mshapiro.test()</code><ref>В качестве аргумента необходимо передать транспонированную матрицу: Fri Feb 14 19:02:21 2014 by user:<code>mshapiro.test(t(mx))</code>.</syntaxhighlightref>.
==== Пакет {{r-package|ICS}} предлагает реализацию критериев эксцесса и асимметрии для многомерных данных: <code>sfTestmvnorm.kur.test()</code> - критерий Шапиро - Франчия ====, <code>mvnorm.skew.test()</code>.
Пакет {{r-package|energy}} реализует E-статистики для сравнения распределений. Критерия для проверки гипотезы о соответствия распределения многомерной переменной многомерному нормальному распределению предлагается функция <syntaxhighlight lang="rsplus"code>mvnorm.etest()</code> sfTest<ref>Для вычисления уровня значимости критерия используется метод бутстрепа (xbootstrap). Число итераций для бутстрепа можно задать с помощью аргумента <code>R</code>.</ref>.
Title: Shapiro - Francia Normality Test== Ссылки ==
Test Results* Juergen Gross and bug fixes by Uwe Ligges (2012). nortest:Tests for Normality. R package version 1.0-2. STATISTIC*:http://CRAN.R-project.org/package=nortest W* Lukasz Komsta and Frederick Novomestky (2012). moments: Moments, cumulants, skewness, kurtosis and related tests. R package version 0.978113.*: http://CRAN.R-project.org/package=moments* Diethelm Wuertz, Rmetrics core team members, uses code builtin from the following R contributed packages: gmm from Pierre Chauss, gld from Robert King, gss from Chong Gu, nortest from Juergen Gross, HyperbolicDist from David Scott, sandwich from Thomas Lumley, Achim Zeileis, fortran/C code from Kersti Aas and akima from Albrecht Gebhardt (2013). fBasics: Rmetrics - Markets and Basic Statistics. R package version 3010.86.*: http://CRAN.R-project.org/package=fBasics* Adrian Trapletti and Kurt Hornik (2013). tseries: Time Series Analysis and Computational Finance. R package version 0.10-32.*: http://CRAN.R-project.org/package=tseries* Joseph L. Gastwirth; Yulia R. Gel <ygl@math.uwaterloo.ca>; W. L. Wallace Hui <wlwhui@uwaterloo.ca>; Vyacheslav Lyubchich <vlyubchich@uwaterloo.ca>; Weiwen Miao <miao@macalester.edu>; Kimihiro Noguchi <kinoguchi@ucdavis.edu> (2013). lawstat: An R package for P VALUEbiostatistics, public policy, and law. R package version 2.4.1.*:http://CRAN.R-project.org/package=lawstat * John Fox and Sanford Weisberg (2013). car: Companion to Applied Regression. R package version 2.0-19/r346.*: http://R-Forge.R-project.org/projects/car/* Mikis Stasinopoulos, Bob Rigby with contributions from Calliope Akantziliotou and Vlasios Voudouris (2014). gamlss: Generalised Additive Models for Location Scale and Shape. R package version 4.2-7.*: http://CRAN.R-project.org/package=gamlss* Riyan Cheng (2013). QTLRel: Tools for mapping of quantitative traits of genetically related individuals and calculating identity coefficients from a pedigree. R package version 0.2-14.*: http://CRAN.R-project.org/package=QTLRel* David Meyer, Evgenia Dimitriadou, Kurt Hornik, Andreas Weingessel and Friedrich Leisch (2014). e1071: Misc Functions of the Department of Statistics (e1071), TU Wien. R package version 1.6-2.*: http://CRAN.R-project.08574 org/package=e1071
Description: Fri Feb 14 19:02:45 2014 by user:== Примечания ==<references /syntaxhighlight== Многомерное нормальное распределение ==
[[Категория:R]]
[[Категория:Статистический анализ]]
[[Категория:Статистические критерии]]
[[Категория:Проверка статистических гипотез]]

Навигация