2016-08-03 112 views
1

我想从regsubsets获取重要的变量(列名)。我喜欢逐一获取我可以分析的重要变量。这里是程序列名不同于适合regsubsets以选择最佳变量

library(leaps) 
library(ISLR) 
data(Hitters) 
reg_fit=regsubsets(Salary~., data = Hitters, nvmax = 10, method = "forward") 

的问题是在reg_fit列名不相同数据的击球手。

这里是从原始数据的输出:

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" 

注Legaue改变为LeagueN,司改变为DivisionW。任何想法,如果这是一个错误,或者有一种简单的方法从reg_fit获取列名称?

回答

1

这不是一个错误。它将分类变量分解为指标变量,以便它们可以用于回归中,并且名称变化是如何让您知道将哪个级别分配给指标的正级别。

如果你想避免这种情况,你可以通过预处理来完成。以下是适用于可变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) 

在上面的例子我创建了数字的可变其等于1时League等于N和使用的取代的Leaguefactor可变版本。

在二元因子变量的情况下,您可以在运行回归后更改结果对象中的标签,但是如果您有超过2个级别,则这不起作用。对于多级因子变量,您需要在原始数据集中创建多个指标变量,就像我在上面的示例中所做的那样。

+1

我会接受这个答案。您对将分类列进行预处理以获得相同列名的建议很好。不过,我宁愿使用model.matrix,因为它没有麻烦。感谢兄弟为解决方案。 –

+0

@MaheshYadav乐于助人。是的'model.matrix'很棒。 –