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


23

对于简单的线性回归,可以直接从方差-协方差矩阵C, C 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。不确定是否有帮助。但是我敢猜测,根据该公式,这通常是不可能的。β^X′Y=(X′X)−1β
— shadowtalker

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

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

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

Answers:


36

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


分析

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

E(Y)=α+Xβ

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

X′Xβ^=X′y.

相当于系统

1nX′Xβ^=1nX′y.

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

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

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

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

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

(当是可逆的溶液可以写成Ç - 1(冠状病毒(X 我,ÿ ))'。在这个问题给出的公式是这个特殊情况下,当p = 1和p = 2写出这些公式明确地将。随着p的增长,它变得越来越复杂。而且,它们不如数值计算,最好通过求解方程组而不是对矩阵C求逆来实现。CC−1(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在你的榜样,您计算在拦截y和x和beta.hat。该y和x是原始数据的一部分。是否可以从协方差矩阵和均值中得出截距?您能提供一下符号吗?
— 简·韦恩

@简只有手段 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.