我对偏最小二乘法 (PLS) 非常陌生,我尝试了解包中 R 函数的plsr()
输出pls
。让我们模拟数据并运行 PLS:
library(pls)
n <- 50
x1 <- rnorm(n); xx1 <- scale(x1)
x2 <- rnorm(n); xx2 <- scale(x2)
y <- x1 + x2 + rnorm(n,0,0.1); yy <- scale(y)
p <- plsr(yy ~ xx1+xx2, ncomp=1)
我期待以下数字和
> ( w <- loading.weights(p) )
Loadings:
Comp 1
xx1 0.723
xx2 0.690
Comp 1
SS loadings 1.0
Proportion Var 0.5
> a <- w["xx1",]
> b <- w["xx2",]
> a^2+b^2
[1] 1
被计算以最大化
> cor(y, a*xx1+b*xx2)
[,1]
[1,] 0.9981291
但情况并非如此:
> f <- function(ab){
+ a <- ab[1]; b <- ab[2]
+ cor(y, a*xx1+b*xx2)
+ }
> optim(c(0.7,0.6), f, control=list(fnscale=-1))
$par
[1] 0.7128259 0.6672870
$value
[1] 0.9981618
是数字错误,还是我误解了和的性质?
我也想知道这些系数是什么:
> p$coef
, , 1 comps
yy
xx1 0.6672848
xx2 0.6368604
编辑:现在我看到了什么p$coef
:
> x <- a*xx1+b*xx2
> coef(lm(yy~0+x))
x
0.9224208
> coef(lm(yy~0+x))*a
x
0.6672848
> coef(lm(yy~0+x))*b
x
0.6368604
所以我认为我对和的性质是正确的。
编辑:鉴于@chl 给出的评论,我觉得我的问题不够清楚,所以让我提供更多细节。在我的示例中,有一个响应向量和一个两列矩阵的预测变量,我使用 Y 的归一化版本\X的归一化版本(居中并除以标准差)。第一个 PLS 分量的定义是选择和的最大值。因此,它相当于最大化和之间的相关性,不是吗?