有没有一种方法可以使用协方差矩阵来找到用于多元回归的系数?


23

对于简单的线性回归,可以直接从方差-协方差矩阵CC d e计算回归系数。

Cd,eCe,e
其中d是因变量的指数,和e是解释变量的指数。

如果只有协方差矩阵,是否可以为具有多个解释变量的模型计算系数?

ETA:对于双解释变量,看来 和类似地用于β2。我没有立即看到如何将其扩展到三个或更多变量。

β1=Cov(y,x1)var(x2)Cov(y,x2)Cov(x1,x2)var(x1)var(x2)Cov(x1,x2)2
β2

3
系数向量β是解决X ' Ý = X ' X - 1个 β。一些代数运算表明,这实际上与您在2系数情况下给出的公式相同。在这里很好地布置stat.purdue.edu/~jennings/stat514/stat512notes/topic3.pdf。不确定是否有帮助。但是我敢猜测,根据该公式,这通常是不可能的。β^XY=(XX)1β
shadowtalker

1
@David您是否知道如何将其扩展到任意数量的解释变量(超过2)?我需要表达。
简·韦恩

1
@JaneWayne我不确定我是否理解您的问题:whuber以矩阵形式C1(Cov(Xi,y))
David

1
是的,我研究了它,他是对的。
简·韦恩

Answers:


36

是的,假设模型中包括截距(常数)项,则所有变量(解释性和响应性)的协方差矩阵包含查找所有系数所需的信息。(尽管协方差不提供有关常数项的信息,但可以从数据的平均值中找到它。)


分析

假设解释变量的数据按维列向量x 1x 2x p排列,响应变量为列向量y,这被视为是随机变量Y的实现。普通最小二乘估计β模型系数nx1,x2,,xpyYβ^

E(Y)=α+Xβ

通过组装,获得的列向量X 0 = 1 1 ... 1 'X 1... X pp+1X0=(1,1,,1),X1,,Xp阵列 X和求解线性方程系统n×p+1X

XXβ^=Xy.

相当于系统

1nXXβ^=1nXy.

高斯消除将解决该系统。它通过邻接矩阵1来进行p+1×p+1p+1维矢量11nXXp+1p+1×p+2阵列和行减少它。 1nXyp+1×p+2A

第一步将检查1n(XX)11=1nX0X0=1。发现这是非零的,它将继续从剩余的行中减去的第一行的适当倍数,以便将其第一列中的剩余条目清零。这些倍数将是1A并从条目减去的数字+1Ĵ+1=X ' XĴ将等于 ¯ X ¯ X Ĵ。这只是XiXj的协方差的公式。此外,i+1p+2位置中剩余的数字等于11nX0Xi=X¯iAi+1,j+1=XiXjX¯iX¯jXiXji+1,p+2,协方差Xÿ1nXiyXi¯y¯Xiy

因此,在高斯消除的第一步之后,系统简化为求解

Cβ^=(Cov(Xi,y))

显然,由于所有系数都是协方差,因此可以从所有变量的协方差矩阵中找到解。

(当是可逆的溶液可以写成Ç - 1冠状病毒X ÿ '。在这个问题给出的公式是这个特殊情况下,当p = 1p = 2写出这些公式明确地将。随着p的增长,它变得越来越复杂。而且,它们不如数值计算,最好通过求解方程组而不是对矩阵C求逆来实现。CC1(Cov(Xi,y))p=1p=2pC

yXβ^


为了说明这一点,下面的R代码创建一些数据,计算它们的协方差,并仅从该信息中获得最小二乘系数估计。它将它们与从最小二乘估计器获得的估计值进行比较lm

#
# 1. Generate some data.
#
n <- 10        # Data set size
p <- 2         # Number of regressors
set.seed(17)
z <- matrix(rnorm(n*(p+1)), nrow=n, dimnames=list(NULL, paste0("x", 1:(p+1))))
y <- z[, p+1]
x <- z[, -(p+1), drop=FALSE]; 
#
# 2. Find the OLS coefficients from the covariances only.
#
a <- cov(x)
b <- cov(x,y)
beta.hat <- solve(a, b)[, 1]  # Coefficients from the covariance matrix
#
# 2a. Find the intercept from the means and coefficients.
#
y.bar <- mean(y)
x.bar <- colMeans(x)
intercept <- y.bar - x.bar %*% beta.hat  

输出显示两种方法之间的一致性:

(rbind(`From covariances` = c(`(Intercept)`=intercept, beta.hat),
       `From data via OLS` = coef(lm(y ~ x))))
                  (Intercept)        x1        x2
From covariances     0.946155 -0.424551 -1.006675
From data via OLS    0.946155 -0.424551 -1.006675

1
谢谢,@ whuber!这正是我一直在寻找的东西,我萎缩的大脑无法触及。顺便说一句,这个问题的动机是由于种种原因,我们基本上没有充分X可用,但从cov(z)以前的计算中得出。
大卫

7
这样的答案提高了这个交叉验证的标准
jpmuc

@whuber在你的榜样,您计算在拦截yxbeta.hat。该yx是原始数据的一部分。是否可以从协方差矩阵和均值中得出截距?您能提供一下符号吗?
简·韦恩

@简只有手段 X¯,申请 β^ 给他们:
X¯β^=Xβ^¯
我更改了代码以反映这一点。
ub

该代码非常有用+1
Michael
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.