R:不能 运行 对多个描述符进行偏最小二乘回归

R : cannot run partial least square regression on more than one descriptor

我生成了一个 csv table "T.CSV" :

"system","response","NIR.a","NIR.b"
 1,1,2,3
 2,4,5,6
 3,7,8,9

其中 plsr 对一个描述符成功但对多个描述符失败:

> library(pls)
> j <- read.csv(file="T.CSV",header=T,sep=",")
> head(j)
system response NIR.a NIR.b
1      1        1     2     3
2      2        4     5     6
3      3        7     8     9
> mod <- plsr(response ~ NIR.a , data = j ,  ncomp=1 )
> mod <- plsr(response ~ NIR , data = j ,  ncomp=1 )
Error in eval(expr, envir, enclos) : object 'NIR' not found

但是,如果我加载 pls 包的 "oliveoil" 示例,则回归适用于多个描述符:

> data(oliveoil)
> head(oliveoil)
chemical.Acidity chemical.Peroxide chemical.K232 chemical.K270 chemical.DK
G1             0.73              12.7         1.9           0.139       0.003
G2             0.19              12.3         1.678         0.116      -0.004
G3             0.26              10.3         1.629         0.116      -0.005
G4             0.67              13.7         1.701         0.168      -0.002
G5             0.52              11.2         1.539         0.119      -0.001
I1             0.26              18.7         2.117         0.142       0.001
sensory.yellow sensory.green sensory.brown sensory.glossy sensory.transp
G1           21.4          73.4          10.1           79.7           75.2
G2           23.4          66.3           9.8           77.8           68.7
G3           32.7          53.5           8.7           82.3           83.2
G4           30.2          58.3          12.2           81.1           77.1
G5           51.8          32.5             8           72.4           65.3
I1           40.7          42.9          20.1           67.7           63.5
sensory.syrup
G1          50.3
G2          51.7
G3          45.4
G4          47.8
G5          46.5
I1          52.2

这里请适用于多个描述符:

> mod <- plsr(chemical ~ sensory , data = oliveoil ,  ncomp=1 )
>

你能告诉我我第一次做错的地方吗table?

提前致谢!

在您的命令 mod <- plsr(response ~ NIR , data = j , ncomp=1 ) 中,在 ~ 的 RHS 上确保解释变量的名称与 完全 中的列名称匹配数据(在拼写和 upper/lower 大小写方面)。在 R 对 head 的回复中,我注意到没有名为 NIR 的列。但是有一种叫做NIR.a,一种叫做NIR.b。您是否检查过将 NIR 替换为 NIR.aNIR.b 是否有效?

如果我们查看 str(oliveoil),'sensory' 是具有 n 列的 matrix。因此,要以这种方式使用公式,"NIR" 也应该是 data.frame

中的 matrix
j1 <- j[1:2]
j1["NIR"] <- as.matrix(setNames(j[3:4], letters[1:2]))
mod <- plsr(response ~ NIR , data = j1 ,  ncomp=1 )
str(mod)
#List of 19
# $ coefficients   : num [1:2, 1, 1] 0.5 0.5
# ..- attr(*, "dimnames")=List of 3
# .. ..$ : chr [1:2] "a" "b"
# .. ..$ : chr "response"
# .. ..$ : chr "1 comps"
# ----

数据

j <- structure(list(system = 1:3, response = c(1L, 4L, 7L),
 NIR.a = c(2L, 
 5L, 8L), NIR.b = c(3L, 6L, 9L)), .Names = c("system", "response", 
 "NIR.a", "NIR.b"), class = "data.frame", row.names = c(NA, -3L))