Заблокировать начальную загрузку из списка тем

Я пытаюсь эффективно реализовать метод блочной начальной загрузки, чтобы получить распределение коэффициентов регрессии. Основная схема следующая.

У меня есть набор панельных данных, и я говорю, что фирма и год являются индексами. Для каждой итерации бутстрапа я хочу отобрать n предметов с заменой. Из этой выборки мне нужно построить новый фрейм данных, который представляет собой rbind()стек всех наблюдений для каждого включенного в выборку субъекта, запустить регрессию и извлечь коэффициенты. Повторите несколько итераций, скажем, 100.

  • Каждая фирма потенциально может быть выбрана несколько раз,поэтому мне нужно включать данные несколько раз в набор данных каждой итерации.
  • Использование цикла и подмножества, как показано ниже, кажется обременительным с вычислительной точки зрения.
  • Обратите внимание, что для моего реального фрейма данных n и количество итераций намного больше, чем в приведенном ниже примере.

Мои мысли изначально состоят в том, чтобы разбить существующий фрейм данных на список по темам с помощью команды split(). Оттуда используйте

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

чтобы получить новый список, затем, возможно, реализовать quickdfиз пакета plyrдля создания нового фрейма данных.

Пример медленного кода:

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
...
...
11
задан lmo 21 March 2018 в 20:56
поделиться