共分散行列を使用して、重回帰の係数を見つける方法はありますか?


23

単純な線形回帰の場合、回帰係数は分散共分散行列CからC d 、eによって 直接計算できます。

Cd,eCe,e
ここで、dは従属変数のインデックス、eは説明変数のインデックスです。

共分散行列しかない場合、複数の説明変数を持つモデルの係数を計算できますか?

ETAは、2つの説明変数については、それが現れる と同様のためのβ2。これを3つ以上の変数に拡張する方法がすぐにわかりません。

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

3
係数ベクトルβを解決するX ' Y = (X ' X )- 1 β。代数的操作のいくつかは、これが実際に2係数の場合に与える式と同じであることを明らかにしています。stat.purdue.edu/~jennings/stat514/stat512notes/topic3.pdfでうまくレイアウトされています。それがまったく役立つかどうかはわかりません。しかし、私はこれがその式に基づいて一般的に不可能であることを推測するためにベンチャーします。β^X′Y=(X′X)−1β
— シャドウトーカー14

1
@Davidこれを任意の数の説明変数(2を超える)に拡張する方法を見つけましたか?表現が必要です。
— ジェーンウェイン

1
whuberは行列形式で以下の溶液を得た:私は確信して私はあなたの質問を理解していないよ@JaneWayne C−1(Cov(Xi,y))′
— デヴィッド・

1
うん、私はそれを研究し、彼は正しい。
— ジェーンウェイン

回答:


36

はい、すべての変数(説明と応答)の共分散行列には、モデルに切片(定数)項が含まれている場合、すべての係数を見つけるために必要な情報が含まれています。(共分散は定数項に関する情報を提供しませんが、データの平均から見つけることができます。)


分析

説明変数のデータを次元の列ベクトルx 1、x 2、… 、x pとして配置し、応答変数を列ベクトルyとし、ランダム変数Yの実現と見なします。通常の最小二乗推定値はβモデルにおける係数のnx1,x2,…,xpyYβ^

E(Y)=α+Xβ

p+1X0=(1,1,…,1)′,X1,…,Xpn×p+1X

X′Xβ^=X′y.

システムと同等です

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

ガウス消去法はこのシステムを解決します。それは、隣接することによって進行しますp+1×p+11nX′Xp+11nX′yp+1×p+2A

1n(X′X)11=1nX0′X0=1A1nX0′Xi=X¯iAi+1,j+1=Xi′XjX¯iX¯jXiXji+1,p+21nXi′y−Xi¯y¯Xiy

したがって、ガウス消去法の最初のステップの後、システムは解くようになります

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

そして明らかに-すべての係数が共分散であるため-その解はすべての変数の共分散行列から見つけることができます。

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  

出力は、2つの方法の一致を示しています。

(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
Xcov(z)

7
この昇給このクロス検証済みのバーのような回答
— jpmuc

@whuberあなたの例ではy、xとから切片を計算しましたbeta.hat。yそしてx、元のデータの一部です。共分散行列と平均値だけから切片を導出することは可能ですか?表記を教えてください。
— ジェーンウェイン

バツ¯β^
バツ¯β^=バツβ^¯。
これを反映するようにコードを変更しました。
— whuber

コードの非常に役立つ+1
— マイケル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.