Comment: intervalles de prédiction pour la régression linéaire via le bootstrap

14

J'ai du mal à comprendre comment utiliser le bootstrap pour calculer les intervalles de prédiction pour un modèle de régression linéaire. Quelqu'un peut-il décrire une procédure étape par étape? J'ai cherché via google mais rien n'a vraiment de sens pour moi.

Je comprends comment utiliser le bootstrap pour calculer les intervalles de confiance pour les paramètres du modèle.

Max
la source
1
Ceci est discuté en détail dans le livre de Davison et Hinkley, Bootstrap Methods and Their Application , ainsi qu'un algorithme explicite (Algorithm 6.4). Ils expliquent les concepts, les pièges et les détails plus longuement que possible dans une réponse raisonnable ici.
Glen_b -Reinstate Monica
@Glen_b Merci pour la référence. Malheureusement, je ne suis pas dans une université ou une entreprise, je n'ai donc pas les ressources nécessaires pour acquérir le livre.
Max
Il peut être commandé auprès d'Amazon; une explication complète de l'algorithme et de toutes les mises en garde et problèmes associés n'est pas vraiment le genre de chose que vous pouvez couvrir en quelques centaines de mots ou même une réponse d'une page.
Glen_b -Reinstate Monica
1
@Glen_b J'ai rédigé l'algorithme de Davison et HInkely --- il y a plusieurs questions sur CV à ce sujet, donc j'ai pensé que ça valait la peine. Tout commentaire que vous auriez serait apprécié. stats.stackexchange.com/questions/226565/…
Bill
Ce fil semble répondre à votre question: stats.stackexchange.com/questions/226565/…
user2683832

Réponses:

7

Les intervalles de confiance tiennent compte de l'incertitude d'estimation. Les intervalles de prédiction ajoutent à cela l'incertitude fondamentale. Les R predict.lmvous donneront l'intervalle de prédiction pour un modèle linéaire. À partir de là, tout ce que vous avez à faire est de l'exécuter à plusieurs reprises sur des échantillons amorcés.

n <- 100
n.bs <- 30

dat <- data.frame( x<-runif(n), y=x+runif(n) )
plot(y~x,data=dat)


regressAndPredict <- function( dat ) {
  model <- lm( y~x, data=dat )
  predict( model, interval="prediction" )
}

regressAndPredict(dat)

replicate( n.bs, regressAndPredict(dat[ sample(seq(n),replace=TRUE) ,]) )

Le résultat de replicateest un tableau tridimensionnel ( nx 3x n.bs). La dimension de longueur 3 se compose de la valeur ajustée pour chaque élément de données et des limites inférieure / supérieure de l'intervalle de prédiction à 95%.

Méthode de Gary King

Selon ce que vous voulez, il y a une méthode intéressante de King, Tomz et Wittenberg . Il est relativement facile à mettre en œuvre et évite les problèmes d'amorçage pour certaines estimations (par exemple max(Y)).

Je vais citer ici sa définition de l'incertitude fondamentale, car c'est assez agréable:

Une deuxième forme de variabilité, l'incertitude fondamentale représentée par la composante stochastique (la distribution f) dans l'équation 1, résulte d'innombrables événements fortuits tels que le temps ou la maladie qui peuvent influencer Y mais ne sont pas inclus dans X. Même si nous connaissions les valeurs exactes des paramètres (éliminant ainsi l'incertitude d'estimation), l'incertitude fondamentale nous empêcherait de prédire Y sans erreur.

Ari B. Friedman
la source
3
Je ne sais pas comment vous construisez un intervalle de confiance à partir de cette matrice d'intervalles de prédiction n.bs.
B_Miner
1

Le bootstrap ne suppose aucune connaissance de la forme de la distribution parent sous-jacente d'où provient l'échantillon. Les estimations classiques classiques des paramètres statistiques sont basées sur l'hypothèse de normalité. Bootstrap traite de la non-normalité et est plus précis dans la pratique que les méthodes classiques.

Le bootstrap substitue la puissance de calcul brute des ordinateurs à une analyse théorique rigoureuse. Il s'agit d'une estimation de la distribution d'échantillonnage d'un terme d'erreur d'ensemble de données. Le bootstrapping comprend: le rééchantillonnage de l'ensemble de données un nombre spécifié de fois, le calcul de la moyenne de chaque échantillon et la recherche de l'erreur standard de la moyenne.

Le code «R» suivant illustre le concept:

Cet exemple pratique démontre l'utilité du bootstrap et estime l'erreur standard. L'erreur standard est requise pour calculer l'intervalle de confiance.

Supposons que vous ayez un ensemble de données asymétrique "a":

a<-rexp(395, rate=0.1)          # Create skewed data

visualisation de l'ensemble de données asymétrique

plot(a,type="l")                # Scatter plot of the skewed data
boxplot(a,type="l")             # Box plot of the skewed data
hist(a)                         # Histogram plot of the skewed data

Exécutez la procédure d'amorçage:

n <- length(a)                  # the number of bootstrap samples should equal the original data set
    xbarstar <- c()                 # Declare the empty set “xbarstar” variable which will be holding the mean of every bootstrap iteration
    for (i in 1:1000) {             # Perform 1000 bootstrap iteration
        boot.samp <- sample(a, n, replace=TRUE) #”Sample” generates the same number of elements as the original data set
    xbarstar[i] <- mean(boot.samp)} # “xbarstar” variable  collects 1000 averages of the original data set
    ## 
    plot(xbarstar)                  # Scatter plot of the bootstrapped data
    boxplot(xbarstar)               # Box plot of the bootstrapped data
    hist(xbarstar)                  # Histogram plot of the bootstrapped data

    meanOfMeans <- mean(xbarstar)
    standardError <- sd(xbarstar)    # the standard error is the standard deviation of the mean of means
    confidenceIntervalAboveTheMean <- meanOfMeans + 1.96 * standardError # for 2 standard deviation above the mean 
    confidenceIntervalBelowTheMean <- meanOfMeans - 1.96 * standardError # for 2 standard deviation above the mean 
    confidenceInterval <- confidenceIntervalAboveTheMean + confidenceIntervalBelowTheMean
    confidenceInterval
Ragy Isaac
la source
1
Merci Ragy pour l'exemple. Cependant, d'après ce que je peux voir, votre réponse ne couvrait pas le calcul des intervalles de prédiction à l'aide du bootstrap. Comme je l'ai dit dans ma réponse, je comprends déjà comment utiliser le bootstrap pour calculer les intervalles de confiance - ce que votre code semble faire.
Max