广义相加模型(GAM)与向前逐步选择算法(基于R语言)
一、题目
(a)使用College数据集,以Outstate作为响应变量,其余作为预测变量,使用逐步回归得到一组合适的预测变量的子集。
(b)将观测数据分成训练集和测试集。在训练集上拟合广义可加模型,将Outstate作为响应变量,逐步回归得到的结果作为预测变量。画出拟合结果,解释你的发现。
(c)在测试集上评价前面得到的模型,并解释结果。
(d)如果有的话,观察哪些变量和响应变量有非线性关系。
二、向前逐步选择
导入college数据集后,先进行数据的预处理。
分类变量Private需改成数值型的0-1变量,便于线性回归。
数据集的第一列是大学名称,对于预测Outstate没有帮助,所以删去。(下列代码基于R语言)
library(data.table)
college = fread("C:\\Users\\39291\\Downloads\\College.csv", data.table = FALSE)#导入数据
college$Private = as.numeric(as.factor(college$Private)) - 1#将分类变量Private的Yes改成1,No改成0
college = college[, -1]#删去数据框的第一列
进行向前逐步回归,也就是根据RSS最低原则,不断增加预测变量的个数,得到不同预测变量个数的RSS较低的模型。
画出RSS与预测变量的关系,显然随着预测变量的增加,RSS单调减少。
画出调整后R2、Cp、BIC与模型预测变量个数的关系,并根据这三个准则选取最优模型。
library(leaps)
regfit.fwd = regsubsets(Outstate ~ ., data = college, nvmax = 18, method = "forward") #向前逐步回归
par(mfrow = c(2, 2)) #告诉R:我要画一张带有4张子图的图片,每行两张图,共两列。
plot(summary(regfit.fwd)$rss, xlab = "Number of Variables", ylab = "RSS", type = "l") #画出RSS与变量个数的关系图
plot(summary(regfit.fwd)$adjr2, xlab = "Number of Variables", ylab = "Adjusted RSq",
type = "l") #画出调整后R2与变量个数的曲线图
which.max(summary(regfit.fwd)$adjr2) #输出调整后R2准则下的最优