R:使用跳跃和 glmnet 使用分类变量进行模型选择

机器算法验证 r 分类数据 模型选择 套索
2022-03-19 00:48:50

我有一个包含几个连续变量和四个分类变量的线性模型,每个变量分别由 12、3、4 和 5 个虚拟变量表示。当使用模型选择标准(例如 PRESS、Mallows Cp 和 BIC)时,每个标准返回的最佳模型仅包含每个分类变量的一些虚拟变量。据我了解,这不是一个好的做法,模型中必须包含所有或不包含任何假人。有没有办法让飞跃将每个分类变量的虚拟变量视为一个变量?

另外,可以将此方法扩展为与 glmnet 包一起使用吗?我对套索和岭回归有同样的问题。

编辑:有没有办法指定一个带有自变量子集的 lm 对象被视为一个对象?

1个回答

regsubsets(包中的一个函数leaps也执行详尽的模型搜索)可以接受未拆分为虚拟变量的分类变量,因此,将它们视为变量组,这些变量要么全部是模型的一部分,要么不是模型的一部分。

例如,如果Year有级别2013, 2014 并且Treatment有级别,C,N,O我可以运行以下语句:

> search_output<-regsubsets(y~Year+Treatment,data=stats_df, method="exhaustive")

输出:

Subset selection object
Call: regsubsets.formula(mu_ln ~ Year + Treatment, data = SS_stats_df, 
    nbest = 1, method = "exhaustive")
3 Variables  (and intercept)
           Forced in Forced out
Year2014       FALSE      FALSE
TreatmentN     FALSE      FALSE
TreatmentO     FALSE      FALSE
1 subsets of each size up to 3
Selection Algorithm: exhaustive

> summary(search_output)$which
  (Intercept) Year2014 TreatmentN TreatmentO
1        TRUE    FALSE       TRUE      FALSE
2        TRUE    FALSE       TRUE       TRUE
3        TRUE     TRUE       TRUE       TRUE

当遇到同样的问题时,我发现这篇文章非常有帮助(我的回答基本上是相关部分的缩写版本): http ://rstudio-pubs-static.s3.amazonaws.com/2897_9220b21cfc0c43a396ff9abf122bb351.html

对于重新编码或转换为因子或重命名因子,这些帖子很有帮助: https ://stackoverflow.com/questions/5372896/recoding-variables-with-r http://www.cookbook-r.com/Manipulating_data/Recoding_data/