Szacowanie wielopoziomowych modeli regresji logistycznej

9

Poniższy wielopoziomowy model logistyczny z jedną zmienną objaśniającą na poziomie 1 (poziom indywidualny) i jedną zmienną objaśniającą na poziomie 2 (poziom grupy):

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

gdzie zakłada się, że reszty na poziomie grupy i mają wielowymiarowy rozkład normalny z oczekiwaniem zero. Wariancja błędów resztkowych jest określona jako , a wariancja błędów resztkowych jest określona jako .u0ju1jotu0jotσ02)u1jotσ12)

Chcę oszacować parametr modelu i lubię używać Rpolecenia glmmPQL.

Podstawienie równania (2) i (3) do równania (1) daje,

logit(pjajot)=γ00+γ10xjajot+γ01zjot+γ11xjajotzjot+u0jot+u1jotxjajot(4)

W każdej grupie jest 30 grup i 5 osób.(jot=1,...,30)

Kod 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)

Teraz oszacowanie parametru.

  #### 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))

WYNIK :

      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 
  • Dlaczego zajmuje tylko iterację, a ja wspomniałem, że argumentem jest iteracji wewnątrz funkcji ?1200glmmPQLniter=200

  • Również wartość p zmiennej na poziomie grupy i interakcji między poziomami pokazuje, że nie są one znaczące. Nadal dlaczego w tym artykule zachowują zmienną na poziomie grupy i interakcje między poziomami do dalszej analizy?(Z)(X:Z)(Z)(X:Z)

  • Również w jaki sposób DFobliczane są stopnie swobody ?

  • To nie pasuje do względnego obciążenia różnych oszacowań tabeli . Próbowałem obliczyć względne odchylenie jako:

     #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
    
  • Dlaczego względne odchylenie nie pasuje do stołu?
ABC
źródło

Odpowiedzi:

7

Być może jest tu zbyt wiele pytań. Niektóre komentarze:

  • można rozważyć użycie glmerz lme4pakietu ( glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data)); wykorzystuje przybliżenie Laplace'a lub kwadraturę Gaussa-Hermity, które są na ogół dokładniejsze niż PQL (chociaż w tym przypadku odpowiedzi są bardzo podobne).
  • niterArgument określa maksymalną liczbę iteracji; w rzeczywistości konieczna była tylko jedna iteracja
  • Nie jestem pewien, jakie jest twoje pytanie na temat terminu interakcji. To, czy powinieneś porzucić nieistotne warunki interakcji, czy nie, to trochę puszka robaków i zależy zarówno od twojej filozofii statystycznej, jak i celów twojej analizy (np. Zobacz to pytanie )
  • mianownik stopnie swobody są obliczane zgodnie z prostą heurystyczną „wewnętrzną-zewnętrzną” prostą „wewnętrzną-zewnętrzną” zasadą opisaną na stronie 91 Pinheiro i Batesa (2000), dostępną w Google Books ... ogólnie jest rozsądne przybliżenie, ale obliczenie stopni swobody jest złożone, szczególnie w przypadku GLMM
  • jeśli próbujesz powielić „Badanie symulacyjne wielkości próby dla wielopoziomowych modeli regresji logistycznej” autorstwa Moineddina i in. (DOI: 10.1186 / 1471-2288-7-34), musisz uruchomić dużą liczbę symulacji i obliczyć średnie, a nie tylko porównać pojedynczy przebieg. Co więcej, powinieneś prawdopodobnie spróbować zbliżyć się do ich metod (wracając do mojego pierwszego punktu, twierdzą, że używają SAS PROC NLMIXED z adaptacyjną kwadraturą Gaussa-Hermitu, więc lepiej byłoby np. Z glmer(...,nAGQ=10); nadal nie będzie pasuje dokładnie, ale prawdopodobnie będzie bliżej niż glmmPQL.
Ben Bolker
źródło
Czy mógłbyś wyjaśnić bardziej, że trochę do replikacji ncbi.nlm.nih.gov/pmc/articles/PMC1955447/table/T1 , I need to run a large number of simulations and compute averages. Czy to znaczy, powiedzmy, że muszę symulować dane razy z wielopoziomowego rozkładu logistycznego i każdorazowo szacować ich parametry oraz przyjmować średnią z szacunków? Ale jeśli powiem, czy wartość szacowanego parametru nie będzie równa prawdziwej wartości parametru zgodnie z ? 300mi[θ^]=θ
ABC
glmer()szacuje wariancję losowego przechwytywania, . Ale nie otrzymuję żadnego oszacowania innego komponentu wariancji (komponent wariancji resztkowej), z wyniku produkowanego przezσ02)σ12)summary(glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data,nAGQ=10))
ABC
2
zakładasz, że przybliżenia, których używamy do oszacowania GLMM, są obiektywne. To prawdopodobnie nie jest prawda; większość lepszych aproksymacji (nie PQL) jest asymptotycznie bezstronna, ale nadal są one tendencyjne dla próbek o skończonej wielkości.
Ben Bolker,
1
@ABC: Tak, oba te linki zawierają przykłady wielokrotnego replikowania fragmentu kodu. Powinno być łatwo owinąć kod w funkcję i na przykład uruchomić polecenie replikacji.
Ryan Simmons,
1
@ABC: Jeśli chodzi o drugą część twojego pytania, jestem trochę zdezorientowany, co cię niepokoi. Generujesz liczby losowe; bez zaokrąglania lub nieskończenie dużej liczby replikacji, nigdy nie uzyskasz dokładnie 0 z odchyleniem (lub, właściwie, dokładnie oszacowaniem ŻADNEGO parametru). Jednak przy wystarczająco dużej liczbie replikacji (powiedzmy 1000) prawdopodobne jest uzyskanie bardzo małej (bliskiej zeru) stronniczości. Dokument, który cytujesz, który próbujesz powielić, pokazuje to.
Ryan Simmons,