簡単な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]にすれば問題ないはず(未確認汗)。
こんなわけでブートストラップ信頼区間も簡単に作れます。
是非お試し下さい。