线性回归模型是否适合所有的数据?
原文链接:http://tecdat.cn/?p=20882
1导言
这篇文章探讨了为什么使用广义相加模型 是一个不错的选择。为此,我们首先需要看一下线性回归,看看为什么在某些情况下它可能不是最佳选择。
2回归模型
假设我们有一些带有两个属性Y和X的数据。如果它们是线性相关的,则它们可能看起来像这样:
a<-ggplot(my_data, aes(x=X,y=Y))+geom_point()+
为了检查这种关系,我们可以使用回归模型。线性回归是一种使用X来预测变量Y的方法。将其应用于我们的数据将预测成红线的一组值:
a+geom_smooth(col="red", method="lm")+
这就是“直线方程式”。根据此等式,我们可以从直线在y轴上开始的位置(“截距”或α)开始描述,并且每个单位的x都增加了多少y(“斜率”),我们将它称为x的系数,或称为β)。还有一点自然的波动,如果没有的话,所有的点都将是完美的。我们将此称为“残差”(ϵ)。数学上是:
或者,如果我们用实际数字代替,则会得到以下结果:
这篇文章通过考虑每个数据点和线之间的差异(“残差)然后最小化这种差异来估算模型。我们在线的上方和下方都有正误差和负误差,因此,通过对它们进行平方并最小化“平方和”,使它们对于估计都为正。这称为“普通最小二乘法”或OLS。
3非线性关系如何?
因此,如果我们的数据看起来像这样,我们该怎么办:
我们刚刚看到的模型的关键假设之一是y和x线性相关。如果我们的y不是正态分布的,则使用广义线性模型 (Nelder&Wedderburn,1972),其中y通过链接函数进行变换,但再次假设f(y)和x线性相关。如果不是这种情况,并且关系在x的范围内变化,则可能不是最合适的。我们在这里有一些选择:
我们可以使用线性拟合,但是如果这样做的话,我们会在数据的某些部分上面或者下面。
我们可以分为几类。我在下面的图中使用了三个,这是一个合理的选择。同样,我们可能处于数据某些部分之下或之上,而在类别之间的边界附近似乎是准确的。例如,如果x = 49时,与x = 50相比,y是否有很大不同?
我们可以使用多项式之类的变换。下面,我使用三次多项式,因此模型适合:。这些的组合使函数可以光滑地近似变化。这是一个很好的选择,但可能会极端波动,并可能在数据中引起相关性,从而降低拟合度。
请点击输入图片描述
μi≡E(Yi),Y的期望
Yi〜EF(μi,ϕi),Yi是一个响应变量,根据均值μi和形状参数ϕ的指数族分布。
Ai是任何严格参数化模型分量的模型矩阵的一行,其中θ为对应的参数向量。
fi是协变量xk的光滑函数,其中k是每个函数的基础。
- gam(Y ~ s(X, bs="cr")
s()指定光滑器。还有其他选项,但是s是一个很好的默认选项
bs=“cr”告诉它使用三次回归样条('basis')。
s函数计算出要使用的默认结数,但是您可以将其更改为k=10,例如10个结。
- #### Family: gaussian## Link function: identity## Parametric coefficients:## Estimate Std. Error t value Pr(>|t|)## (Intercept) 43.9659 0.8305 52.94 <2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#### Approximate significance of smooth terms:## edf Ref.df F p-value## s(X) 6.087 7.143 296.3 <2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#### R-sq.(adj) = 0.876 Deviance explained = 87.9%## GCV = 211.94 Scale est. = 206.93 n = 300
显示了我们截距的模型系数,所有非光滑参数将在此处显示
每个光滑项的总体含义如下。
这是基于“有效自由度”(edf)的,因为我们使用的样条函数可以扩展为许多参数,但我们也在惩罚它们并减少它们的影响。
- #### Method: GCV Optimizer: magic## Smoothing parameter selection converged after 4 iterations.## The RMS GCV score gradient at convergence was 1.107369e-05 .## The Hessian was positive definite.## Model rank = 10 / 10#### Basis dimension (k) checking results. Low p-value (k-index<1) may## indicate that k is too low, especially if edf is close to k'.#### k' edf k-index p-value## s(X) 9.00 6.09 1.1 0.97
- anova(my_lm, my_gam)
- ## Analysis of Variance Table#### Model 1: Y ~ X## Model 2: Y ~ s(X, bs = "cr")## Res.Df RSS Df Sum of Sq F Pr(>F)## 1 298.00 88154## 2 292.91 60613 5.0873 27540 26.161 < 2.2e-16 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
NELDER, J. A. & WEDDERBURN, R. W. M. 1972. Generalized Linear Models. Journal of the Royal Statistical Society. Series A (General), 135, 370-384.
HARRELL, F. E., JR. 2001. Regression Modeling Strategies, New York, Springer-Verlag New York.
请点击输入图片描述
4样条曲线
多项式的进一步细化是拟合“分段”多项式,我们在数据范围内将多项式链在一起以描述形状。“样条线”是分段多项式,以绘图员用来绘制曲线的工具命名。物理样条曲线是一种柔性条,可以弯曲成形,并由砝码固定。在构造数学样条曲线时,我们有多项式函数,二阶导数连续,固定在“结”点上。
下面是一个ggplot2 对象,该 对象的 geom_smooth 的公式包含ns 函数中的“自然三次样条” 。这种样条曲线为“三次”,并且使用10个结
请点击输入图片描述
请点击输入图片描述
5光滑函数
样条曲线可以是光滑的或“摇摆的”,这可以通过改变节点数(k)或使用光滑惩罚γ来控制。如果我们增加结的数目,它将更“摇摆”。这可能会更接近数据,而且误差也会更小,但我们开始“过度拟合”关系,并拟合我们数据中的噪声。当我们结合光滑惩罚时,我们会惩罚模型中的复杂度,这有助于减少过度拟合。
请点击输入图片描述
6广义相加模型(GAM)
广义加性模型(GAM)(Hastie,1984)使用光滑函数(如样条曲线)作为回归模型中的预测因子。这些模型是严格可加的,这意味着我们不能像正常回归那样使用交互项,但是我们可以通过重新参数化作为一个更光滑的模型来实现同样的效果。事实并非如此,但本质上,我们正转向一种模型,如:
请点击输入图片描述
摘自Wood (2017)的GAM的更正式示例 是:
请点击输入图片描述
其中:
如果您要建立回归模型,但怀疑光滑拟合会做得更好,那么GAM是一个不错的选择。它们适合于非线性或有噪声的数据。
7 gam拟合
那么,如何 为上述S型数据建立 GAM模型?在这里,我将使用三次样条回归 :
上面的设置意味着:
8模型输出:
查看模型摘要:
9检查模型:
该 gam.check() 函数可用于查看残差图,但它也可以测试光滑器以查看是否有足够的结来描述数据。但是如果p值很低,则需要更多的结。
请点击输入图片描述
10它比线性模型好吗?
让我们对比具有相同数据的普通线性回归模型:
我们的方差分析函数在这里执行了f检验,我们的GAM模型明显优于线性回归。
11小结
所以,我们看了什么是回归模型,我们是如何解释一个变量y和另一个变量x的。其中一个基本假设是线性关系,但情况并非总是这样。当关系在x的范围内变化时,我们可以使用函数来改变这个形状。一个很好的方法是在“结”点处将光滑曲线链接在一起,我们称之为“样条曲线”
我们可以在常规回归中使用这些样条曲线,但是如果我们在GAM的背景中使用它们,我们同时估计了回归模型以及如何使我们的模型更光滑。
上面的示例显示了基于样条的GAM,其拟合度比线性回归模型好得多。
12参考:
请点击输入图片描述
最受欢迎的见解
1.R语言多元Logistic逻辑回归 应用案例
2.面板平滑转移回归(PSTR)分析案例实现
3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)
4.R语言泊松Poisson回归模型分析案例
5.R语言回归中的Hosmer-Lemeshow拟合优度检验
6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
7.在R语言中实现Logistic逻辑回归
8.python用线性回归预测股票价格
9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标
绛旓細濡傛灉鎮ㄨ寤虹珛鍥炲綊妯″瀷,浣嗘鐤戝厜婊戞嫙鍚堜細鍋氬緱鏇村ソ,閭d箞GAM鏄竴涓笉閿欑殑閫夋嫨銆傚畠浠閫傚悎浜庨潪绾挎鎴栨湁鍣0鐨勬暟鎹銆 7 gam鎷熷悎 閭d箞,濡備綍 涓轰笂杩癝鍨嬫暟鎹缓绔 GAM妯″瀷?鍦ㄨ繖閲,鎴戝皢浣跨敤涓夋鏍锋潯鍥炲綊 : gam(Y ~ s(X, bs="cr") 涓婇潰鐨勮缃剰鍛崇潃: s()鎸囧畾鍏夋粦鍣ㄣ傝繕鏈夊叾浠栭夐」,浣嗘槸s鏄涓涓緢濂界殑榛樿閫夐」 bs=...
绛旓細绾挎у洖褰掓槸涓绉嶅箍娉涘簲鐢ㄤ簬鏁版嵁鍒嗘瀽鐨勭粺璁℃柟娉曪紝閫傜敤浜庝互涓嬬被鍨嬬殑鏁版嵁鍒嗘瀽锛1.棰勬祴鍒嗘瀽锛氱嚎鎬у洖褰掑彲浠ョ敤浜庨娴嬭繛缁彉閲忕殑鍊銆傞氳繃寤虹珛涓涓嚎鎬фā鍨嬶紝鍙互鏍规嵁鑷彉閲忕殑鍙樺寲鏉ラ娴嬪洜鍙橀噺鐨勫笺備緥濡傦紝鍙互浣跨敤绾挎у洖褰掓潵棰勬祴鎴夸环銆侀攢鍞鎴栬偂绁ㄤ环鏍肩瓑銆2.鍏崇郴鍒嗘瀽锛氱嚎鎬у洖褰掑彲浠ュ府鍔╃‘瀹氫袱涓垨澶氫釜鍙橀噺涔嬮棿鐨勫叧绯汇
绛旓細鍙互鏄杩炵画鎬ф暟鎹紝涔熷彲浠ユ槸鍒嗙被鏁版嵁銆绾挎у洖褰鍒嗘瀽鐨勬暟鎹瑕佹眰锛氳嚜鍙橀噺鍙互鏄垎绫诲彉閲忓拰杩炵画鎬у彉閲忥紝鍥犲彉閲忓繀椤绘槸杩炵画鎬у彉閲忋傚垎绫诲彉閲忥細姣斿鎬у埆\姘戞棌\瀛﹀巻绛夛紝鏁版嵁涔嬮棿鏃犳硶杩涜鍔犲噺鐨勩傝繛缁彉閲忥細姣斿韬珮\浣撻噸\鏀跺叆\娓╁害绛夛紝杩欑鏈夊叿浣撴剰涔夌殑鏁版嵁锛屽彲浠ヨ繘琛屽钩鍧囧拰鍔犲噺鐨勩
绛旓細娌℃湁鍏蜂綋鏁版嵁瑕佹眰锛屼竴鑸潵璇达紝鏁版嵁瓒婂瓒婂ソ銆傞氳繃绾挎у洖褰掔畻娉曪紝鎴戜滑鍙兘浼氬緱鍒板緢澶氱殑绾挎у洖褰掓ā鍨嬶紝浣嗘槸涓嶅悓鐨勬ā鍨嬪浜庢暟鎹殑鎷熷悎鎴栬呮槸鎻忚堪鑳藉姏鏄笉涓鏍风殑銆傛垜浠殑鐩殑鏈缁堟槸闇瑕佹壘鍒颁竴涓兘澶熸渶绮剧‘鍦版弿杩版暟鎹箣闂村叧绯荤殑绾挎у洖褰掓ā鍨嬨傝繖鏄氨闇瑕佺敤鍒颁唬浠峰嚱鏁般備唬浠峰嚱鏁板氨鏄敤鏉ユ弿杩扮嚎鎬у洖褰掓ā鍨嬩笌姝e紡鏁版嵁涔...
绛旓細1.鍐冲畾绯绘暟锛圧_锛夛細鍐冲畾绯绘暟鏄涓涓粺璁″姒傚康锛岀敤浜庤 閲鍥炲綊妯″瀷瀵鏁版嵁鐨鎷熷悎绋嬪害銆傚畠鐨勫间粙浜0鍜1涔嬮棿锛岃秺鎺ヨ繎1琛ㄧず妯″瀷鐨鎷熷悎鏁堟灉瓒婂ソ銆2.鍧囨柟璇樊锛圡SE锛夛細鍧囨柟璇樊鏄娴嬪间笌瀹為檯鍊间箣闂村樊鐨勫钩鏂圭殑骞冲潎鍊笺侻SE鐨勫艰秺灏忥紝琛ㄧず妯″瀷鐨勯娴嬬簿搴﹁秺楂樸3.鍧囨柟鏍硅宸紙RMSE锛夛細鍧囨柟鏍硅宸槸MSE鐨勫钩鏂规牴...
绛旓細鍦ㄧ粺璁″涓紝鏈夎澶氫笉鍚岀殑妯″瀷琚敤浜鏁版嵁鍒嗘瀽銆侀娴嬪拰鎺ㄦ柇銆備互涓鏄涓浜涘父瑙佺殑缁熻妯″瀷锛1. 绾挎у洖褰掓ā鍨锛氱嚎鎬у洖褰掓ā鍨嬬敤浜庡缓绔嬭嚜鍙橀噺涓庡洜鍙橀噺涔嬮棿鐨勭嚎鎬у叧绯伙紝骞堕氳繃鏈灏忎簩涔樻硶鏉ヤ及璁℃ā鍨嬪弬鏁般2. 閫昏緫鍥炲綊妯″瀷锛氶昏緫鍥炲綊妯″瀷鐢ㄤ簬寤虹珛鑷彉閲忎笌浜屽垎绫诲洜鍙橀噺涔嬮棿鐨勫叧绯伙紝骞堕氳繃鏈澶т技鐒朵及璁℃潵浼拌妯″瀷鍙傛暟銆3...
绛旓細濡傛灉鍥炲綊鍒嗘瀽涓寘鎷袱涓垨涓や釜浠ヤ笂鐨勮嚜鍙橀噺,涓斿洜鍙橀噺鍜岃嚜鍙橀噺涔嬮棿鏄绾挎у叧绯,鍒欑О涓哄鍏冪嚎鎬у洖褰掑垎鏋愩 鍦ㄧ嚎鎬у洖褰掍腑,鏁版嵁浣跨敤绾挎ч娴嬪嚱鏁版潵寤烘ā,骞朵笖鏈煡鐨勬ā鍨嬪弬鏁颁篃鏄氳繃鏁版嵁鏉ヤ及璁°傝繖浜涙ā鍨嬭鍙仛绾挎фā鍨銆傛渶甯哥敤鐨勭嚎鎬у洖褰掑缓妯℃槸缁欏畾X鍊肩殑y鐨勬潯浠跺潎鍊兼槸X鐨勪豢灏勫嚱鏁般備笉澶竴鑸殑鎯呭喌,绾挎у洖褰掓ā鍨鍙互鏄竴涓...
绛旓細鍏朵腑锛孿(\bar{y}\)鏄墍鏈瀹為檯鍊肩殑骞冲潎鍊笺備妇渚嬫潵璇达紝鍋囪鎴戜滑鏈変竴涓叧浜庢埧灞嬩环鏍间笌闈㈢Н鐨勬暟鎹闆嗭紝骞舵兂寤虹珛涓涓绾挎у洖褰掓ā鍨鏉ラ娴嬫埧灞嬩环鏍笺傛垜浠彲浠ヤ娇鐢ㄤ笂杩版寚鏍囨潵璇勪及妯″瀷鐨鎷熷悎绋嬪害銆傚亣璁炬垜浠緱鍒扮殑MSE涓10000锛孯MSE涓100锛孯鏂瑰间负0.9銆傝繖鎰忓懗鐫棰勬祴鍊间笌瀹為檯鍊间箣闂寸殑骞冲潎璇樊涓10000锛岄娴嬪肩殑璇樊...
绛旓細2銆佸彲浠閫傜敤杩炵画鍨嬪拰绂绘暎鍨嬭嚜鍙橀噺銆3銆佸彲浠ユ牴鎹疄闄呴渶姹傝瀹氬叿浣撶殑闃堝笺傜己鐐癸細1銆佺敱浜庡叾鏄鍩轰簬绾挎у洖褰掓ā鍨涔嬩笂锛屽洜姝ゅ叾鍚屾牱浼氬嚭鐜板閲嶅叡绾挎ч棶棰樸2銆佸緢闅惧鐞鏁版嵁涓嶅潎琛¢棶棰樸3銆佸鏄撴瑺鎷熷悎锛岀簿搴︿笉楂樸備笁銆並NN锛圞鈥旇繎閭伙級浼樼偣锛1銆佺畝鍗曪紝鏄撲簬瀹炵幇锛屾槗浜庣悊瑙o紝鏃犻渶鍙傛暟浼拌銆2銆佽缁冩椂闂翠负0锛屽畠娌℃湁...
绛旓細鍥炲綊妯″瀷锛坮egression model锛夊缁熻鍏崇郴杩涜瀹氶噺鎻忚堪鐨勪竴绉嶆暟瀛︽ā鍨嬨傚澶氬厓绾挎у洖褰掔殑鏁板妯″瀷鍙互琛ㄧず涓簓=尾0+尾1*x+蔚i锛屽紡涓紝尾0锛屛1锛屸︼紝尾p鏄p+1涓緟浼拌鐨勫弬鏁般偽礽鏄浉浜掔嫭绔嬩笖鏈嶄粠鍚屼竴姝f佸垎甯僋(0,蟽2)鐨勯殢鏈哄彉閲忥紝y鏄殢鏈哄彉閲忥紱x鍙互鏄殢鏈哄彉閲忥紝涔熷彲浠ユ槸闈為殢鏈哄彉閲,尾i绉颁负...