如何通过PCA执行正交回归(最小二乘法)?


29

我总是用lm()R 在上执行线性回归。该函数返回系数,使得y = \ beta x。yxβ

y=βx.

今天,我了解了总最小二乘法,并且princomp()可以使用该函数(主成分分析,PCA)来执行它。对我来说应该是有益的(更准确)。我使用进行了一些测试princomp(),例如:

r <- princomp( ~ x + y)

我的问题是:如何解释其结果?如何获得回归系数?“系数”是指我必须用来乘以x值以得到接近y的数字\ betaβxy


一会儿,我有些困惑。看一下:zoonek2.free.fr/UNIX/48_R/09.html这就是所谓的PCA(主成分分析,又名“正交回归”或“垂直平方和”或“最小二乘法”),所以我认为我们在谈论关于带princomp()的TLS否?
Dail

没有; 那是两件事,请参阅有关PCA的维基百科文章。这里使用它的事实是一个hack(我不知道它有多精确,但是我要检查一下);这就是为什么要复杂提取系数的原因。

1
一个相关的问题:stats.stackexchange.com/questions/2691/...:和博客文章是由其中一个答案引用cerebralmastication.com/2010/09/...
乔纳森

Answers:


48

普通最小二乘法与最小二乘法

首先,让我们考虑仅一个预测变量(独立变量)的最简单情况。为简单起见,让和都居中,即截距始终为零。从PCA上最流行的线程中最流行的答案可以明显看出标准OLS回归和“正交” TLS回归之间的区别(由我改编):X ÿxxy

OLS与TLS

OLS 通过最小化观测值与预测值之间的平方距离来拟合方程。TLS通过最小化点之间的平方距离及其在直线上的投影来拟合相同的方程式。在这种最简单的情况下,TLS线只是2D数据的第一个主要组成部分。要找到,对点进行PCA ,即构造协方差矩阵然后找到其第一个特征向量;然后。Ý ÝX Ý β X ÿ 2 × 2 Σ v = v Xv ÿβ = v ÿ / v Xy=βxyy^(x,y)β(x,y)2×2Σv=(vx,vy)β=vy/vx

在Matlab中:

 v = pca([x y]);    //# x and y are centered column vectors
 beta = v(2,1)/v(1,1);

在R中:

 v <- prcomp(cbind(x,y))$rotation
 beta <- v[2,1]/v[1,1]

顺便说一下,即使和没有居中,这也会产生正确的斜率(因为内置的PCA功能自动执行居中)。要恢复截距,请计算。ÿ β 0 = ˉ ý - β ˉ Xxyβ0=y¯βx¯

OLS与TLS,多元回归

给定一个因变量和许多自变量(同样,为简单起见,所有变量居中),回归拟合方程OLS通过最小化观察值与预测值之间的平方误差来进行拟合。TLS通过最小化观察到的点与回归平面/超平面上最接近的点之间的平方距离来进行拟合。X Ŷ = β 1 X 1 + ... + β p X pÿ ÿXÿ [R p + 1yxi

y=β1x1++βpxp.
yy^(x,y)Rp+1

请注意,不再有“回归线”!上面的等式指定了一个超平面:如果有两个预测变量,则为2D平面;如果有三个预测变量,则为3D超平面,等等。因此,上述解决方案不起作用:我们无法仅通过使用第一台PC来获得TLS解决方案(即一条线)。不过,可以通过PCA轻松获得解决方案。

如前所述,对点执行PCA 。这在列中产生特征向量。第一特征向量定义一个维超平面,我们需要; 最后一个(数字)特征向量与之正交。现在的问题是如何变换的基础通过第一给定特征向量到系数。p + 1个V p p ħ p + 1 v p + 1个 ħ p β(x,y)p+1VppHp+1vp+1Hpβ

观察到,如果我们为所有设置且仅,则,即的向量位于超平面。另一方面,我们知道与其正交。即它们的点积必须为零:ķ X ķ = 1个Ÿ = β ķ0 ... 1 ... β ķħ ħ v p + 1 = v 1... v p + 1xi=0ikxk=1y^=βk

(0,,1,,βk)H
Hv ķ + β ķ v p + 1 = 0 β ķ = - v ķ / v p + 1
vp+1=(v1,,vp+1)H
vk+βkvp+1=0βk=vk/vp+1.

在Matlab中:

 v = pca([X y]);    //# X is a centered n-times-p matrix, y is n-times-1 column vector
 beta = -v(1:end-1,end)/v(end,end);

在R中:

 v <- prcomp(cbind(X,y))$rotation
 beta <- -v[-ncol(v),ncol(v)] / v[ncol(v),ncol(v)]

同样,即使和不居中,这也会产生正确的斜率(因为内置的PCA功能自动执行居中)。要恢复截距,请计算。ÿ β 0 = ˉ ý - ˉ X βxyβ0=y¯x¯β

作为健全性检查,请注意,在只有单个预测变量情况下,此解决方案与前一个解决方案一致。实际上,那么空间是2D,因此,假设第一个PCA特征向量与第二个(最后一个)正交,则 。x y v 1 y / v 1 x = v 2 x / v 2 yx(x,y)vy(1)/vx(1)=vx(2)/vy(2)

TLS的封闭式解决方案

令人惊讶的是,事实证明有一个封闭形式的方程。下面的论点摘自萨宾·范·霍夫(Sabine van Huffel)的书“最小二乘法”(第2.3.2节)。β

令和为居中数据矩阵。最后一个PCA特征向量是具有特征值的协方差矩阵的特征向量。如果它是一个特征向量,则。写下特征向量方程: Xyvp+1[Xy]σp+12vp+1/vp+1=(β1)

(XXXyyXyy)(β1)=σp+12(β1),
并计算左侧的乘积,我们立即得到它强烈提醒您熟悉的OLS表达式
βTLS=(XXσp+12I)1Xy,
βOLS=(XX)1Xy.

多元多元回归

可以将相同的公式推广到多变量情况,但是即使要定义多变量TLS的功能,也需要一些代数。请参阅TLS上的Wikipedia。对于每个因变量,多变量OLS回归等效于一堆单变量OLS回归,但在TLS情况下并非如此。


1
我不了解R,但仍想提供R片段​​供将来参考。这里有很多精通R的人。如有需要,请随时编辑我的代码段!谢谢。
变形虫说莫妮卡(

好的帖子,但是如果我想问问,什么可以保证向量位于超平面中?(0,,1,,βk)
JohnK 2015年

@JohnK,我不确定究竟是什么还不清楚。如我所写,除之外,让所有等于零。然后,如果将其插入,则会得到。因此,点位于等式定义的超平面上。xixk=1y=βjxjy=βk1=βk(0,,1,βk)y=βjxj
变形虫说恢复莫妮卡

我似乎误读了那部分,但现在很清楚了。也感谢您的澄清。
JohnK

2
在R中,您可能更喜欢“特征(cov(cbind(x,y)))$向量”而不是“ prcomp(cbind(x,y))$旋转”,因为对于较大的向量,前者要快得多。
Thomas Browne '18

9

基于此处找到的天真的GNU Octave实现,类似这样的操作(有些麻烦)。

tls <- function(A, b){

  n <- ncol(A)
  C <- cbind(A, b)

  V <- svd(C)$v
  VAB <- V[1:n, (n+1):ncol(V)]
  VBB <- V[(n+1):nrow(V), (n+1):ncol(V)]
  return(-VAB/VBB)
}

4

princomp正在运行主成分分析,而不是总最小二乘回归。据我所知,没有R函数或执行TLS的程序包;最多在MethComp中存在Deming回归。
但是,请将此视为最有可能不值得的建议。


我以为MethComp软件包中的Deming是TLS-有什么区别?
mark999 2011年

您必须给它x和y的误差率;纯TLS对此进行了优化。
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.