0

我喜欢使用 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
...

这个有可能?

4

1 回答 1

0

您可以使用两个单独的 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

于 2018-11-27T12:30:48.513 回答