Чи є спосіб використовувати коваріаційну матрицю для пошуку коефіцієнтів для множинної регресії?


23

Для простої лінійної регресії коефіцієнт регресії обчислюється безпосередньо з матриці дисперсії-коваріації через де - індекс залежної змінної, а - індекс пояснювальної змінної.C d , eC de

Cd,eCe,e
de

Якщо є лише матриця коваріації, чи можна обчислити коефіцієнти для моделі з кількома пояснювальними змінними?

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 ' Y = ( Х ' х ) - 1 β . Деякі алгебраїчні маніпуляції виявляють, що це насправді те саме, що формула, яку ви даєте у випадку 2-коефіцієнта. Тут добре викладено: stat.purdue.edu/~jennings/stat514/stat512notes/topic3.pdf . Не впевнений, чи це взагалі допомагає. Але я б ризикну здогадатися, що це взагалі неможливо на основі цієї формули. β^XY=(XX)1β
shadowtalker

1
@David Ви зрозуміли, як поширити це на довільну кількість пояснювальних змінних (понад 2)? Мені потрібен вираз.
Джейн Уейн

1
@JaneWayne Я не впевнений, що розумію ваше запитання: whuber дав рішення нижче в матричній формі, C1(Cov(Xi,y))
Девід

1
так я це вивчив, і він має рацію.
Джейн Уейн

Відповіді:


36

Так, матриця коваріації всіх змінних - пояснювальна та відповідь - містить інформацію, необхідну для пошуку всіх коефіцієнтів, за умови, що в модель включений переривний (постійний) термін. (Хоча коваріанці не дають ніякої інформації про постійний термін, це можна знайти із засобів даних.)


Аналіз

Нехай дані для пояснювальних змінних бути організовані в вигляді - мірних векторів - стовпців х 1 , х 2 , ... , х р і змінна відгуку бути вектор - стовпець у , вважається реалізація випадкової величини Y . Звичайні оцінки найменших квадратів р коефіцієнтів в моделіnx1,x2,,xpyYβ^

E(Y)=α+Xβ

виходять при складанні вектори - стовпці X 0 = ( 1 , 1 , ... , 1 ) ' , X 1 , ... , Х р в п × р + 1 масив Х і рішення системи лінійних рівняньp+1X0=(1,1,,1),X1,,Xpn×p+1X

XXβ^=Xy.

Він еквівалентний системі

1nXXβ^=1nXy.

Гауссова ліквідація вирішить цю систему. Це триває приєднанням до матрицю 1p+1×p+1іp+1-вектор11nXXp+1вр+1×р+2масивуAі рядки знижують його. 1nXyp+1×p+2A

Першим кроком буде інспекція . Визначивши це ненульовим, він переходить до віднімання відповідних кратних елементів першого рядуAз решти рядків, щоб нульові записи записати в першому стовпчику. Ці кратні будуть11n(XX)11=1nX0X0=1A1nX0Xi=X¯iAi+1,j+1=XiXjX¯iX¯jXiXji+1,p+21nXiyXi¯y¯, the covariance of Xi with y.

Thus, after the first step of Gaussian elimination the system is reduced to solving

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

and obviously--since all the coefficients are covariances--that solution can be found from the covariance matrix of all the variables.

(When C is invertible the solution can be written C1(Cov(Xi,y)). The formulas given in the question are special cases of this when p=1 and p=2. Writing out such formulas explicitly will become more and more complex as p grows. Moreover, they are inferior for numerical computation, which is best carried out by solving the system of equations rather than by inverting the matrix C.)

The constant term will be the difference between the mean of y and the mean values predicted from the estimates, Xβ^.


Example

To illustrate, the following R code creates some data, computes their covariances, and obtains the least squares coefficient estimates solely from that information. It compares them to the estimates obtained from the least-squares estimator 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  

The output shows agreement between the two methods:

(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
Thanks, @whuber! This is exactly what I was looking for, and my atrophied brain was unable to get to. As an aside, the motivation for the question is that for various reasons we essentially do not have the full X available, but have cov(z) from previous calculations.
David

7
Answers like this raise the bar of this Cross Validated
jpmuc

@whuber In your example, you computed the intercept from y and x and beta.hat. The y and x are part of the original data. Is it possible to derive the intercept from the covariance matrix and means alone? Could you please provide the notation?
Jane Wayne

@Jane Given only the means X¯, apply β^ to them:
X¯β^=Xβ^¯.
I have changed the code to reflect this.
whuber

very helpful +1 for the code
Майкл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.