Existe-t-il une commande pour trouver l'erreur standard de la moyenne dans R?
la source
Existe-t-il une commande pour trouver l'erreur standard de la moyenne dans R?
L'erreur standard est simplement l'écart type divisé par la racine carrée de la taille de l'échantillon. Ainsi, vous pouvez facilement créer votre propre fonction:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
L'erreur standard (SE) n'est que l'écart type de la distribution d'échantillonnage. La variance de la distribution d'échantillonnage est la variance des données divisée par N et l'ES en est la racine carrée. Partant de cette compréhension, on peut voir qu'il est plus efficace d'utiliser la variance dans le calcul SE. La sd
fonction dans R fait déjà une racine carrée (le code pour sd
est dans R et révélé en tapant simplement "sd"). Par conséquent, ce qui suit est le plus efficace.
se <- function(x) sqrt(var(x)/length(x))
afin de rendre la fonction un peu plus complexe et de gérer toutes les options auxquelles vous pourriez passer var
, vous pouvez effectuer cette modification.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
En utilisant cette syntaxe, on peut tirer parti de choses comme la façon dont var
traite les valeurs manquantes. Tout ce qui peut être passé en var
tant qu'argument nommé peut être utilisé dans cet se
appel.
stderr
s'agit d'un nom de fonction dansbase
.stderr
ne calcule PAS l'erreur standard qu'il affichedisplay aspects. of connection
stderr
calcule l'erreur standard, il avertissait que ce nom est utilisé dans la base, et John a initialement nommé sa fonctionstderr
(vérifiez l'historique des modifications ...).Une version de la réponse de John ci-dessus qui supprime les ennuyeux NA:
stderr <- function(x, na.rm=FALSE) { if (na.rm) x <- na.omit(x) sqrt(var(x)/length(x)) }
la source
stderr
dans lebase
package qui fait autre chose, il serait donc préférable de choisir un autre nom pour celle-ci, par exemplese
Le paquet sciplot a la fonction intégrée se (x)
la source
Comme je reviens sur cette question de temps en temps et parce que cette question est ancienne, je poste un repère pour les réponses les plus votées.
Notez que pour les réponses de @ Ian et @ John, j'ai créé une autre version. Au lieu d'utiliser
length(x)
, j'ai utilisésum(!is.na(x))
(pour éviter les NA). J'ai utilisé un vecteur de 10 ^ 6, avec 1000 répétitions.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
Résultats:
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)
la source
plus généralement, pour les erreurs standard sur tout autre paramètre, vous pouvez utiliser le package de démarrage pour les simulations de bootstrap (ou les écrire vous-même)
la source
Vous pouvez utiliser la fonction stat.desc du package pastec.
library(pastec) stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
vous pouvez en savoir plus à ce sujet ici: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
la source
En vous rappelant que la moyenne peut également être obtenue en utilisant un modèle linéaire, en régressant la variable par rapport à une seule intersection, vous pouvez également utiliser la
lm(x~1)
fonction pour cela!Les avantages sont:
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
Créé le 2020-10-06 par le package reprex (v0.3.0)
la source
y <- mean(x, na.rm=TRUE)
sd(y)
pour l'écart typevar(y)
de la variance.Les deux dérivations sont utilisées
n-1
dans le dénominateur et sont donc basées sur des échantillons de données.la source