library(tidyverse)
library(mdatools)
Predictors train-set
dfXtr = read.csv('Colorigrammi_lambrusco_xl_TR_cleaned.csv', check.names = F, row.names = 1)
dfXtr = dfXtr[-1]
dfXtr
NA
Predictors test-set
dfXts = read.csv('Colorigrammi_lambrusco_xl_TS_cleaned.csv', check.names = F, row.names = 1)
dfXts
NA
Response train-set
dfYtr = read.csv('YAntocianiTR_cleaned.csv', check.names = F, row.names = 1)
dfYtr
NA
Response test-set
dfYts = read.csv('YAntocianiTS_cleaned.csv', check.names = F, row.names = 1)
dfYts
NA
PLS
m = pls(dfXtr[9:ncol(dfXtr)], dfYtr[ncol(dfYtr)],
cv = dfXtr$Replica.prelievo.in.campo,
lim.type = 'jm',
center = T)
Take a look at the RMSE
par(mfrow=c(1,1))
plotRMSE(m)

NA
NA
We can choose 4 latent variables.
par(mfrow=c(2,2))
m = selectCompNum(m, 4)
plotXResiduals(m, norm = T)
plotPredictions(m)
plotPredictions(m$res$cv, cgroup = dfXtr$Tempi.di.prelievo, show.stat = T)
plotXScores(m$res$cal, cgroup = dfXtr$Tempi.di.prelievo)

par(mfrow=c(3,1))
plotXLoadings(m, type = 'l')
plotVIPScores(m, show.lines = c(NA,1), type = 'l')
plotRegcoeffs(m)

Now compare the test-set response values with the predicted ones
(calculated on the x block of the test set )
res = predict(m, dfXts[9:ncol(dfXts)], dfYts[ncol(dfYts)])
plotPredictions(res, cgroup = dfXts$Tempi.di.prelievo, show.stat = T)

LS0tDQp0aXRsZTogIlBMUyBleGFtcGxlIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0aGVtZTogY2VydWxlYW4NCi0tLQ0KDQo8YnIvPg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShtZGF0b29scykNCg0KYGBgDQoNCg0KIyMjIFByZWRpY3RvcnMgdHJhaW4tc2V0DQoNCjxici8+DQoNCmBgYHtyfQ0KZGZYdHIgPSByZWFkLmNzdignQ29sb3JpZ3JhbW1pX2xhbWJydXNjb194bF9UUl9jbGVhbmVkLmNzdicsIGNoZWNrLm5hbWVzID0gRiwgcm93Lm5hbWVzID0gMSkNCmRmWHRyID0gZGZYdHJbLTFdDQpkZlh0cg0KDQpgYGANCjxici8+DQoNCiMjIyBQcmVkaWN0b3JzIHRlc3Qtc2V0DQoNCjxici8+DQoNCmBgYHtyfQ0KZGZYdHMgPSByZWFkLmNzdignQ29sb3JpZ3JhbW1pX2xhbWJydXNjb194bF9UU19jbGVhbmVkLmNzdicsIGNoZWNrLm5hbWVzID0gRiwgcm93Lm5hbWVzID0gMSkNCmRmWHRzDQoNCmBgYA0KPGJyLz4NCg0KIyMjIFJlc3BvbnNlIHRyYWluLXNldA0KDQo8YnIvPg0KDQpgYGB7cn0NCmRmWXRyID0gcmVhZC5jc3YoJ1lBbnRvY2lhbmlUUl9jbGVhbmVkLmNzdicsIGNoZWNrLm5hbWVzID0gRiwgcm93Lm5hbWVzID0gMSkNCmRmWXRyDQoNCmBgYA0KDQo8YnIvPg0KDQojIyMgUmVzcG9uc2UgdGVzdC1zZXQNCg0KPGJyLz4NCg0KDQpgYGB7cn0NCmRmWXRzID0gcmVhZC5jc3YoJ1lBbnRvY2lhbmlUU19jbGVhbmVkLmNzdicsIGNoZWNrLm5hbWVzID0gRiwgcm93Lm5hbWVzID0gMSkNCmRmWXRzDQoNCmBgYA0KDQojIyMgUExTDQoNCg0KYGBge3J9DQptID0gcGxzKGRmWHRyWzk6bmNvbChkZlh0cildLCBkZll0cltuY29sKGRmWXRyKV0sIA0KICAgICAgICBjdiA9IGRmWHRyJFJlcGxpY2EucHJlbGlldm8uaW4uY2FtcG8sDQogICAgICAgIGxpbS50eXBlID0gJ2ptJywgDQogICAgICAgIGNlbnRlciA9IFQpDQoNCg0KYGBgDQoNCjxici8+DQoNClRha2UgYSBsb29rIGF0IHRoZSBSTVNFIA0KDQo8YnIvPg0KDQpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInfQ0KDQpwYXIobWZyb3c9YygxLDEpKQ0KcGxvdFJNU0UobSkNCg0KDQpgYGANCg0KDQo8YnIvPg0KDQpXZSBjYW4gY2hvb3NlIDQgbGF0ZW50IHZhcmlhYmxlcy4gDQoNCjxici8+DQoNCg0KYGBge3IsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTh9DQoNCnBhcihtZnJvdz1jKDIsMikpDQoNCm0gPSBzZWxlY3RDb21wTnVtKG0sIDQpDQpwbG90WFJlc2lkdWFscyhtLCBub3JtID0gVCkNCnBsb3RQcmVkaWN0aW9ucyhtKQ0KcGxvdFByZWRpY3Rpb25zKG0kcmVzJGN2LCBjZ3JvdXAgPSBkZlh0ciRUZW1waS5kaS5wcmVsaWV2bywgc2hvdy5zdGF0ID0gVCkNCnBsb3RYU2NvcmVzKG0kcmVzJGNhbCwgY2dyb3VwID0gZGZYdHIkVGVtcGkuZGkucHJlbGlldm8pDQoNCmBgYA0KPGJyLz4NCg0KYGBge3IsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTE1fQ0KcGFyKG1mcm93PWMoMywxKSkNCg0KcGxvdFhMb2FkaW5ncyhtLCB0eXBlID0gJ2wnKQ0KcGxvdFZJUFNjb3JlcyhtLCBzaG93LmxpbmVzID0gYyhOQSwxKSwgdHlwZSA9ICdsJykNCnBsb3RSZWdjb2VmZnMobSkNCmBgYA0KPGJyLz4NCg0KTm93IGNvbXBhcmUgdGhlIHRlc3Qtc2V0IHJlc3BvbnNlIHZhbHVlcyB3aXRoIHRoZSBwcmVkaWN0ZWQgb25lcyAoY2FsY3VsYXRlZCBvbiB0aGUgeCBibG9jayBvZiB0aGUgdGVzdCBzZXQgKSANCg0KPGJyLz4NCg0KYGBge3IsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLndpZHRoPTEwfQ0KDQpyZXMgPSBwcmVkaWN0KG0sIGRmWHRzWzk6bmNvbChkZlh0cyldLCBkZll0c1tuY29sKGRmWXRzKV0pDQoNCnBsb3RQcmVkaWN0aW9ucyhyZXMsIGNncm91cCA9IGRmWHRzJFRlbXBpLmRpLnByZWxpZXZvLCBzaG93LnN0YXQgPSBUKQ0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=