簡単なBootstrap信頼区間の計算(bootstrap confidence interval)
分布が良く分からない統計量の信頼区間を求める場合は、Bootstrap sampleを使って信頼区間を構成するのが簡単です。
Efron先生が論文で良く例に出すのが、主成分分析の固有値の信頼区間。
確かに何の分布に従ってるのか良く分からないですね。
パッケージはbootstrapがあります。
プログラム例はこんな感じ↓
library(bootstrao)
x <- rnorm(20)
theta <- function(x){mean(x)}
results <- bootstrap(x,100,theta)
でもこれだとパラメータが1次元なので、汎用性は低いです(うまいやり方があるのかもしれないけど)。
そこで、sample関数を使ってbootstrap sampleを作る方法を紹介します。
プログラムはこちら↓
#---make null data
ResultBoot <- matrix(NA, nboot, npar)
#---perform bootstrap sample
for(i in 1:nboot){
BootID <- sample(1:nrow(Data), nrow(Data), replace = "T")
#---make bootstrap sample
BootSample <- Data[BootID, ]
#---calculate bootstrap "star" estimate
ResultBoot[i, ] <- SomeFunction(BootSample, parameter)
}
(MeanBoot <- mean(ResultBoot[, 1]))
(SDBoot <- sd(ResultBoot[, 1]))
#---95% Bootstrap Confidence Interval(95% ブートストラップ信頼区間)
MeanBoot - 1.96*SDBoot
MeanBoot + 1.96*SDBoot
残念ながらコピペで動くプログラムじゃありませんが、適切にパラメータ設定できればどんな関数で推定したものもブートストラップ信頼区間を作れます。
いじる必要のあるパラメータは、
- Data:使いたいデータ
- nboot:ブートストラップ回数
- npar:推定するパラメータの数
- SomeFunction, parameter:パラメータを推定するための関数とパラメータ(←これが目的の関数)
で、信頼区間を付けたい統計量が1つしかない場合は、ResultBoot[i, ]をResultBoot[i]にすれば問題ないはず(未確認汗)。
こんなわけでブートストラップ信頼区間も簡単に作れます。
是非お試し下さい。

