练习1

本题中我们将创建一些模拟数据,并基于模拟数据进行一些线性回归模型拟合。为确保结果的一致性,请在模拟开始之前设置随机数种子set.seed(1)

  1. 使用 rnorm() 函数创建一个包含100个来自\(N(0,1)\)分布的观测值的向量\(\boldsymbol{x}\),即特征\(\boldsymbol{X}\)

  2. 使用 rnorm() 函数创建一个包含100个来自\(N(0,0.25)\)分布的观测值的向量\(\boldsymbol{\epsilon}\)

  3. 基于\(\boldsymbol{x}\)\(\boldsymbol{\epsilon}\),根据模型\(Y = -1 + 0.5\boldsymbol{x} + ϵ\)生成向量\(\boldsymbol{y}\);向量\(\boldsymbol{y}\)的长度是多少,线性模型的\(\beta_0\)\(\beta_1\)的值分别是多少;

  4. 画出\(\boldsymbol{x},\boldsymbol{y}\)的散点图并描述你所观察到的内容;

  5. 使用最小二乘法用\(\boldsymbol{y}\)做响应变量对\(\boldsymbol{x}\)进行回归,评价估计得到的模型;比较最小二乘估计\(\hat{\beta_0}\)\(\hat{\beta}_1\)与真实的\(\beta_0\)\(\beta_1\)

  6. 在前面获得的散点图上绘制最小二乘曲线和真实回归曲线,注意使用不同的颜色进行区分,可以使用legend()命令创建图例;

  7. \(\boldsymbol{y}\)做对\(\boldsymbol{x}\)\(\boldsymbol{x}^2\)做多项式回归,有证据表明二次项改善了模型拟合效果吗,给出你的解释;

  8. 改变数据生成过程,使数据中的噪音减少,但响应变量\(\boldsymbol{y}\)的生成模型保持不变,描述你的结果(可以通过减小生成误差项\(\epsilon\)的正态分布的方差来实现);

  9. 改变数据生成过程,使数据中的噪音增加,但响应变量\(\boldsymbol{y}\)的生成模型保持不变,描述你的结果(可以通过增大生成误差项\(\epsilon\)的正态分布的方差来实现)

练习2

LASSO可以对给定模型进行正则化和变量选择,它可以根据惩罚项的大小将不太重要的特征的系数压缩为零,从而为我们筛选出一个更简洁的模型。在接下来的练习中,我们将使用glmnet包在R中实现LASSO回归。

  1. 加载lars包和diabetes数据集,这个数据集中包含了个体级别的糖尿病患者病情发展数据;加载glmnet包用于实现LASSO。

  2. 该数据集包含三个矩阵:\(\boldsymbol{X}\)\(\boldsymbol{X}_2\)\(\boldsymbol{y}\)\(\boldsymbol{X}\)是一个较小的特征集合,\(\boldsymbol{X}_2\)是一个具有二次项和交互项的完整特征集合;\(\boldsymbol{y}\)是响应变量,它是对糖尿病患者病情发展程度的定量测量。首先对每个特征与响应变量的关系进行可视化,即分别生成\(\boldsymbol{y}\)\(\boldsymbol{X}\)中每个特征的散点图并绘制相应的拟合曲线,可以利用par(mfrow=c(,))配合for循环自动化这个过程。

  3. 使用最小二乘估计,用\(\boldsymbol{X}\)中的所有特征对\(\boldsymbol{y}\)进行回归分析,我们将使用这个结果作为之后比较的基准。

  4. 使用glmnet函数来绘制\(\boldsymbol{X}\)的每个特征的系数相对于惩罚系数\(\lambda\)的变化路径,这个图显示了每个系数分别在哪个阶段被压缩至零。

  5. 使用cv.glmnet函数来获取交叉验证曲线并得到使得平均交叉验证误差最小的惩罚系数\(\lambda\)

  6. 使用上一小问中得到的达到最小误差的\(\lambda\)值,获得相应的\(\beta\)估计值。这时候一些系数已经被压缩到零,这显示了哪些特征可以用于解释\(\boldsymbol{y}\)的变化。

  7. 针对达到最小误差的\(\lambda\),自己编写ADMM算法求解\(\beta\)估计,并与第6问中结果进行比较。

  8. 如前所述,\(\boldsymbol{X}_2\)包含更多特征,使用普通最小二乘估计,用\(\boldsymbol{X}_2\)\(\boldsymbol{y}\)进行回归分析并评估结果。

  9. 对新模型重复第4问中的步骤。

  10. 对新模型重复第5-6问中的步骤,查看哪些系数被压缩至零。以上是在有许多候选特征时筛选重要特征的有效方法。

练习3

我们基于一个模拟数据集来展示利用交叉验证实现模型选择。

  1. 按照下列方式生成模拟数据集:
set.seed(1)
x <- rnorm(100)
y <- x-2*x^2+rnorm(100)

在这个数据集中,\(n\)是多少?\(d\)是多少?

  1. 画出\(X\)\(Y\)的散点图。对结果发表你的观点。

  2. 设置一个随机数种子,并基于下列四个模型,使用最小二乘估计,计算LOOCV误差:

  1. \(Y=\beta_0+\beta_1X+\epsilon\)
  2. \(Y=\beta_0+\beta_1X+\beta_2X^2+\epsilon\)
  3. \(Y=\beta_0+\beta_1X+\beta_2X^2+\beta_3X^3+\epsilon\)
  4. \(Y=\beta_0+\beta_1X+\beta_2X^2+\beta_3X^3+\beta_4X^4+\epsilon\)
  1. 使用另一个随机数种子重复第3步,展示你的结果。结果和第三步中的结果一样吗?为什么?

  2. 第3步中的哪个模型有着最小的LOOCV误差?这和你的预期一致吗?解释你的答案。

  3. 对于第3步中的模型,观察他们最小二乘得到的系数估计的统计显著性并描述你的发现。这些结果和交叉验证得到的结果一致吗?

提交时间

第二次作业即为本Rmd文档中所有的练习,于下周日11.2晚24点前提交以HW2+学号+姓名.html/pdf文件至Canvas。