#r #random
#r #Случайный
Вопрос:
Две разные выборки, сгенерированные с rnorm
помощью функции, дают одинаковый результат в тесте Шапиро-Уилка. Я был бы очень признателен за объяснение моей ошибки.
> set.seed(18102003)
> x=rnorm(n=6,mean=1.29,sd=1.29*0.33)
> x
[1] 2.0989973 1.5440310 0.8401053 1.3630999 1.3274229 1.9812853
> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.94929, p-value = 0.7345
> set.seed(18102003)
> x=rnorm(6,2.97,2.97*0.49)
> x
[1] 5.735642 3.838432 1.431988 3.219900 3.097934 5.333231
> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.94929, p-value = 0.7345
Комментарии:
1. Если вы это сделаете
z <- rnorm(n = 6); shapiro.test(z)
, вы увидите те же значения, векторыx
иz
просто масштабированные версии одного и того жеz
. Вычислитеscale(x) - scale(z)
и убедитесь, что различия неотличимы от нуля.2. @RuiBarradas, пожалуйста, отправьте ответ?
3. @BenBolker Готово, немного более подробно.
Ответ №1:
Результаты тестов точно такие же, потому что векторы являются копиями друг друга в масштабе, а тест Шапиро-Уилкса инвариантен к изменениям местоположения и масштаба. Это можно увидеть, если вычислить различия между масштабированными векторами.
Сначала снова сгенерируйте векторы, но присвоите им разные имена и новый вектор z
.
set.seed(18102003)
x <- rnorm(n = 6, mean = 1.29, sd = 1.29*0.33)
set.seed(18102003)
y <- rnorm(6, 2.97, 2.97*0.49)
set.seed(18102003)
z <- rnorm(n = 6)
Теперь посмотрите, что x
и y
являются копиями z
all.equal(x, 1.29*0.33*z 1.29)
#[1] TRUE
all.equal(y, 2.97*0.49*z 2.97)
#[1] TRUE
scale(x) - scale(y) # equal up to floating-point precision
scale(x) - scale(z) # the same
Теперь запустите тесты и сравните статистику тестов с identical
.
identical(shapiro.test(z)$statistic, shapiro.test(x)$statistic)
#[1] TRUE
identical(shapiro.test(z)$statistic, shapiro.test(y)$statistic)
#[1] TRUE