我试图使用R包leaps来运行所有可能的回归模型组合 - 所有可能的大小 - 在单个因变量和大于50个可能的预测变量上.每个变量是大约50个数值的向量.
这是我尝试过没有成功的:
vars <- c("var1", "var2", "var3", ... , "var60")
xs <- as.formula(paste("yvar ~ ", paste(vars, collapse="+")))
model1 <- regsubsets(x=xs, y=yvar, really.big=TRUE,
method="exhaustive", data=data)
summary(model1)
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
Warning message:
In leaps.setup(x, y, wt = wt, nbest = nbest, nvmax = nvmax, force.in = force.in,:
15 linear dependencies found
Run Code Online (Sandbox Code Playgroud)
这里有几个问题,你正在尝试做什么,一些计算,一些统计.评论中已经提到了一些,但我认为将它们汇总到一个答案中是件好事.
首先,有50个可能的预测变量,有2 ^ 50美元可能的模型(当用基数10表示时是16位数):
> 2^50
[1] 1.1259e+15
Run Code Online (Sandbox Code Playgroud)
虽然算法中有一些不错的快捷方式,但每个可能的模型仍然需要一些时间来计算(以及一些存储结果的内存).如果我们假设您的计算机每秒可以计算100,000个模型,那么完成它只需要356年以上(假设您的计算机没有开始交换内存以保留所有结果,这确实会减慢速度):
> 2^50/100000/60/60/24/365.24
[1] 356.7859
Run Code Online (Sandbox Code Playgroud)
因此,我建议坚持使用"最佳"模型,而不是试图适应所有可能的模型.
另一个问题(导致警告信息的是)如果你只有50个观察值("每个变量是一个大约50个数值的向量")那么你可以唯一估计的绝对最大斜率数(假设你也是拟合截距是49,但是你试图在最完整的模型中拟合50个斜率,因此所涉及的矩阵保证是奇异的.即使限制为49个预测变量也不允许估计误差方差.一个常见的经验法则表明,您应该尝试为每10个观测值拟合不超过1个预测因子,以便对坡度和标准误差进行合理估计,这意味着您实际上应该只选择5个预测模型(如果您确实有50个观察,"近似"
从最佳子集回归中学习的最好的事情不是"最佳"模型,而是很少有"最佳"模型,并且几个模型可能具有类似的良好属性.更好的方法可能是使用Lasso/LARS样式拟合(取决于您真正想要回答的问题).
一些未来的编程技巧:
了解y ~ .指定模型的方法,这可能使您无需担心使用paste和as.formula.
请参阅fortune(77)参考数据名称.