R语言实现偏最小二乘回归法 partial least squares (PLS)回归

时间:2022-07-25
本文章向大家介绍R语言实现偏最小二乘回归法 partial least squares (PLS)回归,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

原文链接:http://tecdat.cn/?p=8652

偏最小二乘回归是一种回归形式 。  当使用pls时,新 的线性组合有助于解释模型中的自变量和因变量。

在本文中,我们将使用pls在“ Mroz”数据集中使用预测“收入”。  

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 train/test splittest<-(!train)

在上面的代码中,我们设置“ set.seed函数”以确保重复。然后,我们创建了“ train”对象 。 

现在,我们使用 “ plsr”函数创建模型,然后使用“ summary”函数检查结果。我们  使用交叉验证。下面是代码。

## 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之后,因变量中解释的方差几乎没有改善。下面是这些结果图的代码。 

我们将使用我们的模型进行预测。 

此后,我们将计算均方误差。这是通过从测试集的因变量中减去我们的预测模型的结果来完成的。然后,我们对这些信息求平方并计算平均值。 

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

 误差降低得更多,这表明最小二乘回归模型优于偏最小二乘模型。此外, 偏最小二乘模型很难解释。因此,最小二乘模型是最受欢迎的模型。