不会错的方法,就是参考data : yarn
最后加一column "train"
train : Logical vector with TRUE for the training samples
and FALSE for the test samples
TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE TRUE TRUE TRUE
FALSE FALSE FALSE FALSE FALSE FALSE FALSE
21 for training(data),
7 for testing(newdata).
library(pls)
data(yarn)
nir.mvr <- mvr(density ~ NIR, ncomp = 5, data = yarn[yarn$train,])
predict(nir.mvr, comps = 1:4, newdata = yarn[!yarn$train,])
要不然predictdata,若要分开模拟的话.
ncol(predictdata) = length(nir.mvr$Xmeans)
#package example
library(pls)
data(yarn)
nir.mvr <- mvr(density ~ NIR, ncomp = 5, data = yarn[yarn$train,])
predict(nir.mvr, comps = 1:4, newdata = yarn[!yarn$train,])
density
110 51.04992
22 50.72019
31 32.01454
41 34.29076
51 30.35994
61 20.57832
71 19.07786
#自行输入数据,利用function predict
predictdata=matrix(scan(file='predictdata.txt'),7)
predict(nir.mvr, comps = 1:4, newdata = predictdata)
density
[1,] 51.04992
[2,] 50.72019
[3,] 32.01454
[4,] 34.29076
[5,] 30.35994
[6,] 20.57832
[7,] 19.07786
#自行输入数据,自行运算.
nobs=dim(predictdata)[1]
B <- rowSums(coef(nir.mvr, comps = 1:4), dims = 2)
B0 <- nir.mvr$Ymeans - nir.mvr$Xmeans %*% B
pred <- predictdata %*% B + rep(B0, each = nobs)
pred
density
[1,] 51.04992
[2,] 50.72019
[3,] 32.01454
[4,] 34.29076
[5,] 30.35994
[6,] 20.57832
[7,] 19.07786