【視頻】什么是非線性模型與R語言多項(xiàng)式回歸、局部平滑樣條、 廣義相加GAM分析工資數(shù)
全文鏈接:http://tecdat.cn/?p=9706
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
在這文中,我將介紹非線性回歸的基礎(chǔ)知識(shí)。非線性回歸是一種對(duì)因變量和一組自變量之間的非線性關(guān)系進(jìn)行建模的方法。最后我們用R語言非線性模型預(yù)測(cè)個(gè)人工資數(shù)據(jù)(查看文末了解數(shù)據(jù)獲取方式)是否每年收入超過25萬。
相關(guān)視頻:非線性模型原理與R語言多項(xiàng)式回歸、局部平滑樣條、 廣義相加模型GAM分析
非線性模型原理與R語言多項(xiàng)式回歸、局部平滑樣條、 廣義相加模型GAM分析
,時(shí)長(zhǎng)05:41
這些數(shù)據(jù)點(diǎn)對(duì)應(yīng)于一段時(shí)間內(nèi)的中國(guó)國(guó)內(nèi)生產(chǎn)總值或 GDP。
第一欄是年份,第二欄是中國(guó)當(dāng)年相應(yīng)的年國(guó)內(nèi)總收入。這就是數(shù)據(jù)點(diǎn)的樣子。現(xiàn)在,我們有幾個(gè)有趣的問題。
首先,GDP可以根據(jù)時(shí)間來預(yù)測(cè)嗎?
其次,我們可以使用簡(jiǎn)單的線性回歸對(duì)其進(jìn)行建模嗎?
的確。如果數(shù)據(jù)顯示曲線趨勢(shì),則與非線性回歸相比,線性回歸不會(huì)產(chǎn)生非常準(zhǔn)確的結(jié)果。僅僅是因?yàn)?,顧名思義,線性回歸假定數(shù)據(jù)是線性的。
散點(diǎn)圖顯示 GDP 與時(shí)間之間似乎存在很強(qiáng)的關(guān)系,但這種關(guān)系不是線性的。如您所見,增長(zhǎng)開始緩慢,然后從 2005 年開始,增長(zhǎng)非常顯著。最后,它在 2010 年代略有減速。它看起來像邏輯函數(shù)或指數(shù)函數(shù)。因此,它需要一種特殊的非線性回歸過程估計(jì)方法。
存在許多不同的回歸,可用于擬合數(shù)據(jù)集的外觀。你可以在這里看到二次和三次回歸線,它可以無限延伸。本質(zhì)上,我們可以將所有這些稱為多項(xiàng)式回歸,其中自變量 X 和因變量 Y 之間的關(guān)系被建模為 X 中的 N 次多項(xiàng)式。有多種回歸類型可供選擇,很有可能其中一個(gè)將非常適合您的數(shù)據(jù)集。請(qǐng)記住,選擇最適合數(shù)據(jù)的回歸非常重要。
什么是多項(xiàng)式回歸?
多項(xiàng)式回歸將曲線擬合到您的數(shù)據(jù)。Thetas 是要估計(jì)的參數(shù),使模型完全適合基礎(chǔ)數(shù)據(jù)。雖然這里 X 和 Y 之間的關(guān)系是非線性的,多項(xiàng)式回歸無法擬合它們,但多項(xiàng)式回歸模型仍然可以表示為線性回歸。
給定三次多項(xiàng)式方程,將模型轉(zhuǎn)換為具有新變量的簡(jiǎn)單線性回歸。這個(gè)模型在要估計(jì)的參數(shù)中是線性的,對(duì)吧?
因此,這種多項(xiàng)式回歸被認(rèn)為是傳統(tǒng)多元線性回歸的一個(gè)特例。因此,您可以使用與線性回歸相同的機(jī)制來解決此類問題。因此,多項(xiàng)式回歸模型可以使用最小二乘模型進(jìn)行擬合。最小二乘法是一種通過最小化給定數(shù)據(jù)集中觀察到的因變量與線性函數(shù)預(yù)測(cè)的因變量之間差異的平方和來估計(jì)線性回歸模型中未知參數(shù)的方法。
什么是非線性回歸?
首先,非線性回歸是一種對(duì)因變量和一組自變量之間的非線性關(guān)系建模的方法。
其次,對(duì)于一個(gè)被認(rèn)為是非線性的模型,Y必須是參數(shù)Theta的非線性函數(shù),不一定是特征X。當(dāng)涉及到非線性方程時(shí),它可以是指數(shù),對(duì)數(shù),和邏輯函數(shù),或許多其他類型。正如您在所有這些方程中看到的那樣,Y 的變化取決于參數(shù) Theta 的變化,不一定只取決于 X。也就是說,在非線性回歸中,模型在參數(shù)上是非線性的。與線性回歸相比,我們不能使用普通的最小二乘法來擬合非線性回歸中的數(shù)據(jù)。一般來說,參數(shù)的估計(jì)并不容易。
讓我在這里回答兩個(gè)重要的問題。
首先,我怎樣才能以簡(jiǎn)單的方式知道問題是線性的還是非線性的?
要回答這個(gè)問題,我們必須做兩件事。首先是直觀地確定關(guān)系是線性的還是非線性的。最好用每個(gè)輸入變量繪制輸出變量的雙變量圖。此外,您可以計(jì)算自變量和因變量之間的相關(guān)系數(shù),如果所有變量的相關(guān)系數(shù)為 0.7 或更高,則存在線性趨勢(shì),因此不適合擬合非線性回歸。我們要做的第二件事是當(dāng)我們無法準(zhǔn)確地建模與線性參數(shù)的關(guān)系時(shí),使用非線性回歸而不是線性回歸。
第二個(gè)重要問題是,如果我的數(shù)據(jù)在散點(diǎn)圖上顯示為非線性,我應(yīng)該如何建模?
要解決這個(gè)問題,您必須使用多項(xiàng)式回歸、使用非線性回歸模型或轉(zhuǎn)換您的數(shù)據(jù)。
R語言里的非線性模型:多項(xiàng)式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析
在這里,我們放寬了流行的線性方法的假設(shè)。有時(shí)線性假設(shè)只是一個(gè)很差的近似值。有許多方法可以解決此問題,其中一些方法可以通過使用正則化方法降低模型復(fù)雜性來??解決??。但是,這些技術(shù)仍然使用線性模型,到目前為止只能進(jìn)行改進(jìn)。本文本專注于線性模型的擴(kuò)展
_多項(xiàng)式回歸_? ? 這是對(duì)數(shù)據(jù)提供非線性擬合的簡(jiǎn)單方法。
_階躍函數(shù)_??將變量的范圍劃分為??_K個(gè)_??不同的區(qū)域,以生成定性變量。這具有擬合分段常數(shù)函數(shù)的效果。
_回歸樣條_??比多項(xiàng)式和階躍函數(shù)更靈活,并且實(shí)際上是兩者的擴(kuò)展。
_局部樣條曲線_??類似于回歸樣條曲線,但是允許區(qū)域重疊,并且可以平滑地重疊。
_平滑樣條曲線_??也類似于回歸樣條曲線,但是它們最小化平滑度懲罰的殘差平方和準(zhǔn)則 。
_廣義加性模型_??允許擴(kuò)展上述方法以處理多個(gè)預(yù)測(cè)變量。
多項(xiàng)式回歸
這是擴(kuò)展線性模型的最傳統(tǒng)方法。隨著我們?cè)黾?多項(xiàng)式的項(xiàng),多項(xiàng)式回歸使我們能夠生成非線性的曲線,同時(shí)仍使用最小二乘法估計(jì)系數(shù)。
逐步回歸
它經(jīng)常用于生物統(tǒng)計(jì)學(xué)和流行病學(xué)中。
回歸樣條
回歸樣條是?擴(kuò)展多項(xiàng)式和逐步回歸技術(shù)的許多_基本_函數(shù)之一??。事實(shí)上。多項(xiàng)式和逐步回歸函數(shù)只是_基_??函數(shù)的特定情況??。
這是分段三次擬合的示例(左上圖)。
為了解決此問題,更好的解決方案是采用約束,使擬合曲線必須連續(xù)。
選擇結(jié)的位置和數(shù)量
一種選擇是在我們認(rèn)為變化最快的地方放置更多的結(jié),而在更穩(wěn)定的地方放置更少的結(jié)。但是在實(shí)踐中,通常以統(tǒng)一的方式放置結(jié)。
要清楚的是,在這種情況下,實(shí)際上有5個(gè)結(jié),包括邊界結(jié)。
那么我們應(yīng)該使用多少個(gè)結(jié)?一個(gè)簡(jiǎn)單的選擇是嘗試許多個(gè)結(jié),然后看哪個(gè)會(huì)產(chǎn)生最好的曲線。但是,更客觀的方法是使用交叉驗(yàn)證。
與多項(xiàng)式回歸相比,樣條曲線可以顯示出更穩(wěn)定的效果。
平滑樣條線
我們討論了回歸樣條曲線,該樣條曲線是通過指定一組結(jié),生成一系列基函數(shù),然后使用最小二乘法估計(jì)樣條系數(shù)而創(chuàng)建的。平滑樣條曲線是創(chuàng)建樣條曲線的另一種方法。讓我們回想一下,我們的目標(biāo)是找到一些非常適合觀察到的數(shù)據(jù)的函數(shù),即最大限度地減少RSS。但是,如果對(duì)我們的函數(shù)沒有任何限制,我們可以通過選擇精確內(nèi)插所有數(shù)據(jù)的函數(shù)來使RSS設(shè)為零。
選擇平滑參數(shù)Lambda
同樣,我們求助于交叉驗(yàn)證。事實(shí)證明,我們實(shí)際上可以非常有效地計(jì)算LOOCV,以平滑樣條曲線,回歸樣條曲線和其他任意基函數(shù)。
平滑樣條線通常比回歸樣條線更可取,因?yàn)樗鼈兺ǔ?huì)創(chuàng)建更簡(jiǎn)單的模型并具有可比的擬合度。
局部回歸
局部回歸涉及僅使用附近的訓(xùn)練觀測(cè)值來計(jì)算目標(biāo)點(diǎn)_x_?0?處的擬合度? 。
可以通過各種方式執(zhí)行局部回歸,尤其是在涉及擬合_p_??線性回歸模型的多變量方案中尤為明顯??,因此某些變量可以全局?jǐn)M合,而某些局部擬合。
廣義加性模型
GAM模型提供了一個(gè)通用框架,可通過允許每個(gè)變量的非線性函數(shù)擴(kuò)展線性模型,同時(shí)保持可加性。
具有平滑樣條的GAM并不是那么簡(jiǎn)單,因?yàn)椴荒苁褂米钚《?。取而代之?是使用一種稱為_反向擬合_的方法??。
GAM的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
GAM允許將非線性函數(shù)擬合到每個(gè)預(yù)測(cè)變量,以便我們可以自動(dòng)對(duì)標(biāo)準(zhǔn)線性回歸會(huì)遺漏的非線性關(guān)系進(jìn)行建模。我們不需要對(duì)每個(gè)變量分別嘗試許多不同的轉(zhuǎn)換。
非線性擬合可以潛在地對(duì)因變量_Y_做出更準(zhǔn)確的預(yù)測(cè)??。
因?yàn)槟P褪强杉拥?,所以我們?nèi)匀豢梢詸z查每個(gè)預(yù)測(cè)變量對(duì)_Y_的影響,???同時(shí)保持其他變量不變。
缺點(diǎn)
主要局限性在于該模型僅限于累加模型,因此可能會(huì)錯(cuò)過重要的交互作用。
范例
多項(xiàng)式回歸和分段函數(shù)
1. ?library(ISLR)
2. ?attach(Wage)
我們可以輕松地使用來擬合多項(xiàng)式函數(shù),然后指定多項(xiàng)式的變量和次數(shù)。該函數(shù)返回正交多項(xiàng)式的矩陣,這意味著每列是變量的變量的線性組合??age
,??age^2
,??age^3
,和??age^4
。如果要直接獲取變量,可以指定??raw=TRUE
,但這不會(huì)影響預(yù)測(cè)結(jié)果。它可用于檢查所需的系數(shù)估計(jì)。
1. ?fit = lm(wage~poly(age, 4), data=Wage)
2. ?kable(coef(summary(fit)))
現(xiàn)在讓我們創(chuàng)建一個(gè)ages
?我們要預(yù)測(cè)的向量。最后,我們將要繪制數(shù)據(jù)和擬合的4次多項(xiàng)式。
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)
在這個(gè)簡(jiǎn)單的示例中,我們可以使用ANOVA檢驗(yàn) 。
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
?實(shí)質(zhì)上為零,這表明線性擬合是不夠的。因此,我們可以得出結(jié)論,二次方或三次模型可能更適合于此數(shù)據(jù),并且偏向于簡(jiǎn)單模型。
我們也可以使用交叉驗(yàn)證來選擇多項(xiàng)式次數(shù)。
在這里,我們實(shí)際上看到的最小交叉驗(yàn)證誤差是針對(duì)4次多項(xiàng)式的,但是選擇3次或2次模型并不會(huì)造成太大損失。接下來,我們考慮預(yù)測(cè)個(gè)人是否每年收入超過25萬。
但是,概率的置信區(qū)間是不合理的,因?yàn)槲覀冏罱K得到了一些負(fù)概率。為了生成置信區(qū)間,更有意義的是轉(zhuǎn)換對(duì)??_數(shù)_??預(yù)測(cè)。
繪制:
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)
逐步回歸函數(shù)
在這里,我們需要拆分?jǐn)?shù)據(jù)。
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
?樣條函數(shù)
在這里,我們將使用三次樣條。
由于我們使用的是三個(gè)結(jié)的三次樣條,因此生成的樣條具有六個(gè)基函數(shù)。
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個(gè)自由度的樣條曲線,然后通過交叉驗(yàn)證選擇樣條曲線,從而產(chǎn)生6.8個(gè)自由度。
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)
局部回歸
執(zhí)行局部回歸。
GAMs
現(xiàn)在,我們使用GAM通過年份,年齡和受教育程度的樣條來預(yù)測(cè)工資。由于這只是具有多個(gè)基本函數(shù)的線性回歸模型,因此我們僅使用??lm()
?函數(shù)。
為了擬合更復(fù)雜的樣條曲線 ,我們需要使用平滑樣條曲線。
繪制這兩個(gè)模型
year
?是線性的。我們可以創(chuàng)建一個(gè)新模型,然后使用ANOVA檢驗(yàn) 。
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
在具有非線性關(guān)系的模型中,???我們可以再次確認(rèn)year
?對(duì)模型沒有貢獻(xiàn)。
接下來,我們 將局部回歸擬合GAM ?。
在調(diào)用GAM之前,我們還可以使用局部回歸來創(chuàng)建交互項(xiàng)。
我們可以 繪制結(jié)果曲面圖? 。
數(shù)據(jù)獲取
在下面公眾號(hào)后臺(tái)回復(fù)“工資數(shù)據(jù)”,可獲取完整數(shù)據(jù)。
點(diǎn)擊文末“閱讀原文”
獲取全文完整資料。
本文選自《R語言里的非線性模型:多項(xiàng)式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
MATLAB最小二乘法:線性最小二乘、加權(quán)線性最小二乘、穩(wěn)健最小二乘、非線性最小二乘與剔除異常值效果比較
數(shù)據(jù)分享|R語言廣義線性模型GLM:線性最小二乘、對(duì)數(shù)變換、泊松、二項(xiàng)式邏輯回歸分析冰淇淋銷售時(shí)間序列數(shù)據(jù)和模擬
生態(tài)學(xué)模擬對(duì)廣義線性混合模型GLMM進(jìn)行功率(功效、效能、效力)分析power analysis環(huán)境監(jiān)測(cè)數(shù)據(jù)
廣義線性模型glm泊松回歸的lasso、彈性網(wǎng)絡(luò)分類預(yù)測(cè)學(xué)生考試成績(jī)數(shù)據(jù)和交叉驗(yàn)證
有限混合模型聚類FMM、廣義線性回歸模型GLM混合應(yīng)用分析威士忌市場(chǎng)和研究專利申請(qǐng)數(shù)據(jù)
R語言貝葉斯廣義線性混合(多層次/水平/嵌套)模型GLMM、邏輯回歸分析教育留級(jí)影響因素?cái)?shù)據(jù)
R語言貝葉斯MCMC:GLM邏輯回歸、Rstan線性回歸、Metropolis Hastings與Gibbs采樣算法實(shí)例
R語言用lme4多層次(混合效應(yīng))廣義線性模型(GLM),邏輯回歸分析教育留級(jí)調(diào)查數(shù)據(jù)
R語言廣義線性模型GLM、多項(xiàng)式回歸和廣義可加模型GAM預(yù)測(cè)泰坦尼克號(hào)幸存者
R語言用Rshiny探索lme4廣義線性混合模型(GLMM)和線性混合模型(LMM)
R語言使用bootstrap和增量法計(jì)算廣義線性模型(GLM)預(yù)測(cè)置信區(qū)間
R語言廣義線性模型(GLMs)算法和零膨脹模型分析
R語言中廣義線性模型(GLM)中的分布和連接函數(shù)分析
R語言中GLM(廣義線性模型),非線性和異方差可視化分析
R語言中的廣義線性模型(GLM)和廣義相加模型(GAM):多元(平滑)回歸分析保險(xiǎn)資金投資組合信用風(fēng)險(xiǎn)敞口
用廣義加性模型GAM進(jìn)行時(shí)間序列分析
R和Python機(jī)器學(xué)習(xí):廣義線性回歸glm,樣條glm,梯度增強(qiáng),隨機(jī)森林和深度學(xué)習(xí)模型分析
在r語言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時(shí)間序列分析
用廣義加性模型GAM進(jìn)行時(shí)間序列分析
R和Python機(jī)器學(xué)習(xí):廣義線性回歸glm,樣條glm,梯度增強(qiáng),隨機(jī)森林和深度學(xué)習(xí)模型分析
在r語言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時(shí)間序列分析