本文主要是介绍R语言ISLR工资数据进行多项式回归和样条回归分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
执行多项式回归使用age
预测wage
。使用交叉验证为多项式选择最佳次数。选择了什么程度,这与使用ANOVA
进行假设检验的结果相比如何?对所得多项式拟合数据进行绘图。
最近我们被客户要求撰写关于回归的研究报告,包括一些图形和统计输出。加载工资数据集。保留所有交叉验证误差的数组。我们执行K=10 K倍交叉验证。
相关视频:非线性模型原理与R语言多项式回归、局部平滑样条、 广义相加模型GAM分析
非线性模型原理与R语言多项式回归、局部平滑样条、 广义相加模型GAM分析
,时长05:41
rm(list = ls())
set.seed(1)# 测试误差
cv.MSE <- NA# 循环遍历年龄
for (i in 1:15) {glm.fit <- glm(wage ~ poly(age, i), data = Wage)# 我们使用cv.glm的交叉验证并保留cv误差cv.MSE[i] <- cv.glm(Wage, glm.fit, K = 10)$delta[1]
}
# 检查结果对象
cv.MSE
## [1] 1675.837 1601.012 1598.801 1594.217 1594.625 1594.888 1595.500
## [8] 1595.436 1596.335 1595.835 1595.970 1597.971 1598.713 1599.253
## [15] 1595.332
我们通过绘制type = "b"
点与线之间的关系图来说明结果。
# 用线图说明结果
plot( x = 1:15, y = cv.MSE, xlab = "power of age", ylab = "CV error", type = "b", pch = 19, lwd = 2, bty = "n", ylim = c( min(cv.MSE) - sd(cv.MSE), max(cv.MSE) + sd(cv.MSE) ) )# 水平线
abline(h = min(cv.MSE) + sd(cv.MSE) , lty = "dotted")# 最小值
points( x = which.min(cv.MSE), y = min(cv.MSE), col = "red", pch = "X", cex = 1.5 )
我们再次以较高的年龄权重对模型进行拟合以进行方差分析。
## Analysis of Deviance Table
##
## Model 1: wage ~ poly(age, a)
## Model 2: wage ~ poly(age, a)
## Model 3: wage ~ poly(age, a)
## Model 4: wage ~ poly(age, a)
## Model 5: wage ~ poly(age, a)
## Model 6: wage ~ poly(age, a)
## Model 7: wage ~ poly(age, a)
## Model 8: wage ~ poly(age, a)
## Model 9: wage ~ poly(age, a)
## Model 10: wage ~ poly(age, a)
## Model 11: wage ~ poly(age, a)
## Model 12: wage ~ poly(age, a)
## Model 13: wage ~ poly(age, a)
## Model 14: wage ~ poly(age, a)
## Model 15: wage ~ poly(age, a)
## Resid. Df Resid. Dev Df Deviance F Pr(>F)
## 1 2998 5022216
## 2 2997 4793430 1 228786 143.5637 < 2.2e-16 ***
## 3 2996 4777674 1 15756 9.8867 0.001681 **
## 4 2995 4771604 1 6070 3.8090 0.051070 .
## 5 2994 4770322 1 1283 0.8048 0.369731
## 6 2993 4766389 1 3932 2.4675 0.116329
## 7 2992 4763834 1 2555 1.6034 0.205515
## 8 2991 4763707 1 127 0.0795 0.778016
## 9 2990 4756703 1 7004 4.3952 0.036124 *
## 10 2989 4756701 1 3 0.0017 0.967552
## 11 2988 4756597 1 103 0.0648 0.799144
## 12 2987 4756591 1 7 0.0043 0.947923
## 13 2986 4756401 1 190 0.1189 0.730224
## 14 2985 4756158 1 243 0.1522 0.696488
## 15 2984 4755364 1 795 0.4986 0.480151
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
根据F检验,我们应该选择年龄提高到3次的模型,通过交叉验证 。
现在,我们绘制多项式拟合的结果。
plot(wage ~ age, data = Wage, col = "darkgrey", bty = &
这篇关于R语言ISLR工资数据进行多项式回归和样条回归分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!