R中的偏最小二乘回归:为什么标准化数据上的PLS不等于最大化相关性?


12

我在偏最小二乘(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)

我期望以下数字ab

> ( 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

是数字错误,还是我误解了a的性质b

我也想知道这些系数是多少:

> 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 

ab

YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~t1Y


2
PLS回归最大化因子得分(作为原始数据与载荷向量的乘积计算)协方差,而不是相关性(如在规范相关性分析中所做的那样)。pls在此JSS论文中,对程序包和PLS回归进行了很好的概述。
chl 2012年

1
由于所有向量都是居中并归一化的,所以协方差是相关的,不是吗?抱歉,但是JSS论文对初学者来说太多了。
斯蒂芬·洛朗

通常,存在一个不对称的放气过程(由一个块的线性组合回归到另一个块的线性组合导致),这使事情变得有些复杂。我在此回复中提供了一些示意图。埃尔维· 阿迪(HervéAbdi)对PLS回归进行了总体概述,韦格林(Wegelin)的偏最小二乘法(PLS)方法调查也非常有用。在这一点上,我可能应该将所有这些评论都转换为答案……
chl 2012年

YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~

a2+b21?coef.mvr

Answers:


17

uv

maxcov(Xu,Yv).(1)
Y
cov(Xu,y)Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.u=1.
由于不依赖,我们必须最大化。让我们考虑一下,在哪里数据是单独标准化的(我最初犯了错误地缩放线性组合而不是分别缩放和!),因此;但是并取决于。总之,最大程度地增加潜在分量和响应变量之间的相关性将不会产生相同的结果uVar(y)uVar(Xu)1/2×cor(Xu,y)X=[x_1;x_2]x1x2Var(x1)=Var(x2)=1Var(Xu)1u

我应该感谢Arthur Tenenhaus,他为我指出了正确的方向。

使用单位权重向量不是限制性的,如果需要,某些程序包(pls. regressionplsgenomics中,基于Wehrens早期程序包中的代码pls.pcr)将返回非标准化的权重向量(但潜在分量仍为标准1)。但是大多数PLS软件包都将返回标准化的,包括您使用的软件包,特别是那些实现SIMPLS或NIPALS算法的软件包。我发现两者很好地概括了在巴里M.明智的介绍方法,偏最小二乘法的属性(PLS)回归,和算法之间的差异,但化学计量学u小插图也提供了很好的讨论(第26-29页)。同样特别重要的是,大多数PLS例程(至少我在R中知道的例程)都假定您提供了非标准化变量,因为对中和/或缩放是在内部处理的(例如,在进行交叉验证时,这一点尤其重要。 )。

给定约束,发现向量为Ù Ù = X ' ÿuu=1u

u=XyXy.

通过一点模拟,可以得到以下结果:

set.seed(101)
X <- replicate(2, rnorm(100))
y <- 0.6*X[,1] + 0.7*X[,2] + rnorm(100)
X <- apply(X, 2, scale)
y <- scale(y)

# NIPALS (PLS1)
u <- crossprod(X, y)
u <- u/drop(sqrt(crossprod(u)))         # X weights
t  <- X%*%u
p <- crossprod(X, t)/drop(crossprod(t)) # X loadings

您可以将以上结果(u=[0.5792043;0.8151824]尤其是)与R包提供的结果进行比较。例如,使用化学计量学软件包中的NIPALS(我知道mixOmics软件包中提供了另一种实现),我们将获得:

library(chemometrics)
pls1_nipals(X, y, 1)$W  # X weights [0.5792043;0.8151824]
pls1_nipals(X, y, 1)$P  # X loadings

使用plsr其默认的内核PLS算法,可以获得类似的结果:

> library(pls)
> as.numeric(loading.weights(plsr(y ~ X, ncomp=1)))
[1] 0.5792043 0.8151824

在所有情况下,我们都可以检查的长度为1。u

如果您更改功能以将其优化为可读取的内容

f <- function(u) cov(y, X%*%(u/sqrt(crossprod(u))))

然后标准化uu <- u/sqrt(crossprod(u))),您应该更接近上述解决方案。

旁注:作为基准(1)等同于 可以发现从的SVD的左奇异向量对应于最大本征值:ü X ' ÿ

maxuXYv,
uXY
svd(crossprod(X, y))$u

在更一般的情况下(PLS2),总结上述内容的一种方式是说,第一PLS规范向量是X和Y的协方差矩阵在两个方向上的最佳近似。

参考文献

  1. Tenenhaus,M(1999)。L'approche PLSRevue de StatistiqueAppliquée,47(2),5-40。
  2. ter Braak,CJF和de Jong,S(1993)。偏最小二乘回归的目标函数化学计量杂志,12,41–54。
  3. Abdi,H(2010)。偏最小二乘回归和潜在结构回归的投影(PLS回归)Wiley跨学科评论:计算统计,2,97-106。
  4. Boulesteix,AL和Strimmer,K(2007)。偏最小二乘:用于分析高维基因组数据的通用工具生物信息学简报,8(1),32-44。

谢谢。我会尽可能阅读您的答案(一定要投票并单击对勾!)
StéphaneLaurent

我刚刚阅读了您的答案-恭喜,非常感谢。
斯特凡洛朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.