原文鏈接:http://tecdat.cn/?p=9706
總覽
在這里,我們放寬了流行的線性方法的假設。有時線性假設只是一個很差的近似值。有許多方法可以解決此問題,其中一些方法可以通過使用正則化方法降低模型復雜性來 解決 。但是,這些技術仍然使用線性模型,到目前為止只能進行改進。本文本專注於線性模型的擴展
-
多項式回歸 這是對數據提供非線性擬合的簡單方法。
-
階躍函數 將變量的范圍划分為 K個 不同的區域,以生成定性變量。這具有擬合分段常數函數的效果。
-
回歸樣條 比多項式和階躍函數更靈活,並且實際上是兩者的擴展。
-
局部樣條曲線 類似於回歸樣條曲線,但是允許區域重疊,並且可以平滑地重疊。
-
平滑樣條曲線 也類似於回歸樣條曲線,但是它們最小化平滑度懲罰的殘差平方和准則 。
-
廣義加性模型 允許擴展上述方法以處理多個預測變量。
回歸樣條
回歸樣條是 擴展多項式和逐步回歸技術的許多基本函數之一 。事實上。多項式和逐步回歸函數只是基 函數的特定情況 。
這是分段三次擬合的示例(左上圖)。

為了解決此問題,更好的解決方案是采用約束,使擬合曲線必須連續。
平滑樣條線
我們討論了回歸樣條曲線,該樣條曲線是通過指定一組結,生成一系列基函數,然后使用最小二乘法估計樣條系數而創建的。平滑樣條曲線是創建樣條曲線的另一種方法。讓我們回想一下,我們的目標是找到一些非常適合觀察到的數據的函數,即最大限度地減少RSS。但是,如果對我們的函數沒有任何限制,我們可以通過選擇精確內插所有數據的函數來使RSS設為零。
局部回歸
局部回歸涉及僅使用附近的訓練觀測值來計算目標點x 0 處的擬合度 。
可以通過各種方式執行局部回歸,尤其是在涉及擬合p 線性回歸模型的多變量方案中尤為明顯 ,因此某些變量可以全局擬合,而某些局部擬合。

廣義加性模型
GAM模型提供了一個通用框架,可通過允許每個變量的非線性函數擴展線性模型,同時保持可加性。
具有平滑樣條的GAM並不是那么簡單,因為不能使用最小二乘。取而代之的 是使用一種稱為反向擬合的方法 。
GAM的優缺點
優點
-
GAM允許將非線性函數擬合到每個預測變量,以便我們可以自動對標准線性回歸會遺漏的非線性關系進行建模。我們不需要對每個變量分別嘗試許多不同的轉換。
-
非線性擬合可以潛在地對因變量Y做出更准確的預測 。
-
因為模型是可加的,所以我們仍然可以檢查每個預測變量對Y的影響, 同時保持其他變量不變。
缺點
- 主要局限性在於該模型僅限於累加模型,因此可能會錯過重要的交互作用。
范例
多項式回歸和階躍函數
-
library(ISLR)
-
attach(Wage)
我們可以輕松地使用來擬合多項式函數,然后指定多項式的變量和次數。該函數返回正交多項式的矩陣,這意味着每列是變量的變量的線性組合 age, age^2, age^3,和 age^4。如果要直接獲取變量,可以指定 raw=TRUE,但這不會影響預測結果。它可用於檢查所需的系數估計。
-
fit = lm(wage~poly(age, 4), data=Wage)
-
kable(coef(summary(fit)))
現在讓我們創建一個ages 我們要預測的向量。最后,我們將要繪制數據和擬合的4次多項式。
-
ageLims <- range(age)
-
age.grid <- seq(from=ageLims[ 1], to=ageLims[2])
-
-
pred <- predict(fit, newdata = list(age = age.grid),
-
se= TRUE)
-
plot(age,wage,xlim=ageLims ,cex= .5,col="darkgrey")
-
lines(age.grid,pred$fit,lwd= 2,col="blue")
-
matlines(age.grid,se.bands,lwd= 2,col="blue",lty=3)
在這個簡單的示例中,我們可以使用ANOVA檢驗 。
-
-
# # Analysis of Variance Table
-
-
-
-
-
-
-
-
-
-
-
-
-
-
我們看到,_M_1 與二次模型 相比,p值 _M_2 實質上為零,這表明線性擬合是不夠的。 因此,我們可以得出結論,二次方或三次模型可能更適合於此數據,並且偏向於簡單模型。
我們也可以使用交叉驗證來選擇多項式次數。

在這里,我們實際上看到的最小交叉驗證誤差是針對4次多項式的,但是選擇3次或2次模型並不會造成太大損失。接下來,我們考慮預測個人是否每年收入超過25萬。
但是,概率的置信區間是不合理的,因為我們最終得到了一些負概率。為了生成置信區間,更有意義的是轉換對 數 預測。
繪制:
-
plot(age,I(wage> 250),xlim=ageLims ,type="n",ylim=c(0,.2))
-
lines(age.grid,pfit,lwd= 2, col="blue")
-
matlines(age.grid,se.bands,lwd= 1,col="blue",lty=3)

逐步回歸函數
在這里,我們需要拆分數據。
table(cut(age, 4))
-
##
-
## (17 .9,33.5] (33.5,49] (49,64.5] (64.5,80.1]
-
## 750 1399 779 72
-
fit <- lm(wage~cut(age, 4), data=Wage)
-
coef(summary(fit))
splines 樣條函數
在這里,我們將使用三次樣條。

由於我們使用的是三個結的三次樣條,因此生成的樣條具有六個基函數。
-
-
# # [1] 3000 6
-
dim(bs(age, df=6))
-
-
# # [1] 3000 6
-
-
擬合樣條曲線。
我們也可以擬合平滑樣條。在這里,我們擬合具有16個自由度的樣條曲線,然后通過交叉驗證選擇樣條曲線,從而產生6.8個自由度。
-
-
fit2$df
-
-
## [1] 6.795
-
lines(fit, col='red', lwd=2)
-
lines(fit2, col='blue', lwd=1)
-
legend('topright', legend=c('16 DF', '6.8 DF'),
-
col=c('red','blue'), lty=1, lwd=2, cex=0.8)
-

GAMs
現在,我們使用GAM通過年份,年齡和受教育程度的樣條來預測工資。由於這只是具有多個基本函數的線性回歸模型,因此我們僅使用 lm() 函數。
為了擬合更復雜的樣條曲線 ,我們需要使用平滑樣條曲線。
繪制這兩個模型


year 是線性的。我們可以創建一個新模型,然后使用ANOVA檢驗 。
-
-
# # Analysis of Variance Table
-
-
-
-
-
-
-
-
-
-
似乎添加線性year 成分要比不添加線性 成分的GAM好得多。
-
-
# #
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
在具有非線性關系的模型中, 我們可以再次確認year 對模型沒有貢獻。
接下來,我們 將局部回歸擬合GAM 。



在調用GAM之前,我們還可以使用局部回歸來創建交互項。
我們可以 繪制結果曲面圖 。



參考文獻
3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)
5.R語言回歸中的Hosmer-Lemeshow擬合優度檢驗
6.r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現
9.R語言如何在生存分析與Cox回歸中計算IDI,NRI指標




