Стандартное отклонение в R, кажется, возвращает неправильный ответ - я что-то делаю неправильно?
Простой пример вычисления стандартного dev:
d <- c(2,4,4,4,5,5,7,9)
sd(d)
дает
[1] 2.13809
но когда сделано вручную, ответ будет 2. Что мне здесь не хватает?
Ответы
Ответ 1
Попробуйте это
R> sd(c(2,4,4,4,5,5,7,9)) * sqrt(7/8)
[1] 2
R>
и посмотрите оставшуюся часть статью Википедии для обсуждения оценки стандартных отклонений. Используя формулу, используемую "вручную", приводит к смещенной оценке, следовательно, коррекция sqrt ((N-1)/N). Вот ключевая цитата:
Термин стандартное отклонение образец используется для нескорректированного (используя N), в то время как термин стандартное отклонение выборки используется для исправленная оценка (с использованием N - 1). Знаменатель N - 1 - это число степеней свободы в векторе остатки,.
Ответ 2
Похоже, что R принимает (n-1) в знаменателе, а не n.
Ответ 3
Когда мне нужна дисперсия население или стандартное отклонение (n как знаменатель), я определяю эти две векторизованные функции.
pop.var <- function(x) var(x) * (length(x)-1) / length(x)
pop.sd <- function(x) sqrt(pop.var(x))
BTW, Академия Хан хорошо обсуждает население и типовое стандартное отклонение здесь.
Ответ 4
Обратите внимание, что выполнение команды
?sd
в R Studio отображает страницу справки для этой функции. В разделе сведений указано
Как и var, используется знаменатель n - 1.