我正试图从regsubset中获取重要变量(列名)。我喜欢一个接一个地得到我可以分析的重要变量。这是程序
library(leaps)
library(ISLR)
data(Hitters)
reg_fit=regsubsets(Salary~., data = Hitters, nvmax = 10, method = "forward")
问题是reg_fit中的列名与数据Hiters中的列名不同。
以下是原始数据的输出:
names(Hitters)
## [1] "AtBat" "Hits" "HmRun" "Runs" "RBI"
## [6] "Walks" "Years" "CAtBat" "CHits" "CHmRun"
## [11] "CRuns" "CRBI" "CWalks" "League" "Division"
## [16] "PutOuts" "Assists" "Errors" "Salary" "NewLeague"
以下是从reg_fit:中提取的输出
colnames(summary(reg_fit)$which)
## [1] "(Intercept)" "AtBat" "Hits" "HmRun" "Runs"
## [6] "RBI" "Walks" "Years" "CAtBat" "CHits"
## [11] "CHmRun" "CRuns" "CRBI" "CWalks" "LeagueN"
## [16] "DivisionW" "PutOuts" "Assists" "Errors" "NewLeagueN"
注:联赛改为联赛N,赛区改为赛区W。有什么想法吗,如果这是一个bug,或者有没有一种简单的方法可以从reg_fit中获取列名?
这不是一个bug。它将分类变量分解为指标变量,以便它们可以在回归中使用,而名称更改是如何让你知道指标的正水平被分配给哪个级别的。
如果你想避免这种情况,你可以通过预处理来做到。以下是变量League
:的示例
League <- rep(0,322)
League[Hitters$League == "N"] <- 1
Hitters$League <- as.numeric(as.character(League))
reg_fit=regsubsets(Salary~., data = Hitters, nvmax = 10, method = "forward")
colnames(summary(reg_fit)$which)
在上面的例子中,当League
等于N
时,我创建了一个等于1的数字变量,并用它来替换League
的factor
变量版本。
在二元因子变量的情况下,您可以在运行回归后更改结果对象中的标签,但如果您有两个以上的级别,则这将不起作用。对于多类因子变量,您需要在原始数据集中创建多个指标变量,就像我在上面的示例中所做的那样。