Rのロジスティック回帰のハット行列を計算する方法は?


8

ロジットモデルのハット行列をRで直接計算したいと思います。Long(1997)によれば、ロジットモデルのハットマトリックスは次のように定義されます。

H=VX(XVX)1XV

Xは独立変数のベクトルであり、Vはが対角にある対角行列です。π(1π)

このoptim関数を使用して、可能性を最大化し、ヘッセ行列を導出します。だから私は私の質問だと思います: Rでを計算する方法は?V

注:尤度関数は次のようになります。

loglik <-  function(theta,x,y){
y <- y
x <- as.matrix(x)
beta <- theta[1:ncol(x)]
loglik <- sum(-y*log(1 + exp(-(x%*%beta))) - (1-y)*log(1 + exp(x%*%beta)))
return(-loglik)
}

そして、これを次のようにoptim関数に送ります:

logit <- optim(c(1,1),loglik, y = y, x = x, hessian = T)

ここで、xは独立変数の行列であり、yは従属変数を持つベクトルです。

注:これを行うための既定の手順があることは知っていますが、最初から行う必要があります


3
どのようにして最適化を使用していますか(勾配関数を指定するかどうかに関係なく、どのオプションを使用するかなど)?? ロジスティック回帰は滑らかな凸問題です。ニュートン法などを使用して簡単に解決できます。実際、共分散行列の推定値を取得するには、(これに近いものを)実行する必要があります。
枢機卿

情報を投稿に追加しました
Thomas Jensen

回答:


13

π

π=11+exp(Xβ)

V

pi <- 1/(1+exp(-X%*%beta))
v <- sqrt(pi*(1-pi))

左から対角行列を乗算すると、各行が対角線の対応する要素で乗算されます。Rでこれは単純な乗算を使用して実現できます。

VX <- X*v 

その後H、次の方法で計算できます。

H <- VX%*%solve(crossprod(VX,VX),t(VX))

VH

H=VX(XV2X)1XV

コード例はこの数式で機能します。


mpiktasに感謝しますが、Vの計算方法にいくらか行き詰まっています。Vは共分散行列の対角線にすぎませんか?
トーマスジェンセン

πiπ^ii

では、データの各行について、予測確率を計算し、このベクトルの平方根に独立変数の行列を掛けます。
トーマスジェンセン

@トーマス、はい、それが私のコードでそれが行われている方法です。ダミーの例で実際に動作することを確認できます。
mpiktas 2011年

1
V2XYβ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.