Juste une autre variante qui est quelque peu simpliste mais je pense délivrer le message sans utiliser explicitement la bibliothèque boot
qui peut confondre certaines personnes avec la syntaxe qu'elle utilise.
Nous avons un modèle linéaire: ,y= Xβ+ ϵϵ ∼ N( 0 , σ2)
Ce qui suit est un bootstrap paramétrique pour ce modèle linéaire, cela signifie que nous ne rééchantillonnons pas nos données d'origine mais en réalité nous générons de nouvelles données à partir de notre modèle ajusté. De plus, nous supposons que la distribution bootstrapée du coefficient de régression est symétrique et qu'elle est invariante par translation. (Très grossièrement, nous pouvons en déplacer l'axe en affectant ses propriétés) L'idée derrière est que les fluctuations des sont dues à et donc avec suffisamment d'échantillons, elles devraient fournir une bonne approximation de la vraie distribution des . Comme avant, nous testons à nouveau et nous définissons nos valeurs p commeβ ϵ β H 0 : 0 = β j βββϵβH0: 0 = βj"la probabilité, étant donné une hypothèse nulle pour la distribution de probabilité des données, que le résultat serait aussi extrême ou plus extrême que le résultat observé" (où les résultats observés dans ce cas sont lesnous avons obtenus pour notre modèle d'origine). Alors voilà:β
# 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))
Comme mentionné, l'idée générale est que la distribution bootstrapée des est approximativement leur vraie. (Clairement, ce code est optimisé pour la vitesse mais pour la lisibilité. :))β