Wie finde ich in R den Standardfehler des Mittelwerts?

89

Gibt es einen Befehl, um den Standardfehler des Mittelwerts in R zu finden?

Alex
quelle

Antworten:

162

Der Standardfehler ist nur die Standardabweichung geteilt durch die Quadratwurzel der Stichprobengröße. So können Sie ganz einfach Ihre eigene Funktion erstellen:

> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
Ian Fellows
quelle
91

Der Standardfehler (SE) ist nur die Standardabweichung der Stichprobenverteilung. Die Varianz der Stichprobenverteilung ist die Varianz der Daten geteilt durch N und die SE ist die Quadratwurzel davon. Aus diesem Verständnis geht hervor, dass es effizienter ist, Varianz in der SE-Berechnung zu verwenden. Die sdFunktion in R führt bereits eine Quadratwurzel aus (Code für sdist in R und wird durch Eingabe von "sd" angezeigt). Daher ist das Folgende am effizientesten.

se <- function(x) sqrt(var(x)/length(x))

Um die Funktion nur ein bisschen komplexer zu gestalten und alle Optionen zu verarbeiten, an die Sie übergeben können, varkönnen Sie diese Änderung vornehmen.

se <- function(x, ...) sqrt(var(x, ...)/length(x))

Mit dieser Syntax kann man beispielsweise den varUmgang mit fehlenden Werten nutzen. varIn diesem seAufruf kann alles verwendet werden, was als benanntes Argument übergeben werden kann .

John
quelle
4
Interessanterweise sind Ihre Funktion und die von Ian fast identisch schnell. Ich habe sie beide 1000 Mal gegen 10 ^ 6 Millionen Rnorm Draws getestet (nicht genug Kraft, um sie stärker zu schieben). Umgekehrt war die Funktion von plotrix immer langsamer als selbst die langsamsten Läufe dieser beiden Funktionen - aber unter der Haube ist auch viel mehr los.
Matt Parker
6
Beachten Sie, dass dies stderrein Funktionsname in ist base.
Tom
3
Das ist ein sehr guter Punkt. Ich benutze normalerweise se. Ich habe diese Antwort geändert, um dies widerzuspiegeln.
John
5
Tom, NEIN stderrberechnet NICHT den angezeigten Standardfehlerdisplay aspects. of connection
Prognostiker
15
@forecaster Tom hat nicht gesagt stderr, dass er den Standardfehler berechnet, er warnte, dass dieser Name in base verwendet wird, und John hat seine Funktion ursprünglich benannt stderr(überprüfen Sie den Bearbeitungsverlauf ...).
Molx
60

Eine Version von Johns Antwort oben, die die lästigen NAs entfernt:

stderr <- function(x, na.rm=FALSE) {
  if (na.rm) x <- na.omit(x)
  sqrt(var(x)/length(x))
}
zufällig gewählter Name
quelle
Beachten Sie, dass stderrim basePaket eine Funktion vorhanden ist , die etwas anderes ausführt. Daher ist es möglicherweise besser, einen anderen Namen für diesen zu se
Spatz
5

Der Paket-Sciplot hat die eingebaute Funktion se (x)

user2045554
quelle
2

Da ich ab und zu auf diese Frage zurückkehre und diese Frage alt ist, veröffentliche ich einen Benchmark für die am häufigsten bewerteten Antworten.

Beachten Sie, dass ich für die Antworten von @ Ian und @ John eine andere Version erstellt habe. Anstatt zu verwenden length(x), habe ich verwendet sum(!is.na(x))(um NAs zu vermeiden). Ich habe einen Vektor von 10 ^ 6 mit 1.000 Wiederholungen verwendet.

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

Ergebnisse:

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)

Geben Sie hier die Bildbeschreibung ein

DJV
quelle
0

Im Allgemeinen können Sie für Standardfehler bei anderen Parametern das Boot-Paket für Bootstrap-Simulationen verwenden (oder diese selbst schreiben).

Owen
quelle
-12
y <- mean(x, na.rm=TRUE)

sd(y)für Standardabweichung var(y)für Varianz.

Beide Ableitungen werden n-1im Nenner verwendet, sodass sie auf Beispieldaten basieren.

user2945838
quelle