R'deki ortalamanın standart hatasını bulmak için herhangi bir komut var mı?
Yanıtlar:
Standart hata, sadece standart sapmanın örneklem büyüklüğünün kareköküne bölünmesidir. Böylece kendi işlevinizi kolayca yapabilirsiniz:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
Standart hata (SE), örnekleme dağılımının sadece standart sapmasıdır. Örnekleme dağılımının varyansı, verilerin varyansının N'ye bölünmesidir ve SE, bunun kareköküdür. Bu anlayıştan hareketle, SE hesaplamasında varyansı kullanmanın daha verimli olduğu görülebilir. sd
R fonksiyonu zaten bir kare kökü (kodunu yapar sd
R ve sadece yazarak "sd" ile ortaya). Bu nedenle, aşağıdakiler en etkilidir.
se <- function(x) sqrt(var(x)/length(x))
İşlevi biraz daha karmaşık hale getirmek ve geçebileceğiniz tüm seçenekleri işlemek var
için bu değişikliği yapabilirsiniz.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
Bu sözdizimini kullanarak var
, eksik değerlerle nasıl başa çıkılacağı gibi şeylerden yararlanılabilir . var
Adlandırılmış bir argüman olarak aktarılabilen her şey bu se
çağrıda kullanılabilir .
stderr
bir işlev adı olduğuna dikkat edin base
.
stderr
görüntülediği standart hatayı hesaplamazdisplay aspects. of connection
stderr
standart hatayı hesapladığını söylemedi , bu adın temelde kullanıldığını söylüyordu ve John orijinal olarak işlevini adlandırdı stderr
(düzenleme geçmişini kontrol edin ...).
John'un yukarıdaki yanıtının sinir bozucu NA'ları ortadan kaldıran bir versiyonu:
stderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
stderr
bulunduğuna dikkat edin base
, bu nedenle bunun için başka bir ad seçmek daha iyi olabilir, örneğinse
Sciplot paketi yerleşik se (x) işlevine sahiptir.
Ara sıra bu soruya geri döndüğümde ve bu soru eski olduğu için, en çok oylanan cevaplar için bir kıyaslama yapıyorum.
@ Ian ve @ John'un yanıtları için başka bir sürüm oluşturduğuma dikkat edin. Bunun yerine kullanmanın length(x)
, kullandığım sum(!is.na(x))
(Nas önlemek için). 1.000 tekrarlı 10 ^ 6'lık bir vektör kullandım.
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
Sonuçlar:
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)
Pastec paketinden stat.desc fonksiyonunu kullanabilirsiniz.
library(pastec)
stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
buradan daha fazlasını bulabilirsiniz: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
Ortalamanın doğrusal bir model kullanılarak elde edilebileceğini, değişkeni tek bir kesişme karşısında gerileyebileceğini hatırlayarak, bunun için lm(x~1)
işlevi de kullanabilirsiniz !
Avantajlar:
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
2020-10-06 tarihinde reprex paketi tarafından oluşturuldu (v0.3.0)
y <- mean(x, na.rm=TRUE)
sd(y)
var(y)
varyans için standart sapma için.
Her iki türetme n-1
paydada kullanılır , bu nedenle örnek verilere dayanırlar.