Мне нравится моделировать тренировки и прогнозировать значения, используя модель 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
...
Это возможно?