用多項式迴歸檢查非線性
有時使用線性迴歸時,我們需要檢查資料中的非線性。一種方法是擬合多項式模型,並檢查它是否比線性模型更適合資料。還有其他原因,例如理論,表明適合二次或更高階模型,因為人們認為變數關係本質上是多項式的。
讓我們擬合 mtcars
資料集的二次模型。對於線性模型,請參閱 mtcars 資料集上的線性迴歸 。
首先,我們製作變數 mpg
(Miles / gallon),disp
(Displacement(cu.in。))和 wt
(Weight(1000 lbs))的散點圖。mpg
和 disp
之間的關係看起來是非線性的。
plot(mtcars[,c("mpg","disp","wt")])
線性擬合將表明 disp
不重要。
fit0 = lm(mpg ~ wt+disp, mtcars)
summary(fit0)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 34.96055 2.16454 16.151 4.91e-16 ***
#wt -3.35082 1.16413 -2.878 0.00743 **
#disp -0.01773 0.00919 -1.929 0.06362 .
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Residual standard error: 2.917 on 29 degrees of freedom
#Multiple R-squared: 0.7809, Adjusted R-squared: 0.7658
然後,為了得到二次模型的結果,我們新增了 I(disp^2)
。在檢視 R^2
時,新模型看起來更好,所有變數都很重要。
fit1 = lm(mpg ~ wt+disp+I(disp^2), mtcars)
summary(fit1)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 41.4019837 2.4266906 17.061 2.5e-16 ***
#wt -3.4179165 0.9545642 -3.581 0.001278 **
#disp -0.0823950 0.0182460 -4.516 0.000104 ***
#I(disp^2) 0.0001277 0.0000328 3.892 0.000561 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Residual standard error: 2.391 on 28 degrees of freedom
#Multiple R-squared: 0.8578, Adjusted R-squared: 0.8426
由於我們有三個變數,擬合模型是一個表示為:
mpg = 41.4020-3.4179*wt-0.0824*disp+0.0001277*disp^2
另一種指定多項式迴歸的方法是使用 poly
和引數 raw=TRUE
,否則將考慮正交多項式 (更多資訊請參見 help(ploy)
)。我們得到相同的結果:
summary(lm(mpg ~ wt+poly(disp, 2, raw=TRUE),mtcars))
最後,如果我們需要顯示估計表面的圖表怎麼辦?那麼有很多選擇可以在 R
製作 3D
地塊。這裡我們使用 p3d
package 的 Fit3d
。
library(p3d)
Init3d(family="serif", cex = 1)
Plot3d(mpg ~ disp+wt, mtcars)
Axes3d()
Fit3d(fit1)