Bloquear bootstrap da lista de assunto

Eu estou tentando implementar com eficiência uma técnica de bootstrap de bloco para obter a distribuição dos coeficientes de regressão. O esboço principal é o seguinte.

Eu tenho um conjunto de dados em painel e digo firma e ano são os índices. Para cada iteração do bootstrap, desejo amostrar n assuntos com substituição. Neste exemplo, preciso construir um novo quadro de dados que seja umrbind() pilha de todas as observações para cada sujeito da amostra, execute a regressão e retire os coeficientes. Repita para um monte de iterações, digamos 100.

Cada empresa pode ser potencialmente selecionada várias vezes, portanto, preciso incluir os dados várias vezes no conjunto de dados de cada iteração.Usando uma abordagem de loop e subconjunto, como abaixo, parece computacionalmente oneroso.Note que para o meu quadro de dados real, n e as iterações de números são muito maiores que o exemplo abaixo.

Meus pensamentos inicialmente são para quebrar o quadro de dados existente em uma lista por assunto usando osplit() comando. De lá, use

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

para obter a nova lista, então talvez implementarquickdf deplyr pacote para construir um novo quadro de dados.

Exemplo de código lento:

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