Изменения

Перейти к: навигация, поиск
м
Статистические критерии
* <code>rjb.test</code> - критерий Жарка-Бера
* <code>sj.test</code> - SJ-критерий
 
==== Маленькие хитрости ====
 
===== Применение функций к нескольким переменным =====
 
С помощью <code>apply</code>-функций можно последовательно применить функцию к вектору, списку или массиву. Прежде чем всего нам необходимо сформировать таблицу данных. С помощью функции <code>replicate()</code> сгенерируем 10 переменных, имеющих стандартное нормальное распределение, которые объединяются в класс <code>data.frame</code>.
 
<syntaxhighlight lang="rsplus">
> df <- data.frame(replicate(n = 10, rnorm(n = 100)))
</syntaxhighlight>
 
Структуру сгенерированной таблицы выглядит следующим образом:
 
<syntaxhighlight lang="rsplus">
> > str(df)
'data.frame': 100 obs. of 10 variables:
$ X1 : num 0.5448 -0.4478 1.079 0.0492 0.1193 ...
$ X2 : num 0.322 0.275 0.103 -1.941 -0.318 ...
$ X3 : num 0.58 -0.558 0.609 -0.949 -0.275 ...
$ X4 : num -0.6429 -1.6286 0.9507 0.0203 0.1642 ...
$ X5 : num 0.403 0.913 -0.716 -2.92 -0.945 ...
$ X6 : num 1.59621 -0.00725 -0.70304 -0.41532 0.59548 ...
$ X7 : num -0.671 1.074 -0.136 0.628 0.986 ...
$ X8 : num 0.2176 -0.0859 0.6535 -0.2412 0.4143 ...
$ X9 : num 0.412 1.51 1.11 -0.307 0.647 ...
$ X10: num 0.436 -0.468 -0.399 -0.832 0.931 ...
</syntaxhighlight>
 
Для решения поставленной задачи можно воспользоваться функцией <code>sapply()</code>. Но прежде, нам необходимо немного отформатировать формат вывода результатов нашей функции: нам нужно извлечь значения критерия и его уровень значимости, но результат функции <code>shapiro.test()</code> содержит также информацию, которая не подлежит включению в таблицу.
 
<syntaxhighlight lang="rsplus">
> shapiro.test(x)
 
Shapiro-Wilk normality test
 
data: x
W = 0.9864, p-value = 0.3977
</syntaxhighlight>
 
Структура результата применения функции <code>shapiro.test()</code> представлена ниже:
 
<syntaxhighlight lang="rsplus">
> str(shapiro.test(x))
List of 4
$ statistic: Named num 0.986
..- attr(*, "names")= chr "W"
$ p.value : num 0.398
$ method : chr "Shapiro-Wilk normality test"
$ data.name: chr "x"
- attr(*, "class")= chr "htest"
</syntaxhighlight>
 
Как видим, помимо значений критерия и уровня значимости здесь содержится информация о применяемом методе. Мы можем отфильтровать вывод следующим образом:
 
<syntaxhighlight lang="rsplus">
> normTest <- function (x) {
+ res <- shapiro.test(x)
+ return(c(res$statistic, p.value = res$p.value))
+ }
</syntaxhighlight>
 
Результат теперь будет выглядеть следующим образом:
 
<syntaxhighlight lang="rsplus">
> normTest(x)
W p.value
0.9863867 0.3977172
</syntaxhighlight>
 
Теперь можно использовать данную функцию при обработке столбцов нашей таблицы.
 
<syntaxhighlight lang="rsplus">
> t(sapply(df, normTest))
W p.value
X1 0.9860072 0.37438922
X2 0.9793961 0.11927545
X3 0.9961734 0.99470634
X4 0.9836052 0.25089207
X5 0.9794991 0.12150426
X6 0.9895875 0.63131935
X7 0.9863415 0.39488381
X8 0.9849433 0.31461676
X9 0.9899328 0.65916329
X10 0.9757493 0.06176314
</syntaxhighlight>
 
Того же результата можно добиться и с помощью функции <code>lapply()</code><ref>По результатам сравнения производительности, данный вариант оказался чуть быстрее предыдущего.</ref>:
 
<syntaxhighlight lang="rsplus">
> do.call(rbind, lapply(df, normTest))
W p.value
X1 0.9860072 0.37438922
X2 0.9793961 0.11927545
X3 0.9961734 0.99470634
X4 0.9836052 0.25089207
X5 0.9794991 0.12150426
X6 0.9895875 0.63131935
X7 0.9863415 0.39488381
X8 0.9849433 0.31461676
X9 0.9899328 0.65916329
X10 0.9757493 0.06176314
</syntaxhighlight>
=== Графические методы ===

Навигация