Rの平均の標準誤差を見つけるコマンドはありますか?
回答:
標準誤差(SE)は、サンプリング分布の標準偏差にすぎません。サンプリング分布の分散は、データの分散をNで割ったものであり、SEはその平方根です。その理解から、SE計算で分散を使用する方が効率的であることがわかります。sd
Rの関数は、すでに1つの平方根を実行しています(のコードsd
はRにあり、「sd」と入力するだけで表示されます)。したがって、以下が最も効率的です。
se <- function(x) sqrt(var(x)/length(x))
関数をもう少し複雑にしvar
、渡すことができるすべてのオプションを処理するために、この変更を行うことができます。
se <- function(x, ...) sqrt(var(x, ...)/length(x))
この構文を使用するvar
と、欠落値の処理方法などを利用できます。var
名前付き引数として渡すことができるものはすべて、このse
呼び出しで使用できます。
stderr
関数名であることに注意してくださいbase
。
stderr
は表示される標準誤差を計算しませんdisplay aspects. of connection
stderr
標準誤差を計算するとは言いませんでした、彼はこの名前がベースで使用されていることを警告していました、そしてジョンはもともと彼の関数に名前を付けましたstderr
(編集履歴をチェックしてください...)。
厄介なNAを削除する上記のジョンの答えのバージョン:
stderr <- function(x, na.rm=FALSE) {
if (na.rm) x <- na.omit(x)
sqrt(var(x)/length(x))
}
stderr
してbase
、この1つに別の名前を選んだ方が良いかもしれませんので、他の何かをしたパッケージは、例えばse
パッケージsciplotには、組み込み関数se(x)があります。
私は時々この質問に戻りますが、この質問は古いので、最も投票された回答のベンチマークを投稿しています。
@Ianと@Johnの回答のために、別のバージョンを作成したことに注意してください。を使用する代わりにlength(x)
、sum(!is.na(x))
(NAを回避するために)を使用しました。私は10 ^ 6のベクトルを使用し、1,000回繰り返しました。
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
結果:
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パッケージの関数stat.descを使用できます。
library(pastec)
stat.desc(x, BASIC =TRUE, NORMAL =TRUE)
詳細については、https: //www.rdocumentation.org/packages/pastecs/versions/1.3.21/topics/stat.descをご覧ください。
線形モデルを使用して平均を取得し、単一の切片に対して変数を回帰することによっても平均を取得できることを思い出してくださいlm(x~1)
。このための関数も使用できます。
利点は次のとおりです。
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
reprexパッケージ(v0.3.0)によって2020-10-06に作成されました
y <- mean(x, na.rm=TRUE)
sd(y)
var(y)
分散の標準偏差。
どちらの派生もn-1
分母で使用されるため、サンプルデータに基づいています。