【发布时间】:2021-02-27 03:55:28
【问题描述】:
我正在尝试在 R 中运行 bestglm 函数以进行子集选择,如果我在函数中使用超过 15 个变量,则运行会立即失败。我在下面附上了一些示例代码(我知道这些模型对于这个数据集有太多的变量,我只是在这里包括这些模型作为示例):
cars.df = data.frame(mtcars)
cars.df
resp.var = cars.df$mpg
ind.matrix.15 = model.matrix(mpg ~ disp + hp + drat + wt + qsec + vs + am + gear + carb + disp:wt + drat:wt + qsec:am + gear:hp + cyl:disp + drat:gear, data = cars.df)[, -1]
matrix.xy.15 = data.frame(ind.matrix.15, y = as.matrix(resp.var))
bestglm(Xy = matrix.xy.15, family = gaussian(link = 'log'), nvmax = 15)
ind.matrix.16 = model.matrix(mpg ~ disp + hp + drat + wt + qsec + vs + am + gear + carb + disp:wt + drat:wt + qsec:am + gear:hp + cyl:disp + drat:gear + disp:hp, data = cars.df)[, -1]
matrix.xy.16 = data.frame(ind.matrix.16, y = as.matrix(resp.var))
bestglm(Xy = matrix.xy.16, family = gaussian(link = 'log'), nvmax = 16)
第一个 bestglm 函数运行良好,但是当我为总共 16 个功能添加一个附加变量时,第二个 bestglm 函数立即产生以下错误消息:p = 16. must be <= 15 for GLM.
将method 参数更改为更简单的算法,例如backward,而不是默认的exhaustive,并不会消除错误。
这只是 bestglm 函数的限制,还是我可以更改一个参数以允许超过 15 个功能。
【问题讨论】:
-
错误消息表明您可以将 15 个术语放入
bestglm(here)。我想知道RequireFullEnumerationQ会发生什么变化... -
有趣,感谢您链接代码。如果
family = gaussian、没有超过 2 个级别的因子和RequireFullEnumerationQ = FALSE(默认),则看起来代码默认为跳跃库。如果其中任何一个为假,那么无论method != exhaustive是否存在,该函数似乎都需要15 个或更少的变量。这是相当不幸的,但我想这只是功能的限制。
标签: r regression glm