Zablokuj ładowanie z listy tematów

Próbuję efektywnie zaimplementować technikę bootstrapu bloku, aby uzyskać rozkład współczynników regresji. Główny zarys jest następujący.

Mam zestaw danych panelu i powiedzmy, że firmy i rok są indeksami. Dla każdej iteracji bootstrapu chcę wypróbować n przedmiotów z wymianą. Z tego przykładu muszę skonstruować nową ramkę danych, która jestrbind() stos wszystkich obserwacji dla każdego badanego podmiotu, uruchom regresję i wyciągnij współczynniki. Powtórz to dla kilku iteracji, powiedzmy 100.

Każda firma może być potencjalnie wybrana wiele razy, więc muszę uwzględnić ją wielokrotnie w zestawie danych każdej iteracji.Stosowanie podejścia pętli i podzbioru, jak poniżej, wydaje się uciążliwe obliczeniowo.Zauważ, że dla mojej rzeczywistej ramki danych, n, a iteracje liczbowe są znacznie większe niż w przykładzie poniżej.

Moje myśli początkowo mają przełamać istniejącą ramkę danych na listę według tematu za pomocąsplit() dowództwo. Stamtąd użyj

sample(unique(df1$subject),n,replace=TRUE)

aby uzyskać nową listę, a może zaimplementowaćquickdf zplyr pakiet do skonstruowania nowej ramki danych.

Przykład wolnego kodu:

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
...
...

questionAnswers(5)

yourAnswerToTheQuestion