全文連結: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分析
在這裡,我們放寬了流行的線性方法的假設。有時線性假設只是一個很差的近似值。有許多方法可以解決此問題,其中一些方法可以通過使用正則化方法降低模型複雜性來 解決 。但是,這些技術仍然使用線性模型,到目前為止只能進行改進。本文本專注於線性模型的擴展
多項式回歸
這是擴展線性模型的最傳統方法。隨著我們增加 多項式的項,多項式回歸使我們能夠生成非線性的曲線,同時仍使用最小二乘法估計係數。
點擊標題查閱往期內容
使用R語言進行多項式回歸、非線性回歸模型曲線擬合
左右滑動查看更多
01
02
03
04
逐步回歸
它經常用於生物統計學和流行病學中。
回歸樣條
回歸樣條是 擴展多項式和逐步回歸技術的許多_基本_函數之一 。事實上。多項式和逐步回歸函數只是_基_ 函數的特定情況 。
這是分段三次擬合的示例(左上圖)。
為了解決此問題,更好的解決方案是採用約束,使擬合曲線必須連續。
選擇結的位置和數量
一種選擇是在我們認為變化最快的地方放置更多的結,而在更穩定的地方放置更少的結。但是在實踐中,通常以統一的方式放置結。
要清楚的是,在這種情況下,實際上有5個結,包括邊界結。
那麼我們應該使用多少個結?一個簡單的選擇是嘗試許多個結,然後看哪個會產生最好的曲線。但是,更客觀的方法是使用交叉驗證。
與多項式回歸相比,樣條曲線可以顯示出更穩定的效果。
平滑樣條線
我們討論了回歸樣條曲線,該樣條曲線是通過指定一組結,生成一系列基函數,然後使用最小二乘法估計樣條係數而創建的。平滑樣條曲線是創建樣條曲線的另一種方法。讓我們回想一下,我們的目標是找到一些非常適合觀察到的數據的函數,即最大限度地減少RSS。但是,如果對我們的函數沒有任何限制,我們可以通過選擇精確內插所有數據的函數來使RSS設為零。
選擇平滑參數Lambda
同樣,我們求助於交叉驗證。事實證明,我們實際上可以非常有效地計算LOOCV,以平滑樣條曲線,回歸樣條曲線和其他任意基函數。
平滑樣條線通常比回歸樣條線更可取,因為它們通常會創建更簡單的模型並具有可比的擬合度。
局部回歸
局部回歸涉及僅使用附近的訓練觀測值來計算目標點_x_ 0 處的擬合度 。
可以通過各種方式執行局部回歸,尤其是在涉及擬合_p_ 線性回歸模型的多變量方案中尤為明顯 ,因此某些變量可以全局擬合,而某些局部擬合。
廣義加性模型
GAM模型提供了一個通用框架,可通過允許每個變量的非線性函數擴展線性模型,同時保持可加性。
具有平滑樣條的GAM並不是那麼簡單,因為不能使用最小二乘。取而代之的 是使用一種稱為_反向擬合_的方法 。
GAM的優缺點
優點
缺點
範例
多項式回歸和分段函數
1. library(ISLR)
2. attach(Wage)
我們可以輕鬆地使用來擬合多項式函數,然後指定多項式的變量和次數。該函數返回正交多項式的矩陣,這意味著每列是變量的變量的線性組合 age, age^2, age^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(廣義相加模型)進行電力負荷時間序列分析