Gewusst wie: Vorhersageintervalle für lineare Regression über Bootstrapping

14

Ich habe Probleme zu verstehen, wie Bootstrapping verwendet wird , um Vorhersageintervalle für ein lineares Regressionsmodell zu berechnen . Kann jemand eine schrittweise Vorgehensweise skizzieren? Ich habe über Google gesucht, aber für mich macht nichts wirklich Sinn.

Ich verstehe, wie Bootstrapping zum Berechnen von Konfidenzintervallen für die Modellparameter verwendet wird.

Max
quelle
1
Dies wird in dem Buch von Davison und Hinkley, Bootstrap Methods and Their Application , zusammen mit einem expliziten Algorithmus (Algorithmus 6.4) ausführlich erörtert . Sie erklären Konzepte, Fallstricke und Details ausführlicher, als dies in einer vernünftigen Antwort hier möglich ist.
Glen_b
@ Glen_b Danke für den Hinweis. Leider bin ich weder an einer Universität noch in einer Firma und habe daher nicht die Ressourcen, um das Buch zu erwerben.
Max
Es kann bei Amazon bestellt werden; Eine vollständige Erklärung des Algorithmus und aller damit verbundenen Vorbehalte und Probleme ist nicht wirklich die Art von Dingen, die Sie in ein paar hundert Wörtern oder sogar einer einseitigen Antwort behandeln können.
Glen_b
1
@ Glen_b Ich habe den Algorithmus von Davison und HInkely geschrieben --- es gibt mehrere Fragen im Lebenslauf dazu, deshalb dachte ich, dass es die Mühe wert war. Alle Kommentare, die Sie haben, würden geschätzt. stats.stackexchange.com/questions/226565/…
Bill
Dieser Thread scheint deine Frage zu beantworten: stats.stackexchange.com/questions/226565/…
user2683832

Antworten:

7

Konfidenzintervalle berücksichtigen die Schätzunsicherheit. Vorhersageintervalle addieren dazu die grundsätzliche Unsicherheit. R predict.lmgibt Ihnen das Vorhersageintervall für ein lineares Modell. Von dort aus müssen Sie es nur noch wiederholt auf bootstrapten Samples ausführen.

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

Das Ergebnis von replicateist ein 3-dimensionales Array ( nx 3x n.bs). Die Dimension der Länge 3 besteht aus dem angepassten Wert für jedes Datenelement und den Unter- / Obergrenzen des Vorhersageintervalls von 95%.

Gary King-Methode

Je nachdem , was Sie wollen, gibt es eine coole Methode von König, tomz und Wittenberg . Es ist relativ einfach zu implementieren und vermeidet die Probleme beim Bootstrapping für bestimmte Schätzungen (z max(Y). B. ).

Ich zitiere hier aus seiner Definition der fundamentalen Unsicherheit, da es einigermaßen schön ist:

Eine zweite Form der Variabilität, die fundamentale Unsicherheit, die durch die stochastische Komponente (die Verteilung f) in Gleichung 1 dargestellt wird, resultiert aus unzähligen Zufallsereignissen wie Wetter oder Krankheit, die Y beeinflussen können, aber nicht in X enthalten sind Wir kannten die genauen Werte der Parameter (wodurch die Schätzungsunsicherheit beseitigt wurde). Eine fundamentale Unsicherheit würde uns davon abhalten, Y ohne Fehler vorherzusagen.

Ari B. Friedman
quelle
3
Nicht sicher, wie Sie ein Konfidenzintervall aus dieser Matrix von n.bs Vorhersageintervallen erstellen.
B_Miner
1

Bootstrapping setzt keine Kenntnis der Form der zugrunde liegenden übergeordneten Verteilung voraus, aus der die Stichprobe hervorgegangen ist. Herkömmliche klassische statistische Parameterschätzungen basieren auf der Normalitätsannahme. Bootstrap befasst sich mit Nicht-Normalität und ist in der Praxis genauer als die klassischen Methoden.

Bootstrapping ersetzt die rohe Rechenleistung von Computern durch eine strenge theoretische Analyse. Dies ist eine Schätzung für die Stichprobenverteilung eines Datensatzfehlerterms. Das Bootstrapping umfasst Folgendes: Eine bestimmte Anzahl von Neuabtastungen des Datensatzes, die Berechnung des Mittelwerts aus jeder Stichprobe und die Ermittlung des Standardfehlers des Mittelwerts.

Der folgende "R" Code demonstriert das Konzept:

Dieses praktische Beispiel demonstriert die Nützlichkeit von Bootstrapping und schätzt den Standardfehler. Der Standardfehler wird zur Berechnung des Konfidenzintervalls benötigt.

Nehmen wir an, Sie haben einen verzerrten Datensatz "a":

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

Visualisierung des verdrehten Datensatzes

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

Führen Sie das Bootstrapping-Verfahren durch:

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
quelle
1
Danke Ragy für das Beispiel. Wie ich jedoch sehen kann, deckte Ihre Antwort nicht die Berechnung von Vorhersageintervallen mit Bootstrap ab. Wie ich in meiner Antwort sagte, verstehe ich bereits, wie man mit Bootstrapping Konfidenzintervalle berechnet - was Ihr Code zu tun scheint.
Max