bestglm 函数的变量数限制
Limit on the Number of Variables for bestglm Function
我正在尝试 运行 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 个功能。
正如@RomanLuštrik 所说,这是一个 hard-coded constraint in bestglm,大概是因为 15 个预测变量意味着有 2^15 = 32768 个候选模型,并且必须在某个地方停下来......据我所知当 运行 GLM 时无法绕过此约束。 (Roman 的建议 RequireFullEnumerationQ=FALSE
不起作用,因为跳跃式算法仅适用于线性模型,不适用于 GLM。)
一个可能的策略(这里没有完全探讨)是用跨越式的方式穷尽地拟合线性模型,保存大量的顶级模型(比如TopModels=1000
)然后重新评估具有您首选的方差结构的顶级模型......这在 leaps
中不能直接工作,但可以如下破解:
leaps.obj <- leaps:::leaps.setup(matrix.xy.16,y=cars.df$mpg,nvmax=16,
nbest=10000)
bb <- leaps:::leaps.exhaustive(leaps.obj, really.big=TRUE)
但我不知道(似乎需要做很多工作)才能弄清楚如何使用 log-link 高斯重新评估这些模型。
您也许可以让 glmulti
包工作(它提供了用于完整枚举的 method="h"
和用于遗传算法的 method="g"
),但到目前为止我还没有我设法克服了一些 Java 错误 ...
不幸的是,J Stat Software article describing glmulti 表明此方法具有一些相同的约束:
For performance, the Java classes encode formulas as compact bit strings. Currently two integers (32 bits each) are used for main effects, and two long integers (128 bits) are used for each category of interaction terms (factor:factor, covariate:covariate, and factor:covariate),to encode models. This means that there can be at most 32 factors and 32 covariates, and, if including interactions, at most 128 interactions of each category. The latter constraint necessitates that, if x is the number of factors and y the number of covariates:
x <16
y <16
xy <128
我正在尝试 运行 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 个功能。
正如@RomanLuštrik 所说,这是一个 hard-coded constraint in bestglm,大概是因为 15 个预测变量意味着有 2^15 = 32768 个候选模型,并且必须在某个地方停下来......据我所知当 运行 GLM 时无法绕过此约束。 (Roman 的建议 RequireFullEnumerationQ=FALSE
不起作用,因为跳跃式算法仅适用于线性模型,不适用于 GLM。)
一个可能的策略(这里没有完全探讨)是用跨越式的方式穷尽地拟合线性模型,保存大量的顶级模型(比如TopModels=1000
)然后重新评估具有您首选的方差结构的顶级模型......这在 leaps
中不能直接工作,但可以如下破解:
leaps.obj <- leaps:::leaps.setup(matrix.xy.16,y=cars.df$mpg,nvmax=16,
nbest=10000)
bb <- leaps:::leaps.exhaustive(leaps.obj, really.big=TRUE)
但我不知道(似乎需要做很多工作)才能弄清楚如何使用 log-link 高斯重新评估这些模型。
您也许可以让 glmulti
包工作(它提供了用于完整枚举的 method="h"
和用于遗传算法的 method="g"
),但到目前为止我还没有我设法克服了一些 Java 错误 ...
不幸的是,J Stat Software article describing glmulti 表明此方法具有一些相同的约束:
For performance, the Java classes encode formulas as compact bit strings. Currently two integers (32 bits each) are used for main effects, and two long integers (128 bits) are used for each category of interaction terms (factor:factor, covariate:covariate, and factor:covariate),to encode models. This means that there can be at most 32 factors and 32 covariates, and, if including interactions, at most 128 interactions of each category. The latter constraint necessitates that, if x is the number of factors and y the number of covariates:
x <16
y <16
xy <128