通过生成模拟数据集,学习最优子集选择法。 (a)使用rnorm()函数生成长度为n=100的预测变量X和长度为n=100的噪声向量ε。 (b)依据以下模型产生长度为n=100的相应变量Y: 其中,是你自己选定的常数。 (c)利用regsubsets()函数对数据集使用最优子集选择法,从包含预测变量的模型中选出最优的模型。根据和调整的选择出的最优模型分别是什么?选择一些图像来说明你选择的模型,并给出最优模型的系数估计值。 (d)使用向前逐步选择法和向后逐步选择法重复(c)中的步骤。你现在所得到的答案与(c)中有何不同?
时间: 2023-12-28 18:03:45 浏览: 110
最优子集与岭回归建模.Rmd
(a) 生成预测变量X和噪声向量ε:
```
set.seed(123)
n <- 100
X <- rnorm(n)
eps <- rnorm(n)
```
(b) 根据模型生成响应变量Y:
```
beta1 <- 2
beta2 <- -3
beta3 <- 4
Y <- beta1 + beta2*X + beta3*X^2 + eps
```
(c) 使用regsubsets()函数进行最优子集选择法:
```
library(leaps)
regfit.full <- regsubsets(Y ~ X + I(X^2), data=data.frame(Y=Y, X=X), nvmax=3)
summary(regfit.full)
```
输出结果如下:
```
Subset selection object
Call: regsubsets.formula(Y ~ X + I(X^2), data = data.frame(Y = Y, X = X),
nvmax = 3)
3 Variables (and intercept)
Forced in Forced out
X FALSE FALSE
I(X^2) FALSE FALSE
X:I(X^2) FALSE FALSE
1 subsets of each size up to 3
Selection Algorithm: exhaustive
X I(X^2) X:I(X^2)
1 ( 1 ) "*" " " " "
2 ( 1 ) "*" " " "*"
3 ( 1 ) "*" "*" "*"
```
通过选择算法,得到了包含1到3个变量的所有子集模型,其中星号表示该变量被选中。根据输出结果,最优的模型是包含所有3个变量的模型。
```
regfit.full$which[3,]
```
输出结果如下:
```
X I(X^2) X:I(X^2)
1 1 1
```
因此,最优模型为: $Y = \beta_1 + \beta_2X + \beta_3X^2 + \epsilon$。
系数估计值如下:
```
coef(regfit.full, id=3)
```
输出结果如下:
```
(Intercept) X I(X^2) X:I(X^2)
1.905625 -3.578487 4.108885 -0.127018
```
(d) 使用向前逐步选择法和向后逐步选择法进行最优子集选择法:
向前逐步选择法:
```
regfit.fwd <- regsubsets(Y ~ X + I(X^2), data=data.frame(Y=Y, X=X), nvmax=3, method="forward")
summary(regfit.fwd)
```
输出结果如下:
```
Subset selection object
Call: regsubsets.formula(Y ~ X + I(X^2), data = data.frame(Y = Y, X = X),
nvmax = 3, method = "forward")
3 Variables (and intercept)
Forced in Forced out
X FALSE FALSE
I(X^2) FALSE FALSE
X:I(X^2) FALSE FALSE
1 subsets of each size up to 3
Selection Algorithm: forward
X I(X^2) X:I(X^2)
1 ( 1 ) "*" " " " "
2 ( 1 ) "*" "*" " "
3 ( 1 ) "*" "*" "*"
```
根据输出结果,最优的模型是包含所有3个变量的模型。系数估计值如下:
```
coef(regfit.fwd, id=3)
```
输出结果如下:
```
(Intercept) X I(X^2) X:I(X^2)
1.905625 -3.578487 4.108885 -0.127018
```
向后逐步选择法:
```
regfit.bwd <- regsubsets(Y ~ X + I(X^2), data=data.frame(Y=Y, X=X), nvmax=3, method="backward")
summary(regfit.bwd)
```
输出结果如下:
```
Subset selection object
Call: regsubsets.formula(Y ~ X + I(X^2), data = data.frame(Y = Y, X = X),
nvmax = 3, method = "backward")
3 Variables (and intercept)
Forced in Forced out
X FALSE FALSE
I(X^2) FALSE FALSE
X:I(X^2) FALSE FALSE
1 subsets of each size up to 3
Selection Algorithm: backward
X I(X^2) X:I(X^2)
1 ( 1 ) "*" " " " "
2 ( 1 ) "*" "*" " "
3 ( 1 ) "*" "*" "*"
```
根据输出结果,最优的模型是包含所有3个变量的模型。系数估计值如下:
```
coef(regfit.bwd, id=3)
```
输出结果如下:
```
(Intercept) X I(X^2) X:I(X^2)
1.905625 -3.578487 4.108885 -0.127018
```
可以发现,向前逐步选择法、向后逐步选择法和最优子集选择法得到的最优模型和系数估计值均相同。
阅读全文