【发布时间】:2019-04-04 20:05:04
【问题描述】:
我正在尝试使用 biglm 估计具有约 100 万个观察值和约 50,000 个变量的大型 OLS 回归。
我计划使用每个大约 100 个观察值的块来运行每个估计。我用一个小样本测试了这个策略,效果很好。
但是,在尝试为 biglm 函数定义公式时,我收到了“错误:protect():保护堆栈溢出”的真实数据。
我已经试过了:
从 R 开始 --max-ppsize=50000
设置选项(表达式 = 50000)
但错误仍然存在
我在 Windows 上工作并使用 Rstudio
# create the sample data frame (In my true case, I simply select 100 lines from the original data that contains ~1,000,000 lines)
DF <- data.frame(matrix(nrow=100,ncol=50000))
DF[,] <- rnorm(100*50000)
colnames(DF) <- c("y", paste0("x", seq(1:49999)))
# get names of covariates
my_xvars <- colnames(DF)[2:( ncol(DF) )]
# define the formula to be used in biglm
# HERE IS WHERE I GET THE ERROR :
my_f <- as.formula(paste("y~", paste(my_xvars, collapse = " + ")))
编辑 1: 我练习的最终目标是估计所有 50,000 个变量的平均效果。因此,简化模型选择更少的变量并不是我现在正在寻找的解决方案。
【问题讨论】:
-
您希望从 50,000 个变量模型中得到什么?在建模之前可能值得研究降维技术。
-
您可能想要使用 OLS 以外的其他方法,例如可以比 OLS 更好地应对许多(相关)预测变量的惩罚回归 sthda.com/english/articles/37-model-selection-essentials-in-r/…
-
我练习的最终目标确实是估计因变量中 50,000 个协变量中每一个的平均影响。因此,用更少的变量来简化模型并不是一个理想的解决方案。我已经使用大块的行来分割估计。如果有任何方法也可以使用列子集来分离估计,然后能够恢复对每个变量的影响的无偏估计,那就太棒了,但是我还找不到类似的东西。
-
这似乎无效,因为每个变量的系数还取决于模型中的其他变量。因此,与所有变量的一个模型的平均系数相比,2 个不同模型的平均系数可能会有很大差异。
-
@igoR87 你是绝对正确的,特征空间分区似乎比样本空间分区复杂得多。我从一个杜克大学的学生那里找到了下面的论文,该论文为这类问题提出了一套解决方案。但是,在尝试实现(和理解)类似的东西之前,我希望也许已经有一个更容易获得的解决方案dukespace.lib.duke.edu/dspace/bitstream/handle/10161/12912/…