【視頻】什么是非線性模型與R語言多項式回歸、局部平滑樣條、 廣義相加GAM分析工資數(shù)
全文鏈接:http://tecdat.cn/?p=9706
最近我們被客戶要求撰寫關(guān)于的研究報告,包括一些圖形和統(tǒng)計輸出。
在這文中,我將介紹非線性回歸的基礎(chǔ)知識。非線性回歸是一種對因變量和一組自變量之間的非線性關(guān)系進行建模的方法。最后我們用R語言非線性模型預(yù)測個人工資數(shù)據(jù)是否每年收入超過25萬
這些數(shù)據(jù)點對應(yīng)于一段時間內(nèi)的中國國內(nèi)生產(chǎn)總值或 GDP。
第一欄是年份,第二欄是中國當年相應(yīng)的年國內(nèi)總收入。這就是數(shù)據(jù)點的樣子?,F(xiàn)在,我們有幾個有趣的問題。
首先,GDP可以根據(jù)時間來預(yù)測嗎?
其次,我們可以使用簡單的線性回歸對其進行建模嗎?

的確。如果數(shù)據(jù)顯示曲線趨勢,則與非線性回歸相比,線性回歸不會產(chǎn)生非常準確的結(jié)果。僅僅是因為,顧名思義,線性回歸假定數(shù)據(jù)是線性的。

散點圖顯示 GDP 與時間之間似乎存在很強的關(guān)系,但這種關(guān)系不是線性的。如您所見,增長開始緩慢,然后從 2005 年開始,增長非常顯著。最后,它在 2010 年代略有減速。它看起來像邏輯函數(shù)或指數(shù)函數(shù)。因此,它需要一種特殊的非線性回歸過程估計方法。

存在許多不同的回歸,可用于擬合數(shù)據(jù)集的外觀。你可以在這里看到二次和三次回歸線,它可以無限延伸。本質(zhì)上,我們可以將所有這些稱為多項式回歸,其中自變量 X 和因變量 Y 之間的關(guān)系被建模為 X 中的 N 次多項式。有多種回歸類型可供選擇,很有可能其中一個將非常適合您的數(shù)據(jù)集。請記住,選擇最適合數(shù)據(jù)的回歸非常重要。

什么是多項式回歸?
多項式回歸將曲線擬合到您的數(shù)據(jù)。Thetas 是要估計的參數(shù),使模型完全適合基礎(chǔ)數(shù)據(jù)。雖然這里 X 和 Y 之間的關(guān)系是非線性的,多項式回歸無法擬合它們,但多項式回歸模型仍然可以表示為線性回歸。

給定三次多項式方程,將模型轉(zhuǎn)換為具有新變量的簡單線性回歸。這個模型在要估計的參數(shù)中是線性的,對吧?
因此,這種多項式回歸被認為是傳統(tǒng)多元線性回歸的一個特例。因此,您可以使用與線性回歸相同的機制來解決此類問題。因此,多項式回歸模型可以使用最小二乘模型進行擬合。最小二乘法是一種通過最小化給定數(shù)據(jù)集中觀察到的因變量與線性函數(shù)預(yù)測的因變量之間差異的平方和來估計線性回歸模型中未知參數(shù)的方法。

什么是非線性回歸?
首先,非線性回歸是一種對因變量和一組自變量之間的非線性關(guān)系建模的方法。
其次,對于一個被認為是非線性的模型,Y必須是參數(shù)Theta的非線性函數(shù),不一定是特征X。當涉及到非線性方程時,它可以是指數(shù),對數(shù),和邏輯函數(shù),或許多其他類型。正如您在所有這些方程中看到的那樣,Y 的變化取決于參數(shù) Theta 的變化,不一定只取決于 X。也就是說,在非線性回歸中,模型在參數(shù)上是非線性的。與線性回歸相比,我們不能使用普通的最小二乘法來擬合非線性回歸中的數(shù)據(jù)。一般來說,參數(shù)的估計并不容易。

讓我在這里回答兩個重要的問題。
首先,我怎樣才能以簡單的方式知道問題是線性的還是非線性的?
要回答這個問題,我們必須做兩件事。首先是直觀地確定關(guān)系是線性的還是非線性的。最好用每個輸入變量繪制輸出變量的雙變量圖。此外,您可以計算自變量和因變量之間的相關(guān)系數(shù),如果所有變量的相關(guān)系數(shù)為 0.7 或更高,則存在線性趨勢,因此不適合擬合非線性回歸。我們要做的第二件事是當我們無法準確地建模與線性參數(shù)的關(guān)系時,使用非線性回歸而不是線性回歸。

第二個重要問題是,如果我的數(shù)據(jù)在散點圖上顯示為非線性,我應(yīng)該如何建模?
要解決這個問題,您必須使用多項式回歸、使用非線性回歸模型或轉(zhuǎn)換您的數(shù)據(jù)。
R語言里的非線性模型:多項式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析
在這里,我們放寬了流行的線性方法的假設(shè)。有時線性假設(shè)只是一個很差的近似值。有許多方法可以解決此問題,其中一些方法可以通過使用正則化方法降低模型復(fù)雜性來??解決??。但是,這些技術(shù)仍然使用線性模型,到目前為止只能進行改進。本文本專注于線性模型的擴展
多項式回歸? ? 這是對數(shù)據(jù)提供非線性擬合的簡單方法。
階躍函數(shù)??將變量的范圍劃分為??K個??不同的區(qū)域,以生成定性變量。這具有擬合分段常數(shù)函數(shù)的效果。
回歸樣條??比多項式和階躍函數(shù)更靈活,并且實際上是兩者的擴展。
局部樣條曲線??類似于回歸樣條曲線,但是允許區(qū)域重疊,并且可以平滑地重疊。
平滑樣條曲線??也類似于回歸樣條曲線,但是它們最小化平滑度懲罰的殘差平方和準則 。
廣義加性模型??允許擴展上述方法以處理多個預(yù)測變量。
多項式回歸
這是擴展線性模型的最傳統(tǒng)方法。隨著我們增加?多項式的項,多項式回歸使我們能夠生成非線性的曲線,同時仍使用最小二乘法估計系數(shù)。

點擊標題查閱往期內(nèi)容

使用R語言進行多項式回歸、非線性回歸模型曲線擬合

左右滑動查看更多

01

02

03

04

逐步回歸
它經(jīng)常用于生物統(tǒng)計學(xué)和流行病學(xué)中。

回歸樣條
回歸樣條是?擴展多項式和逐步回歸技術(shù)的許多_基本_函數(shù)之一??。事實上。多項式和逐步回歸函數(shù)只是_基_??函數(shù)的特定情況??。
這是分段三次擬合的示例(左上圖)。

為了解決此問題,更好的解決方案是采用約束,使擬合曲線必須連續(xù)。
選擇結(jié)的位置和數(shù)量
一種選擇是在我們認為變化最快的地方放置更多的結(jié),而在更穩(wěn)定的地方放置更少的結(jié)。但是在實踐中,通常以統(tǒng)一的方式放置結(jié)。
要清楚的是,在這種情況下,實際上有5個結(jié),包括邊界結(jié)。
那么我們應(yīng)該使用多少個結(jié)?一個簡單的選擇是嘗試許多個結(jié),然后看哪個會產(chǎn)生最好的曲線。但是,更客觀的方法是使用交叉驗證。
與多項式回歸相比,樣條曲線可以顯示出更穩(wěn)定的效果。
平滑樣條線
我們討論了回歸樣條曲線,該樣條曲線是通過指定一組結(jié),生成一系列基函數(shù),然后使用最小二乘法估計樣條系數(shù)而創(chuàng)建的。平滑樣條曲線是創(chuàng)建樣條曲線的另一種方法。讓我們回想一下,我們的目標是找到一些非常適合觀察到的數(shù)據(jù)的函數(shù),即最大限度地減少RSS。但是,如果對我們的函數(shù)沒有任何限制,我們可以通過選擇精確內(nèi)插所有數(shù)據(jù)的函數(shù)來使RSS設(shè)為零。
選擇平滑參數(shù)Lambda
同樣,我們求助于交叉驗證。事實證明,我們實際上可以非常有效地計算LOOCV,以平滑樣條曲線,回歸樣條曲線和其他任意基函數(shù)。
平滑樣條線通常比回歸樣條線更可取,因為它們通常會創(chuàng)建更簡單的模型并具有可比的擬合度。
局部回歸
局部回歸涉及僅使用附近的訓(xùn)練觀測值來計算目標點_x_?0?處的擬合度? 。
可以通過各種方式執(zhí)行局部回歸,尤其是在涉及擬合_p_??線性回歸模型的多變量方案中尤為明顯??,因此某些變量可以全局擬合,而某些局部擬合。

廣義加性模型
GAM模型提供了一個通用框架,可通過允許每個變量的非線性函數(shù)擴展線性模型,同時保持可加性。
具有平滑樣條的GAM并不是那么簡單,因為不能使用最小二乘。取而代之的?是使用一種稱為_反向擬合_的方法??。
GAM的優(yōu)缺點
優(yōu)點
GAM允許將非線性函數(shù)擬合到每個預(yù)測變量,以便我們可以自動對標準線性回歸會遺漏的非線性關(guān)系進行建模。我們不需要對每個變量分別嘗試許多不同的轉(zhuǎn)換。
非線性擬合可以潛在地對因變量_Y_做出更準確的預(yù)測??。
因為模型是可加的,所以我們?nèi)匀豢梢詸z查每個預(yù)測變量對_Y_的影響,???同時保持其他變量不變。
缺點
主要局限性在于該模型僅限于累加模型,因此可能會錯過重要的交互作用。
范例
多項式回歸和分段函數(shù)
1. ?library(ISLR) ? ?2. ?attach(Wage) ? ?
我們可以輕松地使用來擬合多項式函數(shù),然后指定多項式的變量和次數(shù)。該函數(shù)返回正交多項式的矩陣,這意味著每列是變量的變量的線性組合??age
,??age^2
,??age^3
,和??age^4
。如果要直接獲取變量,可以指定??raw=TRUE
,但這不會影響預(yù)測結(jié)果。它可用于檢查所需的系數(shù)估計。
1. ?fit = lm(wage~poly(age, 4), data=Wage) ? ?2. ?kable(coef(summary(fit))) ? ?

現(xiàn)在讓我們創(chuàng)建一個ages
?我們要預(yù)測的向量。最后,我們將要繪制數(shù)據(jù)和擬合的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
?實質(zhì)上為零,這表明線性擬合是不夠的。因此,我們可以得出結(jié)論,二次方或三次模型可能更適合于此數(shù)據(jù),并且偏向于簡單模型。
我們也可以使用交叉驗證來選擇多項式次數(shù)。
在這里,我們實際上看到的最小交叉驗證誤差是針對4次多項式的,但是選擇3次或2次模型并不會造成太大損失。接下來,我們考慮預(yù)測個人是否每年收入超過25萬。
但是,概率的置信區(qū)間是不合理的,因為我們最終得到了一些負概率。為了生成置信區(qū)間,更有意義的是轉(zhuǎn)換對??數(shù)??預(yù)測。
繪制:
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ù)
在這里,我們需要拆分數(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ù)
在這里,我們將使用三次樣條。
由于我們使用的是三個結(jié)的三次樣條,因此生成的樣條具有六個基函數(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個自由度的樣條曲線,然后通過交叉驗證選擇樣條曲線,從而產(chǎn)生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)
局部回歸
執(zhí)行局部回歸。
GAMs
現(xiàn)在,我們使用GAM通過年份,年齡和受教育程度的樣條來預(yù)測工資。由于這只是具有多個基本函數(shù)的線性回歸模型,因此我們僅使用??lm()
?函數(shù)。
為了擬合更復(fù)雜的樣條曲線 ,我們需要使用平滑樣條曲線。
繪制這兩個模型
year
?是線性的。我們可以創(chuàng)建一個新模型,然后使用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
? ?
在具有非線性關(guān)系的模型中,???我們可以再次確認year
?對模型沒有貢獻。
接下來,我們 將局部回歸擬合GAM ?。
在調(diào)用GAM之前,我們還可以使用局部回歸來創(chuàng)建交互項。
我們可以 繪制結(jié)果曲面圖? 。


點擊文末?“閱讀原文”
獲取全文完整資料。
本文選自《R語言里的非線性模型:多項式回歸、局部樣條、平滑樣條、 廣義相加模型GAM分析》。

點擊標題查閱往期內(nèi)容
MATLAB最小二乘法:線性最小二乘、加權(quán)線性最小二乘、穩(wěn)健最小二乘、非線性最小二乘與剔除異常值效果比較
數(shù)據(jù)分享|R語言廣義線性模型GLM:線性最小二乘、對數(shù)變換、泊松、二項式邏輯回歸分析冰淇淋銷售時間序列數(shù)據(jù)和模擬
生態(tài)學(xué)模擬對廣義線性混合模型GLMM進行功率(功效、效能、效力)分析power analysis環(huán)境監(jiān)測數(shù)據(jù)
廣義線性模型glm泊松回歸的lasso、彈性網(wǎng)絡(luò)分類預(yù)測學(xué)生考試成績數(shù)據(jù)和交叉驗證
有限混合模型聚類FMM、廣義線性回歸模型GLM混合應(yīng)用分析威士忌市場和研究專利申請數(shù)據(jù)
R語言貝葉斯廣義線性混合(多層次/水平/嵌套)模型GLMM、邏輯回歸分析教育留級影響因素數(shù)據(jù)
R語言貝葉斯MCMC:GLM邏輯回歸、Rstan線性回歸、Metropolis Hastings與Gibbs采樣算法實例
R語言用lme4多層次(混合效應(yīng))廣義線性模型(GLM),邏輯回歸分析教育留級調(diào)查數(shù)據(jù)
R語言廣義線性模型GLM、多項式回歸和廣義可加模型GAM預(yù)測泰坦尼克號幸存者
R語言用Rshiny探索lme4廣義線性混合模型(GLMM)和線性混合模型(LMM)
R語言使用bootstrap和增量法計算廣義線性模型(GLM)預(yù)測置信區(qū)間
R語言廣義線性模型(GLMs)算法和零膨脹模型分析
R語言中廣義線性模型(GLM)中的分布和連接函數(shù)分析
R語言中GLM(廣義線性模型),非線性和異方差可視化分析
R語言中的廣義線性模型(GLM)和廣義相加模型(GAM):多元(平滑)回歸分析保險資金投資組合信用風(fēng)險敞口
用廣義加性模型GAM進行時間序列分析
R和Python機器學(xué)習(xí):廣義線性回歸glm,樣條glm,梯度增強,隨機森林和深度學(xué)習(xí)模型分析
在r語言中使用GAM(廣義相加模型)進行電力負荷時間序列分析
用廣義加性模型GAM進行時間序列分析
R和Python機器學(xué)習(xí):廣義線性回歸glm,樣條glm,梯度增強,隨機森林和深度學(xué)習(xí)模型分析
在r語言中使用GAM(廣義相加模型)進行電力負荷時間序列分析