我生成了一个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
这里pls适用于多个描述符:
> mod <- plsr(chemical ~ sensory , data = oliveoil , ncomp=1 )
>
你可以在我的第一张桌子上告诉我哪里出错吗?
提前致谢!
答案 0 :(得分:1)
如果我们看一下str(oliveoil)
,感官&#39;是matrix
列,n
列。因此,要以这种方式使用公式,&#34; NIR&#34;也应该是matrix
data.frame
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))
答案 1 :(得分:0)
在您的命令mod <- plsr(response ~ NIR , data = j , ncomp=1 )
中,在~
的RHS上,确保解释变量的名称与完全匹配数据中的列名称(就拼写,大写/小写)。在R对head
的回复中,我注意到没有名为NIR
的列。但有一个名为NIR.a
,一个名为NIR.b
。您是否检查过使用NIR
或NIR.a
替换NIR.b
是否有效?