乐趣区

关于数据挖掘:视频什么是非线性模型与R语言多项式回归局部平滑样条-广义相加GAM分析工资数据数据分享附代码数据

全文链接:http://tecdat.cn/?p=9706

最近咱们被客户要求撰写对于非线性模型的钻研报告,包含一些图形和统计输入。

在这文中,我将介绍非线性回归的基础知识。非线性回归是一种对因变量和一组自变量之间的非线性关系进行建模的办法。最初咱们用 R 语言非线性模型预测集体工资数据是否每年支出超过 25 万

这些数据点对应于一段时间内的中国国内生产总值或 GDP。

第一栏是年份,第二栏是中国当年相应的年国内总收入。这就是数据点的样子。当初,咱们有几个乏味的问题。

首先,GDP 能够依据工夫来预测吗?

其次,咱们能够应用简略的线性回归对其进行建模吗?

确实。如果数据显示曲线趋势,则与非线性回归相比,线性回归不会产生十分精确的后果。仅仅是因为,顾名思义,线性回归假设数据是线性的。

散点图显示 GDP 与工夫之间仿佛存在很强的关系,但这种关系不是线性的。如您所见,增长开始迟缓,而后从 2005 年开始,增长十分显着。最初,它在 2010 年代略有加速。它看起来像逻辑函数或指数函数。因而,它须要一种非凡的非线性回归过程预计办法。

存在许多不同的回归,可用于拟合数据集的外观。你能够在这里看到二次和三次回归线,它能够有限延长。实质上,咱们能够将所有这些称为 多项式回归,其中自变量 X 和因变量 Y 之间的关系被建模为 X 中的 N 次多项式。有多种回归类型可供选择,很有可能其中一个将非常适合您的数据集。请记住,抉择最适宜数据的回归十分重要。

什么是多项式回归?

多项式回归将曲线拟合到您的数据。Thetas 是要预计的参数 ,使模型齐全适宜根底数据。尽管这里 X 和 Y 之间的关系是非线性的,多项式回归无奈拟合它们,但 多项式回归模型依然能够示意为线性回归

给定三次多项式方程,将模型转换为具备新变量的简略线性回归。这个模型在要预计的参数中是线性的,对吧?

因而,这种多项式回归被认为是传统多元线性回归的一个特例。因而,您能够应用与线性回归雷同的机制来解决此类问题。因而,多项式回归模型能够应用最小二乘模型进行拟合。最小二乘法是一种通过最小化给定数据集中察看到的因变量与线性函数预测的因变量之间差别的平方和来预计线性回归模型中未知参数的办法。

什么是非线性回归?

首先,非线性回归是一种对 因变量和一组自变量之间 的非线性关系建模的办法。

其次,对于一个被认为是非线性的模型,Y 必须是 参数 Theta 的非线性函数 ,不肯定是 特色 X 。当波及到非线性方程时,它能够是 指数,对数,和逻辑函数 ,或许多其余类型。正如您在所有这些方程中看到的那样,Y 的变动取决于参数 Theta 的变动,不肯定只取决于 X。也就是说,在非线性回归中,模型 在参数上是非线性 的。与线性回归相比,咱们不能应用一般的最小二乘法来拟合非线性回归中的数据。一般来说,参数的预计并不容易。

让我在这里答复两个重要的问题。

首先,我怎样才能以简略的形式晓得 问题是线性的还是非线性 的?

要答复这个问题,咱们必须做两件事。首先是直观地确定关系是线性的还是非线性的 。最好用每个 输出变量绘制输入变量的双变量图 。此外,您能够计算 自变量和因变量之间的相关系数 ,如果所有变量的 相关系数为 0.7 或更高,则存在线性趋势,因而不适宜拟合非线性回归。咱们要做的第二件事是当咱们无奈精确地建模与线性参数的关系时,应用非线性回归而不是线性回归。

  • *

第二个重要问题是,如果我的数据在散点图上显示为非线性,我应该如何建模?

要解决这个问题,您必须应用多项式回归、应用非线性回归模型或转换您的数据。

R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析

在这里,咱们放宽了风行的线性办法的假如。有时线性假如只是一个很差的近似值。有许多办法能够解决此问题,其中一些办法能够通过应用正则化办法升高模型复杂性来  解决。然而,这些技术依然应用线性模型,到目前为止只能进行改良。本文本专一于线性模型的扩大

  • _多项式回归_    这是对数据提供非线性拟合的简略办法。
  • _阶跃函数_  将变量的范畴划分为  _K 个_  不同的区域,以生成定性变量。这具备拟合分段常数函数的成果。
  • _回归样条_  比多项式和阶跃函数更灵便,并且实际上是两者的扩大。
  • _部分样条曲线_  相似于回归样条曲线,然而容许区域重叠,并且能够平滑地重叠。
  • _平滑样条曲线_  也相似于回归样条曲线,然而它们最小化平滑度惩办的残差平方和准则。
  • _狭义加性模型_  容许扩大上述办法以解决多个预测变量。

多项式回归

这是扩大线性模型的最传统办法。随着咱们减少 多项式的项,多项式回归使咱们可能生成非线性的曲线,同时仍应用最小二乘法预计系数。


点击题目查阅往期内容

应用 R 语言进行多项式回归、非线性回归模型曲线拟合

左右滑动查看更多

01

02

03

04

逐步回归

它常常用于生物统计学和流行病学中。

回归样条

回归样条是 扩大多项式和逐步回归技术的许多_根本_函数之一。事实上。多项式和逐步回归函数只是_基_  函数的特定状况。

这是分段三次拟合的示例(左上图)。

为了解决此问题,更好的解决方案是采纳束缚,使拟合曲线必须间断。

抉择结的地位和数量

一种抉择是在咱们认为变动最快的中央搁置更多的结,而在更稳固的中央搁置更少的结。然而在实践中,通常以对立的形式搁置结。

要分明的是,在这种状况下,实际上有 5 个结,包含边界结。

那么咱们应该应用多少个结?一个简略的抉择是尝试许多个结,而后看哪个会产生最好的曲线。然而,更主观的办法是应用穿插验证。

与多项式回归相比,样条曲线能够显示出更稳固的成果。

平滑样条线

咱们探讨了回归样条曲线,该样条曲线是通过指定一组结,生成一系列基函数,而后应用最小二乘法预计样条系数而创立的。平滑样条曲线是创立样条曲线的另一种办法。让咱们回忆一下,咱们的指标是找到一些非常适合察看到的数据的函数,即最大限度地缩小 RSS。然而,如果对咱们的函数没有任何限度,咱们能够通过抉择准确内插所有数据的函数来使 RSS 设为零。

抉择平滑参数 Lambda

同样,咱们求助于穿插验证。事实证明,咱们实际上能够十分无效地计算 LOOCV,以平滑样条曲线,回归样条曲线和其余任意基函数。

平滑样条线通常比回归样条线更可取,因为它们通常会创立更简略的模型并具备可比的拟合度。

部分回归

部分回归波及仅应用左近的训练观测值来计算指标点_x_ 0 处的拟合度。

能够通过各种形式执行部分回归,尤其是在波及拟合_p_  线性回归模型的多变量计划中尤为显著,因而某些变量能够全局拟合,而某些部分拟合。

狭义加性模型

GAM 模型提供了一个通用框架,可通过容许每个变量的非线性函数扩大线性模型,同时放弃可加性。

具备平滑样条的 GAM 并不是那么简略,因为不能应用最小二乘。取而代之的 是应用一种称为_反向拟合_的办法。

GAM 的优缺点

长处

  • GAM 容许将非线性函数拟合到每个预测变量,以便咱们能够主动对规范线性回归会脱漏的非线性关系进行建模。咱们不须要对每个变量别离尝试许多不同的转换。
  • 非线性拟合能够潜在地对因变量_Y_做出更精确的预测。
  • 因为模型是可加的,所以咱们依然能够查看每个预测变量对_Y_的影响,同时放弃其余变量不变。

毛病

  • 次要局限性在于该模型仅限于累加模型,因而可能会错过重要的交互作用。

范例

多项式回归和分段函数



1.  library(ISLR)
    
2.  attach(Wage)
    

咱们能够轻松地应用来拟合多项式函数,而后指定多项式的变量和次数。该函数返回正交多项式的矩阵,这意味着每列是变量的变量的线性组合  ageage^2age^3,和  age^4。如果要间接获取变量,能够指定  raw=TRUE,但这不会影响预测后果。它可用于查看所需的系数预计。



1.  fit = lm(wage~poly(age, 4), data=Wage)
    
2.  kable(coef(summary(fit)))
    

当初让咱们创立一个ages 咱们要预测的向量。最初,咱们将要绘制数据和拟合的 4 次多项式。



1.  ageLims <- range(age)
    
2.  age.grid <- seq(from=ageLims[1], to=ageLims[2])
    

4.  pred <- predict(fit, newdata = list(age = age.grid),
    
5.                  se=TRUE)
    


1.  plot(age,wage,xlim=ageLims ,cex=.5,col="darkgrey")
    
2.   lines(age.grid,pred$fit,lwd=2,col="blue")
    
3.  matlines(age.grid,se.bands,lwd=2,col="blue",lty=3)
    

在这个简略的示例中,咱们能够应用 ANOVA 测验。



2.  ## Analysis of Variance Table
    
3.  ## 
    
4.  ## Model 1: wage ~ age
    
5.  ## Model 2: wage ~ poly(age, 2)
    
6.  ## Model 3: wage ~ poly(age, 3)
    
7.  ## Model 4: wage ~ poly(age, 4)
    
8.  ## Model 5: wage ~ poly(age, 5)
    
9.  ##   Res.Df     RSS Df Sum of Sq      F Pr(>F) 
    
10.  ## 1   2998 5022216 
    
11.  ## 2   2997 4793430  1    228786 143.59 <2e-16 ***
    
12.  ## 3   2996 4777674  1     15756   9.89 0.0017 ** 
    
13.  ## 4   2995 4771604  1      6070   3.81 0.0510 . 
    
14.  ## 5   2994 4770322  1      1283   0.80 0.3697 
    
15.  ## ---
    
16.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    

咱们看到,_M_1 与二次模型  相比,p 值  _M_2 本质上为零,这表明线性拟合是不够的。因而,咱们能够得出结论,二次方或三次模型可能更适宜于此数据,并且偏差于简略模型。

咱们也能够应用穿插验证来抉择多项式次数。

在这里,咱们实际上看到的最小穿插验证误差是针对 4 次多项式的,然而抉择 3 次或 2 次模型并不会造成太大损失。接下来,咱们思考预测集体是否每年支出超过 25 万。

然而,概率的置信区间是不合理的,因为咱们最终失去了一些负概率。为了生成置信区间,更有意义的是转换对  _数_  预测。

绘制:



1.  plot(age,I(wage>250),xlim=ageLims ,type="n",ylim=c(0,.2))
    
2.  lines(age.grid,pfit,lwd=2, col="blue")
    
3.  matlines(age.grid,se.bands,lwd=1,col="blue",lty=3)
    

逐步回归函数

在这里,咱们须要拆分数据。

table(cut(age, 4))


1.  ## 
    
2.  ## (17.9,33.5]   (33.5,49]   (49,64.5] (64.5,80.1] 
    
3.  ##         750        1399         779          72
    


1.  fit <- lm(wage~cut(age, 4), data=Wage)
    
2.  coef(summary(fit))
    


1.  ##                        Estimate Std. Error t value  Pr(>|t|)
    
2.  ## (Intercept)              94.158      1.476  63.790 0.000e+00
    
3.  ## cut(age, 4)(33.5,49]     24.053      1.829  13.148 1.982e-38
    
4.  ## cut(age, 4)(49,64.5]     23.665      2.068  11.443 1.041e-29
    
5.  ## cut(age, 4)(64.5,80.1]    7.641      4.987   1.532 1.256e-01
    

splines 样条函数

在这里,咱们将应用三次样条。

因为咱们应用的是三个结的三次样条,因而生成的样条具备六个基函数。



2.  ## [1] 3000    6
    
3.  dim(bs(age, df=6))
    

5.  ## [1] 3000    6
    
6.  ##   25%   50%   75% 
    
7.  ## 33.75 42.00 51.00
    

拟合样条曲线。

咱们也能够拟合平滑样条。在这里,咱们拟合具备 16 个自由度的样条曲线,而后通过穿插验证抉择样条曲线,从而产生 6.8 个自由度。

 2.  fit2$df
    

4.  ## [1] 6.795
    
5.  lines(fit, col='red', lwd=2)
    
6.  lines(fit2, col='blue', lwd=1)
    
7.  legend('topright', legend=c('16 DF', '6.8 DF'),
    
8.         col=c('red','blue'), lty=1, lwd=2, cex=0.8)

部分回归

执行部分回归。

GAMs

当初,咱们应用 GAM 通过年份,年龄和受教育水平的样条来预测工资。因为这只是具备多个根本函数的线性回归模型,因而咱们仅应用  lm() 函数。

为了拟合更简单的样条曲线,咱们须要应用平滑样条曲线。

绘制这两个模型

year 是线性的。咱们能够创立一个新模型,而后应用 ANOVA 测验。



2.  ## Analysis of Variance Table
    
3.  ## 
    
4.  ## Model 1: wage ~ ns(age, 5) + education
    
5.  ## Model 2: wage ~ year + s(age, 5) + education
    
6.  ## Model 3: wage ~ s(year, 4) + s(age, 5) + education
    
7.  ##   Res.Df     RSS Df Sum of Sq    F  Pr(>F) 
    
8.  ## 1   2990 3712881 
    
9.  ## 2   2989 3693842  1     19040 15.4 8.9e-05 ***
    
10.  ## 3   2986 3689770  3      4071  1.1    0.35 
    
11.  ## ---
    
12.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    

仿佛增加线性year 成分要比不增加线性  成分的 GAM 好得多。



2.  ## 
    
3.  ## Deviance Residuals:
    
4.  ##     Min      1Q  Median      3Q     Max 
    
5.  ## -119.43  -19.70   -3.33   14.17  213.48 
    
6.  ## 
    
7.  ## (Dispersion Parameter for gaussian family taken to be 1236)
    
8.  ## 
    
9.  ##     Null Deviance: 5222086 on 2999 degrees of freedom
    
10.  ## Residual Deviance: 3689770 on 2986 degrees of freedom
    
11.  ## AIC: 29888 
    
12.  ## 
    
13.  ## Number of Local Scoring Iterations: 2 
    
14.  ## 
    
15.  ## Anova for Parametric Effects
    
16.  ##              Df  Sum Sq Mean Sq F value  Pr(>F) 
    
17.  ## s(year, 4)    1   27162   27162      22 2.9e-06 ***
    
18.  ## s(age, 5)     1  195338  195338     158 < 2e-16 ***
    
19.  ## education     4 1069726  267432     216 < 2e-16 ***
    
20.  ## Residuals  2986 3689770    1236 
    
21.  ## ---
    
22.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
23.  ## 
    
24.  ## Anova for Nonparametric Effects
    
25.  ##             Npar Df Npar F  Pr(F) 
    
26.  ## (Intercept) 
    
27.  ## s(year, 4)        3    1.1   0.35 
    
28.  ## s(age, 5)         4   32.4 <2e-16 ***
    
29.  ## education 
    
30.  ## ---
    
31.  ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    

在具备非线性关系的模型中,咱们能够再次确认year 对模型没有奉献。

接下来,咱们 将部分回归拟合 GAM。

在调用 GAM 之前,咱们还能够应用部分回归来创立交互项。

咱们能够 绘制后果曲面图。

点击文末 “浏览原文”

获取全文残缺材料。

本文选自《R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析》。

点击题目查阅往期内容

MATLAB 最小二乘法:线性最小二乘、加权线性最小二乘、持重最小二乘、非线性最小二乘与剔除异样值成果比拟
数据分享 | R 语言狭义线性模型 GLM:线性最小二乘、对数变换、泊松、二项式逻辑回归剖析冰淇淋销售工夫序列数据和模仿
生态学模仿对狭义线性混合模型 GLMM 进行功率(效用、效力、效劳)剖析 power analysis 环境监测数据
狭义线性模型 glm 泊松回归的 lasso、弹性网络分类预测学生考试成绩数据和穿插验证
无限混合模型聚类 FMM、狭义线性回归模型 GLM 混合利用剖析威士忌市场和钻研专利申请数据
R 语言贝叶斯狭义线性混合(多层次 / 程度 / 嵌套)模型 GLMM、逻辑回归剖析教育留级影响因素数据
R 语言贝叶斯 MCMC:GLM 逻辑回归、Rstan 线性回归、Metropolis Hastings 与 Gibbs 采样算法实例
R 语言用 lme4 多层次(混合效应)狭义线性模型(GLM),逻辑回归剖析教育留级考察数据
R 语言狭义线性模型 GLM、多项式回归和狭义可加模型 GAM 预测泰坦尼克号幸存者
R 语言用 Rshiny 摸索 lme4 狭义线性混合模型(GLMM)和线性混合模型(LMM)
R 语言应用 bootstrap 和增量法计算狭义线性模型(GLM)预测置信区间
R 语言狭义线性模型 (GLMs) 算法和零收缩模型剖析
R 语言中狭义线性模型 (GLM) 中的散布和连贯函数剖析
R 语言中 GLM(狭义线性模型),非线性和异方差可视化剖析
R 语言中的狭义线性模型(GLM)和狭义相加模型(GAM):多元(平滑)回归剖析保险资金投资组合信用风险敞口
用狭义加性模型 GAM 进行工夫序列剖析
R 和 Python 机器学习: 狭义线性回归 glm,样条 glm,梯度加强,随机森林和深度学习模型剖析
在 r 语言中应用 GAM(狭义相加模型)进行电力负荷工夫序列剖析
用狭义加性模型 GAM 进行工夫序列剖析
R 和 Python 机器学习: 狭义线性回归 glm,样条 glm,梯度加强,随机森林和深度学习模型剖析
在 r 语言中应用 GAM(狭义相加模型)进行电力负荷工夫序列剖析

退出移动版