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

机器算法验证 r 回归 偏最小二乘法
2022-03-19 04:49:31

我对偏最小二乘法 (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

是数字错误,还是我误解了的性质?ab

我也想知道这些系数是什么:

> 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

编辑:鉴于@chl 给出的评论,我觉得我的问题不够清楚,所以让我提供更多细节。在我的示例中,有一个响应向量和一个两列矩阵的预测变量,我使用 Y 的归一化版本\X的归一化版本(居中并除以标准差)。第一个 PLS 分量的定义是选择的最大值YXY~YX~Xt1t1=aX~1+bX~2abt1,Y~因此,它相当于最大化之间的相关性,不是吗?t1Y

1个回答

PLS 回归依赖于迭代算法(例如,NIPALS、SIMPLS)。您对主要思想的描述是正确的:我们寻求一个(PLS1,一个响应变量/多个预测变量)或两个(PLS2,具有不同模式,多个响应变量/多个预测变量)权重向量(和) ,比如说,形成原始变量的线性组合,使得Xu和Y(Yv,对于PLS2)之间的协方差最大。让我们专注于提取与第一个组件相关的第一对权重。形式上,优化标准读取 在你的情况下,是单变量的,所以它相当于最大化 uv

maxcov(Xu,Yv).(1)
Y
cov(Xu,y)Var(Xu)1/2×cor(Xu,y)×Var(y)1/2,st.u=1.
由于不依赖于,我们必须最大化让我们考虑一下,其中数据是单独标准化的(我最初犯了一个错误,即分别缩放线性组合而不是!),因此但是,并且取决于总之,最大化潜在成分和响应变量之间的相关性不会产生相同的结果Var(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 算法的包;我在 Barry M. Wise 的演讲“偏最小二乘法 (PLS) 回归的属性”和“算法之间的差异”中找到了对这两种方法的一个很好的概述,但是化学计量学u小插图也提供了很好的讨论(第 26-29 页)。特别重要的是,大多数 PLS 例程(至少我在 R 中知道的那个)假设您提供非标准化变量,因为居中和/或缩放是在内部处理的(这在进行交叉验证时尤其重要,例如)。

给定约束,向量被发现为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) 等价于 对应于最大特征值作为左奇异向量:

maxuXYv,
uXY

svd(crossprod(X, y))$u

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

参考

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