Таким образом, данные собираются в период с 1979: 7 по 2012: 6, следовательно, каждые 12 строк - это год, и bootstrap должен выбирать год в блоке.
Сначала мы добавим это информация к данным:
Data = GKdata
Data$year = (1:nrow(Data) - 1) %/% 12
И мы создаем функцию, которая берет список с выборочными индексами, объединяет их в data.frame и выполняет ту же функцию подгонки. Для загрузки вы не можете вернуть data.frame, поэтому мы возвращаем матрицу:
func = function(mylist,ind){
mydf = do.call(rbind,mylist[ind])
gkvar <- VAR(mydf[, c("logip", "logcpi", "gs1", "ebp")], p = 12, type = "const")
shockcol <- externalinstrument(gkvar, mydf$ff4_tc, "gs1")
ma_representation <- Phi(gkvar, 50)
irfs <- t(apply(ma_representation, 3, function(x) x %*% shockcol)) #unclear
colnames(irfs) <- names(shockcol)
irfs
}
Таким образом, мы делаем bootstrap, передавая ему список, разделенный на год. При начальной загрузке будут взяты индексы из этого списка, объединены выбранные годы в новый фрейм данных и произведена подгонка:
res = boot(split(Data,Data$year),func,100)
Мы можем проверить, правильно ли функция выполняет исходное наблюдение:
table(res$t0 == irfs)
У ваших irfs есть значения 51 x 4. Если мы посмотрим на оценки в результатах загрузки, это выровняется:
dim(res$t)
[1] 100 204
Чтобы получить 95% доверительный интервал для каждого значения или переменной, мы делаем:
boot_est= sapply(1:ncol(res$t),function(i){
boot.ci(res,index=i,type = "perc")$percent[4:5]
})
А затем создайте верхнюю и нижнюю границу, поместив их обратно в матрицу:
lb = matrix(boot_est[1,],ncol=ncol(res$t0))
ub = matrix(boot_est[2,],ncol=ncol(res$t0))
Вы можете построить, скажем, первый столбец irfs, почему-то значение ci действительно велико для первых нескольких записей:
plot(irfs[,1],ylim=c(-8,8))
lines(ub[,1])
lines(lb[,1])