Apakah ada perintah untuk menemukan kesalahan standar mean di R?
sumber
Kesalahan standar hanyalah deviasi standar dibagi dengan akar kuadrat ukuran sampel. Sehingga Anda dapat dengan mudah membuat fungsi Anda sendiri:
> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972
Kesalahan standar (SE) hanyalah deviasi standar dari distribusi sampling. Varians distribusi sampling adalah varians data dibagi dengan N dan SE adalah akar kuadratnya. Dari pemahaman tersebut dapat dilihat bahwa lebih efisien menggunakan varians dalam perhitungan SE. The sd
fungsi dalam R sudah tidak satu akar kuadrat (kode untuk sd
di R dan mengungkapkan dengan hanya mengetik "sd"). Oleh karena itu, berikut ini yang paling efisien.
se <- function(x) sqrt(var(x)/length(x))
untuk membuat fungsinya sedikit lebih kompleks dan menangani semua opsi yang dapat Anda berikan var
, Anda dapat membuat modifikasi ini.
se <- function(x, ...) sqrt(var(x, ...)/length(x))
Menggunakan sintaks ini seseorang dapat memanfaatkan hal-hal seperti bagaimana var
menangani nilai yang hilang. Apa pun yang dapat diteruskan var
sebagai argumen bernama dapat digunakan dalam hal inise
panggilan .
stderr
nama fungsi dibase
.stderr
TIDAK menghitung kesalahan standar yang ditampilkannyadisplay aspects. of connection
stderr
menghitung kesalahan standar, dia memperingatkan bahwa nama ini digunakan di basis, dan John awalnya menamai fungsinyastderr
(periksa riwayat edit ...).Versi jawaban John di atas yang menghilangkan NA yang mengganggu:
stderr <- function(x, na.rm=FALSE) { if (na.rm) x <- na.omit(x) sqrt(var(x)/length(x)) }
sumber
stderr
dalambase
paket yang melakukan sesuatu yang lain, jadi mungkin lebih baik untuk memilih nama lain untuk yang satu ini, misalnyase
Sciplot paket memiliki fungsi built-in se (x)
sumber
Karena saya akan kembali ke pertanyaan ini sesekali dan karena pertanyaan ini sudah lama, saya memposting patokan untuk jawaban yang paling banyak dipilih.
Perhatikan, bahwa untuk jawaban @ Ian dan @ John, saya membuat versi lain. Alih-alih menggunakan
length(x)
, saya menggunakansum(!is.na(x))
(untuk menghindari NAs). Saya menggunakan vektor 10 ^ 6, dengan 1.000 pengulangan.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
Hasil:
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)
sumber
lebih umum, untuk kesalahan standar pada parameter lain, Anda dapat menggunakan paket boot untuk simulasi bootstrap (atau menulisnya sendiri)
sumber
Anda dapat menggunakan fungsi stat.desc dari paket pastec.
library(pastec) stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
Anda dapat menemukan lebih banyak tentangnya dari sini: https://www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.desc
sumber
Mengingat bahwa mean juga dapat diperoleh dengan menggunakan model linier, regresi variabel terhadap intersep tunggal, Anda juga dapat menggunakan
lm(x~1)
fungsi untuk ini!Keuntungannya adalah:
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
Dibuat pada 2020-10-06 oleh paket reprex (v0.3.0)
sumber
y <- mean(x, na.rm=TRUE)
sd(y)
untuk deviasi standarvar(y)
untuk varians.Kedua derivasi digunakan
n-1
dalam penyebut sehingga didasarkan pada data sampel.sumber