使用所有可能的子集选择和自动选择技术进行回归选择

机器算法验证 r 回归 模型选择 逐步回归
2022-03-22 11:53:40

给定数据集cars.txt,我们希望使用变量马力、长度、行李箱、掉头、轴距和宽度为中档价格制定一个好的回归模型。两个都:

  1. 使用所有可能的子集选择,以及
  2. 使用自动选择技术。

对于第一部分,我们在 R 中进行:

cars <- read.table(file=file.choose(), header=TRUE)
names(cars)

#regression
attach(cars)
leap <- leaps(x=cbind(cars$Horsepower, cars$Length, cars$Luggage, cars$Uturn, cars$Wheelbase, cars$Width), 
y=cars$MidrangePrice, method=c("r2"), nbest=3)
combine <- cbind(leap$which,leap$size, leap$r2)
n <- length(leap$size)
dimnames(combine) <- list(1:n,c("horsep","length","Luggage","Uturn","Wheelbase","Width","size","r2"))
round(combine, digits=3)

leap.cp <- leaps(x=cbind(cars$Horsepower, cars$Length, cars$Luggage, cars$Uturn, cars$Wheelbase, cars$Width), 
y=cars$MidrangePrice, nbest=3)
combine.cp <- cbind(leap.cp$which,leap.cp$size, leap.cp$Cp)
dimnames(combine.cp) <- list(1:n,c("horsep","length","Luggage","Uturn","Wheelbase","Width","size","cp"))
round(combine.cp, digits=3)
plot(leap.cp$size, leap.cp$Cp, ylim=c(1,7))
abline(a=0, b=1)

我的解释是否正确,即最合适的模型是具有 4 个参数(三个变量马力、轴距和宽度)的模型,因为它具有最低的 Mallows 的 Cp 值?

对于第二部分,我们可以在前向、后向或逐步选择模型之间进行选择:

#stepwise selection methods
#forward
slm.foward <- step(lm(cars$MidrangePrice ~1, data=cars), scope=~cars$Horsepower + cars$Length + cars$Luggage + cars$Uturn + cars$Wheelbase + cars$Horsepower+ cars$Width, direction="forward")

#backward
reg.lm1 <- lm(cars$MidrangePrice ~ cars$Horsepower + cars$Length + cars$Luggage + cars$Uturn + cars$Wheelbase + cars$Horsepower + cars$Width)
slm.backward <- step(reg.lm1, direction="backward")


#stepwise
reg.lm1 <- lm(cars$MidrangePrice ~ cars$Horsepower + cars$Length + cars$Luggage + cars$Uturn + cars$Wheelbase + cars$Horsepower + cars$Width)
slm.stepwise <- step(reg.lm1,direction="both")

我如何解释我从这个 R 代码中得到的结果?

2个回答

在没有惩罚的情况下逐步回归充满了很多困难,以至于我很惊讶人们仍在使用它。网络有一长串问题,首先是找到“正确”模型的可能性极低。

对于第二部分,您必须将输出解释为迈向最终模型的步骤。

例如,在前向情况下,您从 Start 开始:AIC=377.95 cars$MidrangePrice ~ 1

              Df Sum of Sq    RSS    AIC
+ cars$Horsepower  1    4979.3 3054.9 300.66
+ cars$Wheelbase   1    3172.3 4862.0 338.76
+ cars$Length      1    2448.8 5585.4 350.14
+ cars$Width       1    1969.2 6065.0 356.89
+ cars$Uturn       1    1450.2 6584.0 363.63
+ cars$Luggage     1    1079.6 6954.7 368.12
<none>                         8034.2 377.95

您当前的模型仅考虑常量cars$MidrangePrice ~ 1

表中的每一行表明,如果您添加该变量(例如,马力),您将获得以下结果Sq RSS(残差平方和)和AIC(Akaike 信息标准)。

在其他情况下,您必须以相同的方式阅读结果。

希望这可以帮助 :)