やや単純化した別のバリアントですが、ライブラリboot
を明示的に使用せずにメッセージを配信すると、一部の人々が使用する構文で混乱する可能性があります。
線形モデルがあります:、y=Xβ+ϵϵ∼N(0,σ2)
以下は、その線形モデルのパラメトリックブートストラップです。つまり、元のデータをリサンプリングせずに、実際に近似モデルから新しいデータを生成します。さらに、回帰係数のブートストラップされた分布は対称であり、それは並進不変であると仮定します。(非常に大まかに言えば、その特性に影響を与えてその軸を移動できる)背後にある考え方は、の変動はによるものであり、したがって、十分なサンプルがあれば、真の分布の適切な近似を提供するはずですさん。前と同じように、もう一度をテストし、p値を次のように定義しましたββϵβH0:0=βj「データの確率分布についての帰無仮説が与えられた場合、結果は観測された結果と同じか極端になる確率」(この場合の観測された結果は、取得した元のモデルの場合)。だからここに行く:β
# Sample Size
N <- 2^12;
# Linear Model to Boostrap
Model2Boot <- lm( mpg ~ wt + disp, mtcars)
# Values of the model coefficients
Betas <- coefficients(Model2Boot)
# Number of coefficents to test against
M <- length(Betas)
# Matrix of M columns to hold Bootstraping results
BtStrpRes <- matrix( rep(0,M*N), ncol=M)
for (i in 1:N) {
# Simulate data N times from the model we assume be true
# and save the resulting coefficient in the i-th row of BtStrpRes
BtStrpRes[i,] <-coefficients(lm(unlist(simulate(Model2Boot)) ~wt + disp, mtcars))
}
#Get the p-values for coefficient
P_val1 <-mean( abs(BtStrpRes[,1] - mean(BtStrpRes[,1]) )> abs( Betas[1]))
P_val2 <-mean( abs(BtStrpRes[,2] - mean(BtStrpRes[,2]) )> abs( Betas[2]))
P_val3 <-mean( abs(BtStrpRes[,3] - mean(BtStrpRes[,3]) )> abs( Betas[3]))
#and some parametric bootstrap confidence intervals (2.5%, 97.5%)
ConfInt1 <- quantile(BtStrpRes[,1], c(.025, 0.975))
ConfInt2 <- quantile(BtStrpRes[,2], c(.025, 0.975))
ConfInt3 <- quantile(BtStrpRes[,3], c(.025, 0.975))
すでに述べたように、全体的な考えは、あなたがのブートストラップされた分布を彼らの本当の分布に近似させるということです。(明らかに、このコードは速度を優先して最適化されていますが、読みやすさを重視しています。:))β