偏最小二乘回归是一种回归形式 。 当使用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