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



我生成了一个csv表"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 )
>

你能告诉我第一张桌子哪里错了吗?

提前感谢!

如果我们查看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))

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

最新更新