Есть ли какая-нибудь команда, чтобы найти стандартную ошибку среднего в R?
источник
Есть ли какая-нибудь команда, чтобы найти стандартную ошибку среднего в 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
в знаменателе, поэтому они основаны на выборочных данных.источник