공분산 행렬을 사용하여 다중 회귀에 대한 계수를 찾는 방법이 있습니까?


23

간단한 선형 회귀 분석의 경우 회귀 계수는 분산 공분산 행렬 에서 의해 직접 계산할 수 있습니다. 여기서 는 종속 변수의 인덱스이고 는 설명 변수의 인덱스입니다.C

Cd,eCe,e
de

공분산 행렬 만있는 경우 여러 설명 변수가있는 모형의 계수를 계산할 수 있습니까?

ETA : 두 개의 설명 변수의 경우 및 와 유사합니다 . 이것을 세 개 이상의 변수로 확장하는 방법을 즉시 보지 못했습니다.

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

3
계수 벡터 는 입니다. 일부 대수적 조작은 이것이 실제로 2- 계수 경우에 제공하는 공식과 동일하다는 것을 보여줍니다. stat.purdue.edu/~jennings/stat514/stat512notes/topic3.pdf 여기에 멋지게 배치하십시오 . 그것이 도움이되는지 확실하지 않습니다. 그러나 나는 이것이 일반적으로 그 공식에 근거하여 불가능하다는 것을 추측하려고 노력했습니다. β^XY=(XX)1β
shadowtalker

1
@David 이것을 임의의 수의 설명 변수 (2 개 이상)로 확장하는 방법을 알아 냈습니까? 표현이 필요합니다.
Jane Wayne

1
@JaneWayne 나는 당신의 질문을 이해하지 못합니다 : whuber는C1(Cov(Xi,y))
David

1
p 나는 그것을 공부했고 그는 옳다.
Jane Wayne

답변:


36

그렇습니다. 모든 변수 (설명 및 반응 ) 의 공분산 행렬 에는 절편 (일정) 항이 모형에 포함 된 경우 모든 계수를 찾는 데 필요한 정보가 포함됩니다. 공분산은 상수 항에 대한 정보를 제공하지 않지만 데이터 수단에서 찾을 수 있습니다.


분석

설명 변수에 대한 데이터를 차원 열 벡터 하고 응답 변수를 열 변수 로 간주합니다 . 이는 임의 변수 의 실현으로 간주됩니다 . 보통 최소 제곱 은 모형의 계수에 대한 를 추정 합니다., X 1 , X 2 , ... , X의 P의 Y Y의 βnx1,x2,,xpyYβ^

E(Y)=α+Xβ

조립함으로써 얻어진다 열 벡터 에 어레이 선형 연립 방정식을 해결X 0 = ( 1 , 1 , , 1 ) ' , X 1 , , X p n × p + 1 Xp+1X0=(1,1,,1),X1,,Xpn×p+1X

XXβ^=Xy.

시스템과 동등

1nXXβ^=1nXy.

가우스 제거 는이 시스템을 해결합니다. 이는 인접하여 진행 행렬 상기 - 벡터 (A) 내로 배열 및 행 축소. 1p+1×p+1p+111nXXp+1p+1×p+2A1nXyp+1×p+2A

첫 번째 단계는 합니다. 이것을 0이 아닌 것으로 발견하면 , 나머지 행에서 의 첫 번째 행의 적절한 배수를 빼서 첫 번째 열의 나머지 항목을 제로화합니다. 이 배수는 이며 항목 에서 빼는 수 는 합니다. 이것은 와 의 공분산 공식입니다 . 또한 위치에 남은 숫자는A11n(XX)11=1nX0X0=1AI+1,J+1=X ' 나는 XJ ¯ X I ¯ X JXXJI+1,P+211nX0Xi=X¯iAi+1,j+1=XiXjX¯iX¯jXiXji+1,p+2 Xiy1nXiyXi¯y¯,의 공분산 와 .Xiy

따라서 가우시안 제거의 첫 번째 단계 후에 시스템이 해결으로 감소합니다.

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

모든 계수가 공분산이기 때문에 모든 변수의 공분산 행렬에서 해를 찾을 수 있습니다.

( 가 뒤집을 수 없을 때 솔루션은 이라고 쓸 수 있습니다 . 및 . 이러한 식 작성 아웃 명백하게 더 복잡해질 것이다 증가한다. 또한, 그들은 가장 방정식 아닌 행렬 반전시킴으로써 해결 시스템에 의해 수행되는 수치 계산에 대한 열등한 ).C - 1 ( Cov ( X i , y ) ) p = 1 p = 2 p CCC1(Cov(Xi,y))p=1p=2pC

상수 항은 의 평균과 추정치 에서 예측 한 평균 값 의 차이 입니다.X의 β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! 이것이 바로 내가 찾던 것이었고, 위축 된 뇌는 도달 할 수 없었습니다. 제쳐두고, 문제의 동기는 다양한 이유로 우리가 본질적으로 완전한 사용할 수는 없지만 이전 계산에서 얻은 것입니다. Xcov(z)
David

7
이와 같은 답변은이 교차 검증의 기준을
높입니다

@whuber이 예에서는 yand x및 에서 가로 채기를 계산했습니다 beta.hat. yx원래 데이터의 일부이다. 공분산 행렬에서 절편을 도출 할 수 있습니까? 표기법을 제공해 주시겠습니까?
Jane Wayne

@Jane 만이 주어지면 를 적용하십시오 : 이것을 반영하기 위해 코드를 변경했습니다. β ¯ X β = ¯ X β .X¯β^
X¯β^=Xβ^¯.
whuber

코드에 매우 유용한 +1
Michael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.