Procedura: intervalli di previsione per la regressione lineare tramite bootstrap


14

Non riesco a capire come utilizzare il bootstrap per calcolare gli intervalli di previsione per un modello di regressione lineare. Qualcuno può delineare una procedura dettagliata? Ho cercato tramite Google, ma niente ha davvero senso per me.

Capisco come utilizzare il bootstrap per il calcolo degli intervalli di confidenza per i parametri del modello.


1
Questo è discusso in dettaglio nel libro di Davison e Hinkley, Bootstrap Methods and Their Application , insieme a un algoritmo esplicito (Algorithm 6.4). Spiegano concetti, insidie ​​e dettagli più a lungo di quanto sia possibile in una risposta ragionevole qui.
Glen_b -Restate Monica

@Glen_b Grazie per il riferimento. Purtroppo non sono in un'università o in una società, quindi non ho le risorse per acquisire il libro.
Max

Può essere ordinato da Amazon; una spiegazione completa dell'algoritmo e tutte le avvertenze e i problemi associati non è proprio il tipo di cosa che puoi coprire in poche centinaia di parole o persino una risposta di una pagina.
Glen_b

1
@Glen_b Ho scritto l'algoritmo di Davison e HInkely --- ci sono diverse domande sul CV al riguardo, quindi ho pensato che valesse la pena. Tutti i commenti che hai sarebbero apprezzati. stats.stackexchange.com/questions/226565/…
Bill

Questa discussione sembra rispondere alla tua domanda: stats.stackexchange.com/questions/226565/…
user2683832

Risposte:


7

Gli intervalli di confidenza tengono conto dell'incertezza della stima. Gli intervalli di previsione aggiungono a ciò l'incertezza fondamentale. Le R predict.lmti daranno l'intervallo di predizione per un modello lineare. Da lì, tutto ciò che devi fare è eseguirlo ripetutamente su campioni avviati.

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) ,]) )

Il risultato replicateè una matrice tridimensionale ( nx 3x n.bs). La dimensione lunghezza 3 è costituita dal valore adattato per ciascun elemento di dati e dai limiti inferiore / superiore dell'intervallo di previsione del 95%.

Metodo Gary King

A seconda di ciò che vuoi, c'è un metodo interessante di King, Tomz e Wittenberg . È relativamente facile da implementare ed evita i problemi del bootstrap per determinate stime (ad esmax(Y) .).

Citerò dalla sua definizione di incertezza fondamentale qui, dal momento che è ragionevolmente bello:

Una seconda forma di variabilità, l'incertezza fondamentale rappresentata dalla componente stocastica (la distribuzione f) nell'equazione 1, deriva da innumerevoli eventi casuali come il tempo o la malattia che possono influenzare Y ma non sono inclusi in X. Anche se conoscevamo i valori esatti dei parametri (eliminando in tal modo l'incertezza di stima), l'incertezza fondamentale ci impedirebbe di prevedere Y senza errori.


3
Non sono sicuro di come costruire un intervallo di confidenza da questa matrice di intervalli di previsione n.bs.
B_Miner,

1

Il bootstrap non ha assunto alcuna conoscenza della forma della distribuzione genitore sottostante da cui proviene il campione. Le stime dei parametri statistici classici tradizionali si basano sul presupposto della normalità. Bootstrap si occupa della non normalità ed è più accurato nella pratica rispetto ai metodi classici.

Il bootstrap sostituisce la potenza di calcolo grezza dei computer con rigorose analisi teoriche. È una stima per la distribuzione campionaria di un termine di errore del set di dati. Il bootstrap include: ricampionare il set di dati per un determinato numero di volte, calcolando la media di ciascun campione e trovando l'errore standard della media.

Il seguente codice "R" dimostra il concetto:

Questo esempio pratico dimostra l'utilità del bootstrap e stima l'errore standard. L'errore standard è necessario per calcolare l'intervallo di confidenza.

Supponiamo che tu abbia un set di dati inclinato "a":

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

visualizzazione del set di dati distorto

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

Eseguire la procedura di bootstrap:

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

1
Grazie Ragy per l'esempio. Tuttavia, da quello che vedo, la tua risposta non ha riguardato il calcolo degli intervalli di previsione utilizzando bootstrap. Come ho detto nella mia risposta, ho già capito come utilizzare il bootstrap per calcolare gli intervalli di confidenza, cosa che il tuo codice sembra fare.
Max
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.