Blockiere Bootstrap von der Betreffliste
Ich versuche, eine Block-Bootstrap-Technik effizient zu implementieren, um die Verteilung der Regressionskoeffizienten zu erhalten. Der Hauptüberblick ist wie folgt.
Ich habe einen Panel-Datensatz und sage, Firma und Jahr sind die Indizes. Für jede Iteration des Bootstraps möchte ich n Probanden mit Ersatz testen. Aus diesem Beispiel muss ein neuer Datenrahmen erstellt werden, der einrbind()
stapeln Sie alle Beobachtungen für jedes untersuchte Subjekt, führen Sie die Regression durch und ziehen Sie die Koeffizienten heraus. Wiederholen Sie diesen Vorgang für eine Reihe von Iterationen, z. B. 100.
Meine Überlegungen sind zunächst, den vorhandenen Datenrahmen anhand des Themas in eine Liste zu unterteilensplit()
Befehl. Von dort verwenden
sample(unique(df1$subject),n,replace=TRUE)
um die neue liste zu bekommen, dann vielleicht umsetzenquickdf
von demplyr
Paket zum Erstellen eines neuen Datenrahmens.
Beispiel langsamer Code:
require(plm)
data("Grunfeld", package="plm")
firms = unique(Grunfeld$firm)
n = 10
iterations = 100
mybootresults=list()
for(j in 1:iterations){
v = sample(length(firms),n,replace=TRUE)
newdata = NULL
for(i in 1:n){
newdata = rbind(newdata,subset(Grunfeld, firm == v[i]))
}
reg1 = lm(value ~ inv + capital, data = newdata)
mybootresults[[j]] = coefficients(reg1)
}
mybootresults = as.data.frame(t(matrix(unlist(mybootresults),ncol=iterations)))
names(mybootresults) = names(reg1$coefficients)
mybootresults
(Intercept) inv capital
1 373.8591 6.981309 -0.9801547
2 370.6743 6.633642 -1.4526338
3 528.8436 6.960226 -1.1597901
4 331.6979 6.239426 -1.0349230
5 507.7339 8.924227 -2.8661479
...
...