Bloquear bootstrap de la lista de temas
Estoy tratando de implementar de manera eficiente una técnica de arranque de bloques para obtener la distribución de los coeficientes de regresión. El esquema principal es el siguiente.
Tengo un conjunto de datos de panel, y digo firme y año son los índices. Para cada iteración del bootstrap, deseo muestrear n temas con reemplazo. De este ejemplo, necesito construir un nuevo marco de datos que sea unrbind()
Apile todas las observaciones para cada sujeto muestreado, ejecute la regresión y extraiga los coeficientes. Repita para un montón de iteraciones, digamos 100.
Mis pensamientos inicialmente son dividir el marco de datos existente en una lista por tema utilizando elsplit()
mando. A partir de ahí, utilizar.
sample(unique(df1$subject),n,replace=TRUE)
para obtener la nueva lista, entonces tal vez implementarquickdf
desde elplyr
Paquete para construir un nuevo marco de datos.
Ejemplo 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
...
...