混合効果の可能性と推定ロジスティック回帰


8

最初に、固定部分とランダム部分を持つロジスティック回帰のデータをシミュレートします。

set.seed(1)
n    <- 100
x    <- runif(n)
z    <- sample(c(0,1), n, replace=TRUE)
b    <- rnorm(2)
beta <- c(0.4, 0.8)
X    <- model.matrix(~x)
Z    <- cbind(z, 1-z)
eta  <- X%*%beta + Z%*%b
pr   <- 1/(1+exp(-eta))
y    <- rbinom(n, 1, pr)

ランダムな部分がないロジスティック回帰を近似したいだけの場合は、次のglm関数を使用できます。

glm(y~x, family="binomial")

glm(y~x, family="binomial")$coefficients
# (Intercept)           x 
#  -0.2992785   2.1429825 

または、対数尤度の独自の関数を構築する

logL(β)=i=1nyilogΛ(ηi)+(1yi)log(1Λ(ηi))

ここで、Λ(ηi)=11+exp(ηi)およびηi=Xiβ を使用optim()して、次のように最大化するパラメーターを推定しますコード例:

ll.no.random <- function(theta,X,y){
  beta <- theta[1:ncol(X)]
  eta  <- X%*%beta
  p    <- 1/(1+exp(-eta))
  ll   <- sum( y*log(p) + (1-y)*log(1-p) )
  -ll
}

optim(c(0,1), ll.no.random, X=X, y=y)

optim(c(0,1), ll.no.random, X=X, y=y)$par
# -0.2992456  2.1427484

もちろん、どちらも同じ推定値を与え、同じ値の対数尤度を最大化します。混合効果の場合、次のようなものが必要です

library(lme4)
glmer(y~x + (1|z), family="binomial")

しかし、どのように私たち自身の機能で同じことをすることができますか?可能性は

L=j=1JPr(y1j,...,ynjj|x,bj)f(bj)dbj

積分には閉形式の式がないため、ガウス求積法のような数値積分を使用する必要があります。パッケージstatmodを使用して、いくつかの求積を取得できます。たとえば、10

library(statmod)    
gq <- gauss.quad(10)
w  <- gq$weights
g  <- gq$nodes

更新:(ここでは)に対してこれらの求積位置と重みを使用して、代わりにを置換した項の合計によっての積分を概算できます。項にそれぞれの重み掛けたもの。したがって、尤度関数は次のようになります。W 、R、R = 1 R R = 10 b j R g r b j w rgrwrr=1,...,RR=10bjRgrbjwr

L=j=1Jr=1RPr(y1j,...,ynjj|x,bj=gr)wr

また、ランダムな部分の分散を考慮する必要があります。これは、関数のをに置き換えることで達成できることを読みここで、ので、我々上記尤度関数で実際に置き換えるさんとさんとないさん。η σ J θ J θ JN 0 1 θ G βbjN(0,σb2)ησjθjθjN(0,1)θgβ

ベクトルが同じ長さにならないので、私が得ない計算上の問題の1つは、どのように項を置き換えるかです。しかし、おそらく私はそれを理解していません。私がここで重要な何かを見逃しているか、この方法がどのように機能するかを誤解しているためです。


今はよく見る時間はありませんが、MCMCの良い使い方のようです。
シャドウトーカー2014

@ssdecontrolありがとう、MCMCは良い代替手段です。しかし、私は古典的なアプローチを適用したいと思います。
スティーブは

積分を評価するためのMCMCの非古典的なものは何ですか?
シャドウトーカー2014

@ssdecontrolよくわかりません...しかし、チェックしたすべての本とlme4、通常のRパッケージは、MCMCを使用していません。なので、これにこだわりたいと思います。少なくとも最初は。
スティーブ

1
R-sig-MEリスト(r-sig-mixed-models@r-project.org)でこれを尋ねましたか?一部の人々はさらにあなたを助けることができるかもしれません。さらに:PinheiroとChaoによる論文「マルチレベル一般化線形混合モデルの効率的なラプラシアンおよび適応ガウス求積法アルゴリズム」を研究することを強くお勧めします。AGQのパフォーマンスに関する結果と、その背後にある線形代数が含まれています。それらをコーディングしたい場合は...まあ、いくつかの深刻な疎行列分解の準備をしてください。:D
usεr11852

回答:


2

「ベクトルが同じ長さにならない」とは思いませんでした。質問を明確にしてください。

まず、次元が4未満の積分の場合、求積法などの直接数値法はMCMCよりも効率的です。私はしばらくこれらの質問を研究しました、そして私はこの問題をあなたと話したいです。

混合効果ロジスティック回帰の場合、R私が見つけた唯一の明示的なコードは、Demidenko教授の著書であるMixed Models:Theory and Applicationsからのものです。このコードは、Webページの「ソフトウェアとデータ」の列からダウンロードできます。logMLEgh()で見つけることができます\mixed_models_data.zip\MixedModels\Chapter07。彼はstatmod求積を取得するためにパッケージを使用しませんでしたが、独自の関数を記述しましたgauher()。コードにいくつかのマイナーなエラーがあり、著者とそれらについて話し合いましたが、彼のコードと本から始めることはそれでも非常に役に立ちます。必要に応じて修正バージョンを提供できます。

もう1つの問題は、正確な推定値を取得したい場合optim()は十分ではなく、フィッシャースコアリングなどの方法を使用する必要がある場合があることですglm()


その本は私が取り組んでいることについての豊富な情報を持っているようです。コード自体はあまり言いません-本を注文しただけなので、私はそれを待たなければなりません。ベクトルについての事は、我々は用語に置き換えた場合、2点であるb10のノードとの、どのように我々は行列を乗算することができるでしょうZg?それとも完全に間違っていますか?
スティーブ

正確な見積もりを取得するためにさらに進む必要があることはわかっていますが、最初のステップとして最初にGQを理解したいと思っていました。
スティーブは

最初にGoogleブックスで 2つのエディションをプレビューできます。あなたのコードでは、は行列ですか?しかし、単なるスカラーですか?最初にランダムインターセプトモデルから開始できます。変量効果の次元が2の場合、合計100の2次元ノードが必要であり、各次元に10ノードが必要です。n × 2 bZn×2bZ = rep(1,n)
ランデル2014

申し訳ありませんが、考えているほど混乱します。私が行うと、Z=rep(1,n)各行に対してランダムな切片が1つ取得されます。つまり、各個人はグループです。私の例では、2つのグループがあるため、とがあり、必要なを与えます。番号?Z%*%b 2 × 1 n × 1n×22×1n×1
スティーブ

ああ、それZがランダム効果の設計行列ではなく、各クラスターのランダム切片を分離するために使用されていることに気づきました。その後、あなたは正しいですが、積分を評価し、各クラスターに対して別々に求積法を利用する必要があります。Zもう必要はありません。各クラスターの積分を評価し、それらを合計してください。ランダム切片の計画行列は、1のベクトルです。
ランデル2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.