Existe-t-il une commande pour trouver l'erreur standard de la moyenne dans R?
Réponses:
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 dans base
.
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 fonction stderr
(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))
}
stderr
dans le base
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)
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)
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
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)
y <- mean(x, na.rm=TRUE)
sd(y)
pour l'écart type var(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.