当前位置 : 主页 > 网页制作 > Bootstarp >

从主题列表中阻止引导

来源:互联网 收集:自由互联 发布时间:2021-06-12
我试图有效地实现块引导技术来获得回归系数的分布.主要内容如下: 我有一个面板数据集,说公司和年份是指标.对于引导的每次迭代,我希望用替换的n个主题进行抽样.从这个样本中,我
我试图有效地实现块引导技术来获得回归系数的分布.主要内容如下:

我有一个面板数据集,说公司和年份是指标.对于引导的每次迭代,我希望用替换的n个主题进行抽样.从这个样本中,我需要构建一个新的数据帧,它是每个抽样主体的所有观察值的rbind()堆栈.使用这个新的数据框架,我可以运行回归并拉出系数.重复一次迭代,比如说100.

>每个公司都有可能被多次选择,所以我需要在每个迭代的数据集中多次包含它的数据.
>使用循环和子集方法,如下所示,似乎在计算上是繁重的.
>我的真实数据帧,n和#迭代比下面的例子大得多.

我的想法最初是使用split()命令将现有的总数据帧中断到主题列表中.从那里,使用sample(unique(df1 $subject),n,replace = TRUE)来获取新的列表,然后可能从plyr包中实现quickdf()来构造一个新的数据框架?

任何想法都赞赏!

示例慢代码:

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
...
...
这样的事情呢

myfit <- function(x, i) {
   mydata <- do.call("rbind", lapply(i, function(n) subset(Grunfeld, firm==x[n])))
   coefficients(lm(value ~ inv + capital, data = mydata))
}

firms <- unique(Grunfeld$firm)

b0 <- boot(firms, myfit, 999)
网友评论