Gibt es einen Befehl, um den Standardfehler des Mittelwerts in R zu finden?
Antworten:
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
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 sd
Funktion in R führt bereits eine Quadratwurzel aus (Code für sd
ist 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, var
können Sie diese Änderung vornehmen.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
Mit dieser Syntax kann man beispielsweise den var
Umgang mit fehlenden Werten nutzen. var
In diesem se
Aufruf kann alles verwendet werden, was als benanntes Argument übergeben werden kann .
stderr
ein Funktionsname in ist base
.
stderr
berechnet NICHT den angezeigten Standardfehlerdisplay aspects. of connection
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 ...).
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))
}
stderr
im base
Paket eine Funktion vorhanden ist , die etwas anderes ausführt. Daher ist es möglicherweise besser, einen anderen Namen für diesen zu se
Der Paket-Sciplot hat die eingebaute Funktion se (x)
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)
Sie können die Funktion stat.desc aus dem Pastec-Paket verwenden.
library(pastec)
stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
Weitere Informationen finden Sie hier: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
y <- mean(x, na.rm=TRUE)
sd(y)
für Standardabweichung var(y)
für Varianz.
Beide Ableitungen werden n-1
im Nenner verwendet, sodass sie auf Beispieldaten basieren.