Nur eine andere Variante, die etwas simpel ist, aber ich denke, die Nachricht zu übermitteln, ohne die Bibliothek explizit zu verwenden boot, was einige Leute mit der verwendeten Syntax verwirren kann.
Wir haben ein lineares Modell: ,y=Xβ+ϵϵ∼N(0,σ2)
Das Folgende ist ein parametrischer Bootstrap für dieses lineare Modell. Das bedeutet, dass wir unsere Originaldaten nicht erneut abtasten, sondern tatsächlich neue Daten aus unserem angepassten Modell generieren. Zusätzlich nehmen wir an, dass die Bootstrap-Verteilung des Regressionskoeffizienten symmetrisch und translatorisch invariant ist. (Sehr grob gesagt, dass wir die Achse davon bewegen können, indem wir ihre Eigenschaften beeinflussen.) Die Idee dahinter ist, dass die Schwankungen in den 'auf und daher bei genügend Proben eine gute Annäherung an die wahre Verteilung liefern sollten von 's. Wie zuvor testen wir erneut und definieren unsere p-Werte alsβ ϵ β H 0 : 0 = β j βββϵβH0:0=βj"die Wahrscheinlichkeit, dass bei einer Nullhypothese für die Wahrscheinlichkeitsverteilung der Daten das Ergebnis so extrem oder extremer als das beobachtete Ergebnis ist" (wobei die beobachteten Ergebnisse in diesem Fall die vonuns erhaltenenfür unser Originalmodell). Also los geht's:β
# 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))
Wie bereits erwähnt, ist die ganze Idee, dass Sie die Bootstrap-Verteilung von 's annähernd ihrer wahren haben. (Dieser Code ist eindeutig auf Geschwindigkeit, aber auf Lesbarkeit optimiert. :))β