我试图从包含N个不等矩阵的列表中创建一个矩阵... 这样做的原因是使R个独立的引导程序样本。 在下面的示例中,您可以找到例如2家公司,其中1家拥有10个,而1家拥有5个观察。
数据:
set.seed(7)
Time <- c(10,5)
xv <- matrix(c(rnorm(10,5,2), rnorm(5,20,1), rnorm(10,5,2), rnorm(5,20,1)), ncol=2);
y <- matrix( c(rnorm(10,5,2), rnorm(5,20,1)));
z <- matrix(c(rnorm(10,5,2), rnorm(5,20,1), rnorm(10,5,2), rnorm(5,20,1)), ncol=2)
# create data frame of input variables which helps
# to conduct the rowise bootstrapping
data <- data.frame (y = y, xv = xv, z = z);
rows <- dim(data)[1];
cols <- dim(data)[2];
# create the index to sample from the different panels
cumTime <- c(0, cumsum (Time));
index <- findInterval (seq (1:rows), cumTime, left.open = TRUE);
# draw R individual bootstrap samples
bootList <- replicate(R = 5, list(), simplify=F);
bootList <- lapply (bootList, function(x) by (data, INDICES = index, FUN = function(x) dplyr::sample_n (tbl = x, size = dim(x)[1], replace = T)));
---------- 取消列表 ---------
目前,我尝试这样做是错误的:
列表中只有1个条目的示例:
matrix(unlist(bootList[[1]], recursive = T), ncol = cols)
所需的输出仅为
bootList[[1]]
作为矩阵。
您是否知道如何执行此操作,以及在可能的情况下是否合理有效?
然后不幸的是,以缓慢的MLE估计来处理矩阵...
答案 0 :(得分:0)
我为您找到了解决方案。根据我的收集,您有一个数据框,其中包含所有公司的所有观察结果,可能会有不同的面板长度。因此,您希望每个公司都拥有与原始面板长度相同大小的Bootstap示例。 您只需要添加公司指标
data$company = c(rep(1, 10), rep(2, 5)) # this could even be a factor.
L1 = split(data, data$company)
L2 = lapply(L1, FUN = function(s) s[sample(x = 1:nrow(s), size = nrow(s), replace = TRUE),] )
如果您想获得明智的引导采样,请在此处停止。如果您想单独估算
bootdata = do.call(rbind, L2)
最良好的祝愿
蒂姆