マルチレベルのロジスティック回帰モデルの推定


9

レベル1(個別レベル)に1つの説明変数とレベル2(グループレベル)に1つの説明変数を持つ次のマルチレベルロジスティックモデル:

logit(pij)=π0j+π1jxij(1)
π0j=γ00+γ01zj+u0j(2)
π1j=γ10+γ11zj+u1j(3)

ここで、グループレベルの残差およびは、期待値がゼロの多変量正規分布であると想定されます。残差誤差の分散は として指定され、残差誤差の分散は として指定されます。u0ju1ju0jσ02u1jσ12

モデルのパラメーターを推定したいのですが、Rcommand を使用したいと思います glmmPQL

式(1)に式(2)と(3)を代入すると、

logit(pij)=γ00+γ10xij+γ01zj+γ11xijzj+u0j+u1jxij(4)

30のグループと各グループに5つの個人があります。(j=1,...,30)

Rコード:

   #Simulating data from multilevel logistic distribution 
   library(mvtnorm)
   set.seed(1234)

   J <- 30             ## number of groups
   n_j <- rep(5,J)     ## number of individuals in jth group
   N <- sum(n_j)

   g_00 <- -1
   g_01 <- 0.3
   g_10 <- 0.3
   g_11 <- 0.3

   s2_0 <- 0.13  ##variance corresponding to specific ICC
   s2_1 <- 1     ##variance standardized to 1
   s01  <- 0     ##covariance assumed zero

   z <- rnorm(J)
   x <- rnorm(N)

   #Generate (u_0j,u_1j) from a bivariate normal .
   mu <- c(0,0)
  sig <- matrix(c(s2_0,s01,s01,s2_1),ncol=2)
  u <- rmvnorm(J,mean=mu,sigma=sig,method="chol")

  pi_0 <- g_00 +g_01*z + as.vector(u[,1])
  pi_1 <- g_10 + g_11*z + as.vector(u[,2])
  eta <- rep(pi_0,n_j)+rep(pi_1,n_j)*x
  p <- exp(eta)/(1+exp(eta))

  y <- rbinom(N,1,p)

さて、パラメータ推定。

  #### estimating parameters 
  library(MASS)
  library(nlme)

  sim_data_mat <- matrix(c(y,x,rep(z,n_j),rep(1:30,n_j)),ncol=4)
  sim_data <- data.frame(sim_data_mat)
  colnames(sim_data) <- c("Y","X","Z","cluster")
  summary(glmmPQL(Y~X*Z,random=~1|cluster,family=binomial,data=sim_data,,niter=200))

出力:

      iteration 1
      Linear mixed-effects model fit by maximum likelihood
      Data: sim_data 

      Random effects:
      Formula: ~1 | cluster
              (Intercept)  Residual
      StdDev: 0.0001541031 0.9982503

      Variance function:
      Structure: fixed weights
      Formula: ~invwt 
      Fixed effects: Y ~ X * Z 
                      Value Std.Error  DF   t-value p-value
      (Intercept) -0.8968692 0.2018882 118 -4.442404  0.0000
      X            0.5803201 0.2216070 118  2.618691  0.0100
      Z            0.2535626 0.2258860  28  1.122525  0.2712
      X:Z          0.3375088 0.2691334 118  1.254057  0.2123
      Correlation: 
           (Intr) X      Z     
      X   -0.072              
      Z    0.315  0.157       
      X:Z  0.095  0.489  0.269

      Number of Observations: 150
      Number of Groups: 30 
  • 引数によって関数内で回の反復を行うと述べたのに、なぜ回しか反復しないのですか?1200glmmPQLniter=200

  • また、グループレベルの変数とクロスレベルの相互作用 p値は、有意ではないことを示しています。それでも、この記事で、なぜ彼らはさらなる分析のためにグループレベルの変数とクロスレベルの相互作用を保持するのですか?(Z)(X:Z)(Z)(X:Z)

  • また、自由度はどのようDFに計算されますか?

  • テーブルのさまざまな推定値の相対的なバイアスとは一致しません。相対バイアスを次のように計算しようとしました:

     #Estimated Fixed Effect parameters :
    
     hat_g_00 <- -0.8968692 #overall intercept
     hat_g_10 <- 0.5803201  # X
     hat_g_01 <-0.2535626   # Z
     hat_g_11 <-0.3375088   #X*Z
    
    fixed <-c(g_00,g_10,g_01,g_11)
    hat_fixed <-c(hat_g_00,hat_g_10,hat_g_01,hat_g_11)
    
    
    #Estimated Random Effect parameters :
    
    hat_s_0 <-0.0001541031  ##Estimated Standard deviation of random intercept 
    hat_s_1 <-  0.9982503 
    
    std  <- c(sqrt(0.13),1) 
    hat_std  <- c(0.0001541031,0.9982503) 
    
    ##Relative bias of Fixed Effect :
    rel_bias_fixed <- ((hat_fixed-fixed)/fixed)*100
    [1] -10.31308  93.44003 -15.47913  12.50293
    
    ##Relative bias of Random Effect :
    rel_bias_Random <- ((hat_std-std)/std)*100
    [1] -99.95726  -0.17497
    
  • 相対バイアスがテーブルと一致しないのはなぜですか?

回答:


7

おそらくここに質問が多すぎます。いくつかのコメント:

  • パッケージglmerからの使用を検討することもできlme4ます(glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data)); ラプラス近似またはガウスエルミート求積法を使用します。これらは一般にPQLよりも正確です(この場合の答えは非常に似ています)。
  • niter引数が指定する最大反復回数を、実際に必要なのは1回だけ
  • インタラクションの用語についての質問が何であるかわかりません。重要ではない相互作用の項を削除する必要があるかどうかは、ワームの缶詰のようなものであり、統計哲学と分析の目的の両方に依存します(たとえば、この質問を参照)
  • 分母の自由度は、Pinheiro and Bates(2000)の91ページで説明されている単純な「内部-外部」ヒューリスティックな単純な「内部-外部」ルールに従って計算され、Googleブックスで利用可能です...妥当な近似ですが、特にGLMMの場合、自由度の計算は複雑です
  • Moineddin らによる「マルチレベルロジスティック回帰モデルのサンプルサイズのシミュレーション研究」を複製しようとしている場合(DOI:10.1186 / 1471-2288-7-34)、単一の実行を比較するだけでなく、多数のシミュレーションを実行して平均を計算する必要があります。さらに、おそらくあなたはそれらの方法にもっと近づこうとする必要があります(私の最初の点に戻って、彼らはSAS PROC NLMIXEDを適応Gauss-Hermite求積法で使用すると述べているので、あなたは例えばでより良いでしょうglmer(...,nAGQ=10);それでもまだ完全に一致しますが、おそらくに近くなりglmmPQLます。

あなたはそれを複製することをもう少し説明してもらえますncbi.nlm.nih.gov/pmc/articles/PMC1955447/table/T1をI need to run a large number of simulations and compute averages。つまり、たとえば、マルチレベルのロジスティック分布からデータを回シミュレートし、そのパラメーターを毎回推定し、推定値の平均を取る必要があるということですか。しかし、私が言った場合、に従って、推定されたパラメーターの値がパラメーターの真の値と等しくなりませんか?E [ θ ] = θ300E[θ^]=θ
ABC

glmer()ランダム切片の分散推定します。しかし、他の分散成分(残差分散成分)の推定値を取得していません。結果からは σ 2 1σ02σ12summary(glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data,nAGQ=10))
ABC

2
GLMM推定に使用する近似は不偏であると想定しています。それはおそらく本当ではありません。(PQLではなく)より優れた近似のほとんどは、漸近的に偏りがありませんが、有限サイズのサンプルには偏っています。
Ben Bolker、2015年

1
@ABC:はい、どちらのリンクにもコードのチャンクを複数回複製する方法の例が含まれています。たとえば、コードを関数にラップして、replicateコマンドを実行するのは簡単です。
Ryan Simmons

1
@ABC:質問の他の部分については、何があなたを困らせているのか、私は少し混乱しています。乱数を生成しています。丸めまたは無限に多い数の複製なしでは、バイアスで正確に0になることは決してありません(実際、ANYパラメータの正確な正確な推定)。ただし、十分な数のレプリケーション(たとえば、1000)を使用すると、非常に小さい(0に近い)バイアスがかかる可能性があります。あなたが複製しようとしているとあなたが引用した論文はこれを実証しています。
Ryan Simmons
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.