R语言ISLR工资数据进行多项式回归和样条回归分析2

简介: R语言ISLR工资数据进行多项式回归和样条回归分析

Boston数据回归

这个问题使用的变量dis(到五个波士顿就业中心的距离的加权平均值)和nox(每百万人口中一氧化氮的浓度,单位为百万)。我们将dis作为预测变量,将nox作为因变量。

1.  rm(list = ls())
    
2.  set.seed(1)
    
3.  library(MASS)
    
4.  attach(Boston)
1.  ## The following objects are masked from Boston (pos = 14):
    
2.  ## 
    
3.  ##     age, black, chas, crim, dis, indus, lstat, medv, nox, ptratio,
    
4.  ##     rad, rm, tax, zn
  1. 使用poly()函数拟合三次多项式回归来预测nox使用dis。报告回归输出,并绘制结果数据和多项式拟合。
1.  m1 <-  lm(nox ~ poly(dis, 3))
    
2.  summary(m1)
1.  ## 
    
2.  ## Call:
    
3.  ## lm(formula = nox ~ poly(dis, 3))
    
4.  ## 
    
5.  ## Residuals:
    
6.  ##       Min        1Q    Median        3Q       Max 
    
7.  ## -0.121130 -0.040619 -0.009738  0.023385  0.194904 
    
8.  ## 
    
9.  ## Coefficients:
    
10.  ##                Estimate Std. Error t value Pr(>|t|) 
    
11.  ## (Intercept)    0.554695   0.002759 201.021  < 2e-16 ***
    
12.  ## poly(dis, 3)1 -2.003096   0.062071 -32.271  < 2e-16 ***
    
13.  ## poly(dis, 3)2  0.856330   0.062071  13.796  < 2e-16 ***
    
14.  ## poly(dis, 3)3 -0.318049   0.062071  -5.124 4.27e-07 ***
    
15.  ## ---
    
16.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
17.  ## 
    
18.  ## Residual standard error: 0.06207 on 502 degrees of freedom
    
19.  ## Multiple R-squared:  0.7148, Adjusted R-squared:  0.7131 
    
20.  ## F-statistic: 419.3 on 3 and 502 DF,  p-value: < 2.2e-16
1.  dislim <-  range(dis)
    
2.  ...
    
3.  lines(x = dis.grid, y = lm.pred$fit, col = "red", lwd = 2)
    
4.  matlines(x = dis.grid, y = cbind(lm.pred$fit + 2* lm.pred$se.fit,
    
5.                                   lm.pred$fit - 2* lm.pred$se.fit) 
    
6.           , col = "red", lwd = 1.5, lty = "dashed")

摘要显示,在nox使用进行预测时,所有多项式项都是有效的dis。该图显示了一条平滑的曲线,很好地拟合了数据。

  1. 绘制多项式适合不同多项式次数的范围(例如,从1到10),并报告相关的残差平方和。

我们绘制1到10度的多项式并保存RSS。

1.  # 
    
2.  train.rss <-  NA
    
3.  ...
    
4.  # 在训练集中显示模型拟合
    
5.  train.rss
1.  ##  [1] 2.768563 2.035262 1.934107 1.932981 1.915290 1.878257 1.849484
    
2.  ##  [8] 1.835630 1.833331 1.832171

正如预期的那样,RSS随多项式次数单调递减。

  1. 执行交叉验证或其他方法来选择多项式的最佳次数,并解释您的结果。

我们执行LLOCV并手工编码:

1.  cv.error <- matrix(NA, nrow = nrow(Boston), ncol = 10)
    
3.  ...
    
4.  names(result) <- paste( "^", 1:10, sep= "" )
    
5.  result
1.  ##          ^1          ^2          ^3          ^4          ^5          ^6 
    
2.  ## 0.005471468 0.004022257 0.003822345 0.003820121 0.003785158 0.003711971 
    
3.  ##          ^7          ^8          ^9         ^10 
    
4.  ## 0.003655106 0.003627727 0.003623183 0.003620892
1.  plot(result ~ seq(1,10), type = "b", pch = 19, bty = "n", xlab = "powers of dist to empl. center",
    
2.       ylab = "cv error")
    
3.  abline(h = min(cv.error) + sd(cv.error), col = "red", lty = "dashed")

基于交叉验证,我们将选择dis平方。

  1. 使用bs()函数拟合回归样条曲线使用nox进行预测dis

我们以[3,6,9]大致相等的4个区间划分此范围

1.  library(splines)
    
2.  m4 <-  lm(nox ~ bs(dis, knots = c(3, 6, 9)))
    
3.  summary(m4)
1.  ## 
    
2.  ## Call:
    
3.  ## lm(formula = nox ~ bs(dis, knots = c(3, 6, 9)))
    
4.  ## 
    
5.  ## Residuals:
    
6.  ##       Min        1Q    Median        3Q       Max 
    
7.  ## -0.132134 -0.039466 -0.009042  0.025344  0.187258 
    
8.  ## 
    
9.  ## Coefficients:
    
10.  ##                               Estimate Std. Error t value Pr(>|t|) 
    
11.  ## (Intercept)                   0.709144   0.016099  44.049  < 2e-16 ***
    
12.  ## bs(dis, knots = c(3, 6, 9))1  0.006631   0.025467   0.260    0.795 
    
13.  ## bs(dis, knots = c(3, 6, 9))2 -0.258296   0.017759 -14.544  < 2e-16 ***
    
14.  ## bs(dis, knots = c(3, 6, 9))3 -0.233326   0.027248  -8.563  < 2e-16 ***
    
15.  ## bs(dis, knots = c(3, 6, 9))4 -0.336530   0.032140 -10.471  < 2e-16 ***
    
16.  ## bs(dis, knots = c(3, 6, 9))5 -0.269575   0.058799  -4.585 5.75e-06 ***
    
17.  ## bs(dis, knots = c(3, 6, 9))6 -0.303386   0.062631  -4.844 1.70e-06 ***
    
18.  ## ---
    
19.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
20.  ## 
    
21.  ## Residual standard error: 0.0612 on 499 degrees of freedom
    
22.  ## Multiple R-squared:  0.7244, Adjusted R-squared:  0.7211 
    
23.  ## F-statistic: 218.6 on 6 and 499 DF,  p-value: < 2.2e-16
1.  # 绘图结果
    
2.  ...
    
3.  # 
    
4.  matlines( dis.grid,
    
5.  ...
    
6.            col = "black", lwd = 2, lty = c("solid", "dashed", "dashed"))

  1. 现在针对一定范围的自由度拟合样条回归,并绘制结果拟合并报告结果RSS。描述获得的结果。

我们使用3到16之间的dfs拟合回归样条曲线。

1.  box <-  NA
    
3.  for (i in 3:16) {
    
4.  ...
    
5.  }
    
7.  box[-c(1, 2)]
1.  ##  [1] 1.934107 1.922775 1.840173 1.833966 1.829884 1.816995 1.825653
    
2.  ##  [8] 1.792535 1.796992 1.788999 1.782350 1.781838 1.782798 1.783546

ISLR包中的College数据集。

  1. 将数据分为训练集和测试集。使用学费作为因变量,使用其他变量作为预测变量,对训练集执行前向逐步选择,确定仅使用预测变量子集的令人满意的模型。
1.  rm(list = ls())
    
2.  set.seed(1)
    
3.  library(leaps)
    
4.  attach(College)
1.  ## The following objects are masked from College (pos = 14):
    
2.  ## 
    
3.  ##     Accept, Apps, Books, Enroll, Expend, F.Undergrad, Grad.Rate,
    
4.  ##     Outstate, P.Undergrad, perc.alumni, Personal, PhD, Private,
    
5.  ##     Room.Board, S.F.Ratio, Terminal, Top10perc, Top25perc
1.  # 训练/测试拆分行的索引号
    
2.  train <-  sample( length(Outstate), length(Outstate)/2)
    
3.  test <-  -train
    
4.  ...
    
5.  abline(h=max.adjr2 - std.adjr2, col="red", lty=2)

所有cp,BIC和adjr2得分均显示6是该子集的最小大小。但是,根据1个标准误差规则,我们将选择具有4个预测变量的模型。

1.  ...
    
2.  coefi <-  coef(m5, id = 4)
    
3.  names(coefi)

## [1] "(Intercept)" "PrivateYes" "Room.Board" "perc.alumni" "Expend"

  1. 将GAM拟合到训练数据上,使用学费作为响应,并使用在上一步中选择的函数作为预测变量。绘制结果,并解释您的发现。
1.  library(gam)
    
2.  ...
    
3.  plot(gam.fit, se=TRUE, col="blue")

  1. 评估在测试集上获得的模型,并解释获得的结果。
1.  gam.pred <-  predict(gam.fit, College.test)
    
2.  gam.err <-  mean((College.test$Outstate - gam.pred)^2)
    
3.  gam.err

## [1] 3745460

1.  gam.tss <-  mean((College.test$Outstate - mean(College.test$Outstate))^2)
    
2.  test.rss <-  1 - gam.err / gam.tss
    
3.  test.rss

## [1] 0.7696916

  1. 对于哪些变量(如果有),是否存在与因变量呈非线性关系的证据?
summary(gam.fit)
1.  ## 
    
2.  ## Call: gam(formula = Outstate ~ Private + s(Room.Board, df = 2) + s(PhD, 
    
3.  ##     df = 2) + s(perc.alumni, df = 2) + s(Expend, df = 5) + s(Grad.Rate, 
    
4.  ##     df = 2), data = College.train)
    
5.  ## Deviance Residuals:
    
6.  ##      Min       1Q   Median       3Q      Max 
    
7.  ## -4977.74 -1184.52    58.33  1220.04  7688.30 
    
8.  ## 
    
9.  ## (Dispersion Parameter for gaussian family taken to be 3300711)
    
10.  ## 
    
11.  ##     Null Deviance: 6221998532 on 387 degrees of freedom
    
12.  ## Residual Deviance: 1231165118 on 373 degrees of freedom
    
13.  ## AIC: 6941.542 
    
14.  ## 
    
15.  ## Number of Local Scoring Iterations: 2 
    
16.  ## 
    
17.  ## Anova for Parametric Effects
    
18.  ##                         Df     Sum Sq    Mean Sq F value    Pr(>F) 
    
19.  ## Private                  1 1779433688 1779433688 539.106 < 2.2e-16 ***
    
20.  ## s(Room.Board, df = 2)    1 1221825562 1221825562 370.171 < 2.2e-16 ***
    
21.  ## s(PhD, df = 2)           1  382472137  382472137 115.876 < 2.2e-16 ***
    
22.  ## s(perc.alumni, df = 2)   1  328493313  328493313  99.522 < 2.2e-16 ***
    
23.  ## s(Expend, df = 5)        1  416585875  416585875 126.211 < 2.2e-16 ***
    
24.  ## s(Grad.Rate, df = 2)     1   55284580   55284580  16.749 5.232e-05 ***
    
25.  ## Residuals              373 1231165118    3300711 
    
26.  ## ---
    
27.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
28.  ## 
    
29.  ## Anova for Nonparametric Effects
    
30.  ##                        Npar Df  Npar F     Pr(F) 
    
31.  ## (Intercept) 
    
32.  ## Private 
    
33.  ## s(Room.Board, df = 2)        1  3.5562   0.06010 . 
    
34.  ## s(PhD, df = 2)               1  4.3421   0.03786 * 
    
35.  ## s(perc.alumni, df = 2)       1  1.9158   0.16715 
    
36.  ## s(Expend, df = 5)            4 16.8636 1.016e-12 ***
    
37.  ## s(Grad.Rate, df = 2)         1  3.7208   0.05450 . 
    
38.  ## ---
    
39.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

非参数Anova检验显示了因变量与支出之间存在非线性关系的有力证据,以及因变量与Grad.Rate或PhD之间具有中等强度的非线性关系(使用p值为0.05)。


相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
58 3
|
3月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
4月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
91 3