R中的PLS:使用两个Y变量进行模型训练和预测值

时间:2018-11-14 17:41:06

标签: r regression multivariate-testing pls

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

这可能吗?

1 个答案:

答案 0 :(得分: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