R 中的 PLS:具有两个 Y 变量的模型训练和预测值

PLS in R: Model training and predicting values with two Y variables

我喜欢使用 PLS 模型为多个 Y 变量建模训练和预测值,但是当我在下面的代码中尝试这种方法时遇到了一些问题:

#First simulate some data
set.seed(123)
bands=20
data <- data.frame(matrix(runif(60*bands),ncol=bands))
colnames(data) <- paste0(1:bands)
data$nitrogen <- rpois(60,10)
data$carbon <- rpois(60,10)
#

#Tranning data set
cal_BD<-data[1:50,]

#Validation data set
val_BD<-data[51:60,]

# define explanatory variables (x)
spectra <- cal_BD[,1:20]

#Build PLS model using training data only
mod_pls <- plsr(carbon + nitrogen ~ spectra,
ncomp = 20, data =cal_BD, validation = "LOO", jackknife = TRUE)
summary(mod_pls)
#

#Prediction in validation data set
est_pls<-predict(mod_pls, comps = 20, newdata = val_BD)
est_pls
#

1) 当我在模型中尝试碳+氮时不起作用;和

2) 我想使用以下代码创建一个包含碳和氮估算值的新数据框:

val_BD2<-val_BD[,-(21:22)] # remove carbon + nitrogen beccause my goal is predict this values
est_pls<-predict(mod_pls, comps = 20, newdata = val_BD)#Prediction in validation data set (only X's)
final_est_DF<-cbind(val_BD2est_pls[,1],est_pls[,2])

我的期望输出与估计的碳和氮而不是观测值是:

            1          2         3  ... carbon  nitrogen
51 0.04583117 0.93529980 0.6299731  ... 15.3     8.6
52 0.44220007 0.30122890 0.1838285  ... 10.0     7.1
53 0.79892485 0.06072057 0.8636441  ...  9.0     7.3
54 0.12189926 0.94772694 0.7465680  ... 11.1     6.5
55 0.56094798 0.72059627 0.6682846  ... 10.3     8.4
56 0.20653139 0.14229430 0.6180179  ... 13.9     9.1
...

这可能吗?

您可以使用两个单独的 PLS 模型进行预测并将结果手动组合到单个数据框中,或者为两个预测变量创建一个 (PLS2) 模型。仅当响应变量相关时,第二个才有意义。 plsr 包中似乎没有直接的 PLS2 回归选项。你可以试试:

  1. 直接调用simpls.fit方法(虽然作者不推荐这样做)。参见示例:https://www.rdocumentation.org/packages/pls/versions/2.7-0/topics/simpls.fit。在这种情况下,您可以将 Y 指定为具有两列的矩阵或数据框。

  2. 使用 PLS2 的其他包,例如https://www.rdocumentation.org/packages/plspm/versions/0.2-2/topics/plsreg2