¿Existe algún comando para encontrar el error estándar de la media en R?
fuente
¿Existe algún comando para encontrar el error estándar de la media en R?
El error estándar es solo la desviación estándar dividida por la raíz cuadrada del tamaño de la muestra. Para que pueda crear fácilmente su propia función:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
El error estándar (SE) es solo la desviación estándar de la distribución muestral. La varianza de la distribución muestral es la varianza de los datos dividida por N y el SE es la raíz cuadrada de eso. Partiendo de esa comprensión, se puede ver que es más eficiente usar la varianza en el cálculo de EE. La sd
función en R ya tiene una raíz cuadrada (el código para sd
está en R y se revela simplemente escribiendo "sd"). Por tanto, lo siguiente es más eficaz.
se <- function(x) sqrt(var(x)/length(x))
Para hacer la función un poco más compleja y manejar todas las opciones a las que podría pasar var
, podría hacer esta modificación.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
Usando esta sintaxis, uno puede aprovechar cosas como cómo se var
ocupa de los valores perdidos. Todo lo que se pueda pasar var
como un argumento con nombre se puede utilizar en esta se
llamada.
stderr
es un nombre de función enbase
.stderr
NO calcula el error estándar que muestradisplay aspects. of connection
stderr
calcula el error estándar, estaba advirtiendo que este nombre se usa en base, y John originalmente nombró su funciónstderr
(verifique el historial de edición ...).Una versión de la respuesta de John anterior que elimina los molestos NA:
stderr <- function(x, na.rm=FALSE) { if (na.rm) x <- na.omit(x) sqrt(var(x)/length(x)) }
fuente
stderr
en elbase
paquete que hace otra cosa, por lo que podría ser mejor elegir otro nombre para este, por ejemplose
El paquete sciplot tiene la función incorporada se (x)
fuente
Como vuelvo a esta pregunta de vez en cuando y porque esta pregunta es antigua, estoy publicando un punto de referencia para las respuestas más votadas.
Tenga en cuenta que para las respuestas de @ Ian y @ John creé otra versión. En lugar de usar
length(x)
, usésum(!is.na(x))
(para evitar NA). Usé un vector de 10 ^ 6, con 1,000 repeticiones.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
Resultados:
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)
fuente
de manera más general, para errores estándar en cualquier otro parámetro, puede usar el paquete de arranque para simulaciones de arranque (o escribirlos usted mismo)
fuente
Puede utilizar la función stat.desc del paquete pastec.
library(pastec) stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
puede encontrar más sobre esto desde aquí: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
fuente
Recordando que la media también se puede obtener usando un modelo lineal, haciendo una regresión de la variable contra una única intersección, ¡también puede usar la
lm(x~1)
función para esto!Las ventajas son:
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
Creado el 2020-10-06 por el paquete reprex (v0.3.0)
fuente
y <- mean(x, na.rm=TRUE)
sd(y)
para desviación estándarvar(y)
para varianza.Ambas derivaciones se utilizan
n-1
en el denominador, por lo que se basan en datos de muestra.fuente