Stima dei modelli di regressione logistica multilivello


9

Il seguente modello logistico multilivello con una variabile esplicativa a livello 1 (livello individuale) e una variabile esplicativa a livello 2 (livello gruppo):

π 0 j = γ 00 + γ 01 z j + u 0 j( 2 ) π 1 j = γ 10 + γ 11 z j + u 1 j( 3 )

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

dove, si presume che i residui a livello di gruppo e abbiano una distribuzione normale multivariata con aspettativa zero. La varianza degli errori residui è specificata come e la varianza degli errori residui è specificata come . u 1 j u 0 j σ 2 0 u 1 j σ 2 1u0ju1ju0jσ02u1jσ12

Voglio stimare il parametro del modello e mi piace usare il Rcomando glmmPQL.

Sostituendo l'equazione (2) e (3) nei rendimenti dell'equazione (1),

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

Ci sono 30 gruppi e 5 individui in ciascun gruppo.(j=1,...,30)

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

Ora la stima dei parametri.

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

PRODUZIONE :

      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 
  • Perché ci vuole solo iterazione mentre ho citato per prendere iterazioni all'interno della funzione dall'argomento ?2001200glmmPQLniter=200

  • Anche il valore p della variabile a livello di gruppo e l'interazione a livello incrociato mostrano che non sono significativi. Ancora perché in questo articolo , mantengono la variabile a livello di gruppo e l'interazione a livello incrociato per ulteriori analisi?( X : Z ) ( Z ) ( X : Z )(Z)(X:Z)(Z)(X:Z)

  • Inoltre, come vengono DFcalcolati i gradi di libertà ?

  • Non corrisponde alla distorsione relativa delle varie stime della tabella . Ho provato a calcolare la distorsione relativa come:

     #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
    
  • Perché la distorsione relativa non corrisponde alla tabella?

Risposte:


7

Forse ci sono troppe domande qui. Alcuni commenti:

  • potresti considerare l'utilizzo glmerdal lme4pacchetto ( glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data)); usa l'approssimazione di Laplace o la quadratura di Gauss-Hermite, che sono generalmente più accurate di PQL (anche se le risposte sono molto simili in questo caso).
  • L' niterargomento specifica il numero massimo di iterazioni; era effettivamente necessaria solo una iterazione
  • Non sono sicuro di quale sia la tua domanda sul termine di interazione. Il fatto di dover eliminare o meno termini di interazione non significativi è un po 'una lattina di worm e dipende sia dalla vostra filosofia statistica sia dagli obiettivi della vostra analisi (ad es. Vedere questa domanda )
  • i gradi di libertà del denominatore vengono calcolati secondo una semplice euristica "interno-esterno", una semplice regola "interno-esterno" descritta a pagina 91 di Pinheiro e Bates (2000), che è disponibile su Google Libri ... è generalmente un'approssimazione ragionevole ma il calcolo dei gradi di libertà è complesso, specialmente per i GLMM
  • se si sta tentando di replicare "Uno studio di simulazione delle dimensioni del campione per i modelli di regressione logistica multilivello" di Moineddin et al. (DOI: 10.1186 / 1471-2288-7-34), devi eseguire un gran numero di simulazioni e calcolare medie, non solo confrontare una singola corsa. Inoltre, dovresti probabilmente provare ad avvicinarti ai loro metodi (tornando al mio primo punto, affermano che usano SAS PROC NLMIXED con quadratura adattativa di Gauss-Hermite, quindi starai meglio con ad esempio glmer(...,nAGQ=10); non lo farà ancora corrispondere esattamente, ma probabilmente sarà più vicino di glmmPQL.

Potrebbe spiegare un po 'di più che per replicare ncbi.nlm.nih.gov/pmc/articles/PMC1955447/table/T1 , I need to run a large number of simulations and compute averages. Significa, per esempio, che devo simulare i dati volte dalla distribuzione logistica multilivello e stimare i loro parametri ogni volta e prendere la media delle stime? Ma se lo dico, il valore del parametro stimato non sarà uguale al valore reale del parametro secondo ? E [ θ ] = θ300E[θ^]=θ
ABC

glmer()stima la varianza dell'intercettazione casuale, . Ma non sto ottenendo alcuna stima di altri componenti di varianza (componente di varianza residua), dal risultato prodotto da σ 2 1σ02σ12summary(glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data,nAGQ=10))
ABC

2
stai assumendo che le approssimazioni che usiamo per la stima GLMM sono imparziali. Questo probabilmente non è vero; la maggior parte delle approssimazioni migliori (non PQL) sono asintoticamente imparziali, ma sono ancora distorte per campioni di dimensioni finite.
Ben Bolker,

1
@ABC: Sì, entrambi questi collegamenti contengono esempi su come replicare più volte un blocco di codice. Dovrebbe essere semplice racchiudere il codice in una funzione ed eseguire il comando replicate, ad esempio.
Ryan Simmons,

1
@ABC: Per quanto riguarda l'altra parte della tua domanda, sono un po 'confuso su ciò che ti dà fastidio. Stai generando numeri casuali; senza arrotondamenti o un numero infinitamente elevato di repliche, non otterrai mai esattamente 0 con il bias (o, in effetti, una stima esattamente precisa di QUALSIASI parametro). Tuttavia, con un numero sufficiente di repliche (diciamo, 1000), è probabile che si ottenga un pregiudizio molto piccolo (vicino a 0). Il documento che citi che stai cercando di replicare lo dimostra.
Ryan Simmons,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.