从由各个引导程序的不等矩阵组成的列表中创建一个矩阵

Create a matrix from a list consisting of unequal matrices for individual bootstraps

我试图从一个由 N 个不等矩阵组成的列表创建一个矩阵... 这样做的原因是为了使R个个体bootstrap个样本。 在下面的示例中,您可以找到例如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 估计中处理矩阵...

我为您找到了解决方案。据我所知,您有一个数据框,其中包含所有公司的所有观察结果,这些观察结果可能具有不同的面板长度。因此,您希望每个公司的 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),] ) 

如果你想要单独的 bootstap 样本,例如如果您想单独估算

bootdata = do.call(rbind, L2)

祝福,

蒂姆