Есть ли какая-нибудь команда, чтобы найти стандартную ошибку среднего в R?
Ответы:
Стандартная ошибка - это просто стандартное отклонение, деленное на квадратный корень из размера выборки. Таким образом, вы можете легко создать свою собственную функцию:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
Стандартная ошибка (SE) - это просто стандартное отклонение выборочного распределения. Дисперсия выборочного распределения - это дисперсия данных, деленная на N, а SE - это квадратный корень из этого. Исходя из этого понимания, можно увидеть, что более эффективно использовать дисперсию при вычислении SE. sd
Функция R уже делает один квадратный корень (код sd
находится в R и раскрывается, просто набрав «сд»). Следовательно, наиболее эффективным является следующее.
se <- function(x) sqrt(var(x)/length(x))
чтобы сделать функцию только немного более сложной и обработать все параметры, которые вы можете передать var
, вы можете внести это изменение.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
Используя этот синтаксис, можно воспользоваться такими вещами, как обработка var
пропущенных значений. В var
этом se
вызове можно использовать все, что может быть передано в качестве именованного аргумента .
stderr
это имя функции в base
.
stderr
, НЕ вычисляет стандартную ошибку, которую отображает,display aspects. of connection
stderr
вычисляет стандартную ошибку, он предупреждал, что это имя используется в базе, и Джон изначально назвал свою функцию stderr
(проверьте историю редактирования ...).
Версия ответа Джона выше, которая удаляет надоедливые NA:
stderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
stderr
в base
пакете есть функция, которая выполняет что-то еще, поэтому лучше выбрать для нее другое имя, напримерse
В sciplot пакета есть встроенная функция se (x)
Поскольку я время от времени возвращаюсь к этому вопросу, и поскольку этот вопрос старый, я публикую тест для получения ответов с наибольшим количеством голосов.
Обратите внимание, что для ответов @ Ian и @ John я создал другую версию. Вместо использования length(x)
я использовал sum(!is.na(x))
(чтобы избежать НА). Я использовал вектор 10 ^ 6 с 1000 повторениями.
library(microbenchmark)
set.seed(123)
myVec <- rnorm(10^6)
IanStd <- function(x) sd(x)/sqrt(length(x))
JohnSe <- function(x) sqrt(var(x)/length(x))
IanStdisNA <- function(x) sd(x)/sqrt(sum(!is.na(x)))
JohnSeisNA <- function(x) sqrt(var(x)/sum(!is.na(x)))
AranStderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
mbm <- microbenchmark(
"plotrix" = {plotrix::std.error(myVec)},
"IanStd" = {IanStd(myVec)},
"JohnSe" = {JohnSe(myVec)},
"IanStdisNA" = {IanStdisNA(myVec)},
"JohnSeisNA" = {JohnSeisNA(myVec)},
"AranStderr" = {AranStderr(myVec)},
times = 1000)
mbm
Полученные результаты:
Unit: milliseconds
expr min lq mean median uq max neval cld
plotrix 10.3033 10.89360 13.869947 11.36050 15.89165 125.8733 1000 c
IanStd 4.3132 4.41730 4.618690 4.47425 4.63185 8.4388 1000 a
JohnSe 4.3324 4.41875 4.640725 4.48330 4.64935 9.4435 1000 a
IanStdisNA 8.4976 8.99980 11.278352 9.34315 12.62075 120.8937 1000 b
JohnSeisNA 8.5138 8.96600 11.127796 9.35725 12.63630 118.4796 1000 b
AranStderr 4.3324 4.41995 4.634949 4.47440 4.62620 14.3511 1000 a
library(ggplot2)
autoplot(mbm)
Вы можете использовать функцию stat.desc из пакета pastec.
library(pastec)
stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
вы можете найти больше об этом здесь: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
Помня, что среднее значение также можно получить с использованием линейной модели, регрессируя переменную относительно одного перехвата, вы также можете использовать lm(x~1)
для этого функцию!
Преимущества:
confint()
car::linear.hypothesis()
sandwich
## generate data
x <- rnorm(1000)
## estimate reg
reg <- lm(x~1)
coef(summary(reg))[,"Std. Error"]
#> [1] 0.03237811
## conpare with simple formula
all.equal(sd(x)/sqrt(length(x)),
coef(summary(reg))[,"Std. Error"])
#> [1] TRUE
## extract confidence interval
confint(reg)
#> 2.5 % 97.5 %
#> (Intercept) -0.06457031 0.0625035
Создано 06.10.2020 пакетом REPEX (v0.3.0)
y <- mean(x, na.rm=TRUE)
sd(y)
для стандартного отклонения var(y)
для дисперсии.
Оба вывода используются n-1
в знаменателе, поэтому они основаны на выборочных данных.