偏最小二乘迴歸是一種迴歸形式 。 當使用pls時,新 的線性組合有助於解釋模型中的自變量和因變量。dom
在本文中,咱們將使用pls在「 Mroz」數據集中預測「收入」。 ide
library(pls);library(Ecdat)
data("Mroz") str(Mroz)
## 'data.frame': 753 obs. of 18 variables: ## $ work : Factor w/ 2 levels "yes","no": 2 2 2 2 2 2 2 2 2 2 ... ## $ hoursw : int 1610 1656 1980 456 1568 2032 1440 1020 1458 1600 ... ## $ child6 : int 1 0 1 0 1 0 0 0 0 0 ... ## $ child618 : int 0 2 3 3 2 0 2 0 2 2 ... ## $ agew : int 32 30 35 34 31 54 37 54 48 39 ... ## $ educw : int 12 12 12 12 14 12 16 12 12 12 ... ## $ hearnw : num 3.35 1.39 4.55 1.1 4.59 ... ## $ wagew : num 2.65 2.65 4.04 3.25 3.6 4.7 5.95 9.98 0 4.15 ... ## $ hoursh : int 2708 2310 3072 1920 2000 1040 2670 4120 1995 2100 ... ## $ ageh : int 34 30 40 53 32 57 37 53 52 43 ... ## $ educh : int 12 9 12 10 12 11 12 8 4 12 ... ## $ wageh : num 4.03 8.44 3.58 3.54 10 ... ## $ income : int 16310 21800 21040 7300 27300 19495 21152 18900 20405 20425 ... ## $ educwm : int 12 7 12 7 12 14 14 3 7 7 ... ## $ educwf : int 7 7 7 7 14 7 7 3 7 7 ... ## $ unemprate : num 5 11 5 5 9.5 7.5 5 5 3 5 ... ## $ city : Factor w/ 2 levels "no","yes": 1 2 1 1 2 2 1 1 1 1 ... ## $ experience: int 14 5 15 6 7 33 11 35 24 21 ...
首先,咱們必須經過將數據分爲訓練和測試集來準備數據。 函數
set.seed(777) train<-sample(c(T,F),nrow(Mroz),rep=T) #50/50 訓練/測試拆分 test<-(!train)
在上面的代碼中,咱們設置「 set.seed函數」以確保可重複性。而後,咱們建立了「 train」對象 。 測試
如今,咱們使用 「plsr」函數建立模型,而後使用「 summary」函數檢查結果。咱們 使用交叉驗證。下面是代碼。spa
## Data: X dimension: 392 17 ## Y dimension: 392 1 ## Fit method: kernelpls ## Number of components considered: 17 ## ## VALIDATION: RMSEP ## Cross-validated using 10 random segments. ## (Intercept) 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps ## CV 11218 8121 6701 6127 5952 5886 5857 ## adjCV 11218 8114 6683 6108 5941 5872 5842 ## 7 comps 8 comps 9 comps 10 comps 11 comps 12 comps 13 comps ## CV 5853 5849 5854 5853 5853 5852 5852 ## adjCV 5837 5833 5837 5836 5836 5835 5835 ## 14 comps 15 comps 16 comps 17 comps ## CV 5852 5852 5852 5852 ## adjCV 5835 5835 5835 5835 ## ## TRAINING: % variance explained ## 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps 7 comps ## X 17.04 26.64 37.18 49.16 59.63 64.63 69.13 ## income 49.26 66.63 72.75 74.16 74.87 75.25 75.44 ## 8 comps 9 comps 10 comps 11 comps 12 comps 13 comps 14 comps ## X 72.82 76.06 78.59 81.79 85.52 89.55 92.14 ## income 75.49 75.51 75.51 75.52 75.52 75.52 75.52 ## 15 comps 16 comps 17 comps ## X 94.88 97.62 100.00 ## income 75.52 75.52 75.52
輸出包括「驗證」部分中均方根偏差 。由於有17個獨立變量,因此有17個成分。 能夠看到,在成分3或4以後,因變量中解釋的方差幾乎沒有改善。下面是這些結果圖的代碼。 code
咱們將使用咱們的模型進行預測。 component
此後,咱們計算均方偏差。這是經過從測試集的因變量中減去咱們的預測模型的結果來完成的。而後,咱們對這些信息求平方並計算平均值。 orm
mean((pls.pred-Mroz$income\[test\])^2)
## \[1\] 63386682
咱們使用傳統的最小二乘迴歸模型運行數據並比較結果。對象
## \[1\] 59432814
最小二乘模型比偏最小二乘模型好一點,可是若是看一下模型,咱們會看到幾個不重要的變量。咱們刪除這些,看看結果如何 `````` summary(lm.fit)
## ## Call: ## lm(formula = income ~ ., data = Mroz, subset = train) ## ## Residuals: ## Min 1Q Median 3Q Max ## -20131 -2923 -1065 1670 36246 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) -1.946e+04 3.224e+03 -6.036 3.81e-09 *** ## workno -4.823e+03 1.037e+03 -4.651 4.59e-06 *** ## hoursw 4.255e+00 5.517e-01 7.712 1.14e-13 *** ## child6 -6.313e+02 6.694e+02 -0.943 0.346258 ## child618 4.847e+02 2.362e+02 2.052 0.040841 * ## agew 2.782e+02 8.124e+01 3.424 0.000686 *** ## educw 1.268e+02 1.889e+02 0.671 0.502513 ## hearnw 6.401e+02 1.420e+02 4.507 8.79e-06 *** ## wagew 1.945e+02 1.818e+02 1.070 0.285187 ## hoursh 6.030e+00 5.342e-01 11.288 < 2e-16 *** ## ageh -9.433e+01 7.720e+01 -1.222 0.222488 ## educh 1.784e+02 1.369e+02 1.303 0.193437 ## wageh 2.202e+03 8.714e+01 25.264 < 2e-16 *** ## educwm -4.394e+01 1.128e+02 -0.390 0.697024 ## educwf 1.392e+02 1.053e+02 1.322 0.186873 ## unemprate -1.657e+02 9.780e+01 -1.694 0.091055 . ## cityyes -3.475e+02 6.686e+02 -0.520 0.603496 ## experience -1.229e+02 4.490e+01 -2.737 0.006488 ** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 5668 on 374 degrees of freedom ## Multiple R-squared: 0.7552, Adjusted R-squared: 0.744 ## F-statistic: 67.85 on 17 and 374 DF, p-value: < 2.2e-16
lm.pred<-predict(lm.fit,Mroz\[test,\]) mean((lm.pred-Mroz$income\[test\])^2)
## \[1\] 57839715
偏差下降不少,這代表最小二乘迴歸模型優於偏最小二乘模型。此外, 偏最小二乘模型很難解釋。所以,最小二乘模型是最受歡迎的模型。ip