Ước tính mô hình hồi quy logistic đa cấp


9

Mô hình logistic đa cấp sau đây với một biến giải thích ở cấp 1 (cấp độ cá nhân) và một biến giải thích ở cấp độ 2 (cấp độ nhóm):

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

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

trong đó, phần dư cấp độ nhóm và được giả sử là có phân phối chuẩn nhiều biến số với kỳ vọng bằng không. Phương sai của các lỗi dư được chỉ định là và phương sai của các lỗi dư được chỉ định là . u 1 j u 0 j σ 2 0 u 1 j σ 2 1u0ju1ju0jσ02u1jσ12

Tôi muốn ước tính tham số của mô hình và tôi muốn sử dụng Rlệnh glmmPQL.

Thay vào phương trình (2) và (3) trong phương trình (1),

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

Có 30 nhóm và 5 cá nhân trong mỗi nhóm.(j=1,...,30)

Mã 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)

Bây giờ ước tính tham số.

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

ĐẦU RA:

      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 
  • Tại sao nó chỉ mất lần lặp trong khi tôi đã đề cập để lấy lần lặp bên trong hàm theo đối số ?2001200glmmPQLniter=200

  • Ngoài ra giá trị p của biến cấp độ nhóm và tương tác ngang cấp cho thấy chúng không đáng kể. Vẫn còn tại sao trong bài viết này , họ giữ biến số cấp độ nhóm và tương tác ngang cấp để phân tích thêm?( X : Z ) ( Z ) ( X : Z )(Z)(X:Z)(Z)(X:Z)

  • Ngoài ra mức độ tự do DFđược tính như thế nào?

  • Nó không phù hợp với độ lệch tương đối của các ước tính khác nhau của bảng . Tôi đã cố gắng tính toán độ lệch tương đối như:

     #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
    
  • Tại sao độ lệch tương đối không khớp với bảng?

Câu trả lời:


7

Có lẽ có quá nhiều câu hỏi ở đây. Một vài bình luận:

  • bạn có thể cân nhắc sử dụng glmertừ lme4gói ( glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data)); nó sử dụng phép tính gần đúng Laplace hoặc phương pháp bậc hai Gauss-Hermite, thường chính xác hơn PQL (mặc dù các câu trả lời rất giống nhau trong trường hợp này).
  • Đối nitersố chỉ định số lần lặp tối đa ; chỉ một lần lặp là thực sự cần thiết
  • Tôi không chắc câu hỏi của bạn là gì về thuật ngữ tương tác. Việc bạn có nên bỏ các thuật ngữ tương tác không đáng kể hay không là một chút giun, và phụ thuộc cả vào triết lý thống kê của bạn và vào các mục tiêu phân tích của bạn (ví dụ: xem câu hỏi này )
  • mức độ tự do của mẫu số đang được tính theo một quy tắc 'bên trong-bên ngoài' đơn giản theo quy tắc 'bên trong bên ngoài' đơn giản được mô tả trên trang 91 của Pinheiro và Bates (2000), có sẵn trên Google Sách ... nói chung một xấp xỉ hợp lý nhưng việc tính toán mức độ tự do rất phức tạp, đặc biệt đối với GLMM
  • nếu bạn đang cố gắng sao chép "Một nghiên cứu mô phỏng kích thước mẫu cho các mô hình hồi quy logistic đa cấp" của Moineddin et al. (DOI: 10.1186 / 1471-2288-7-34), bạn cần chạy một số lượng lớn mô phỏng và tính trung bình, không chỉ so sánh một lần chạy. Hơn nữa, có lẽ bạn nên cố gắng tiếp cận gần hơn với các phương thức của họ (quay trở lại điểm đầu tiên của tôi, họ nói rằng họ sử dụng SAS PROC NLMIXED với phương pháp bậc hai Gauss-Hermite thích ứng, vì vậy bạn sẽ tốt hơn với ví dụ: glmer(...,nAGQ=10)nó vẫn không khớp chính xác, nhưng nó có thể sẽ gần hơn glmmPQL.

I need to run a large number of simulations and compute averages300E[θ^]=θ

glmer()σ02σ12summary(glmer(Y~X*Z+(1|cluster),family=binomial,data=sim_data,nAGQ=10))

2
bạn đang giả định rằng các xấp xỉ chúng tôi sử dụng để ước tính GLMM là không thiên vị. Điều đó có lẽ không đúng; hầu hết các xấp xỉ tốt hơn (không PQL) là tiệm cận không thiên vị, nhưng chúng tôi vẫn đang thiên vị cho mẫu hữu hạn kích thước.
Ben Bolker

1
@ABC: Có, cả hai liên kết này đều chứa các ví dụ về cách sao chép một đoạn mã nhiều lần. Nó sẽ dễ dàng để bọc mã của bạn trong một chức năng và chạy lệnh sao chép, ví dụ.
Ryan Simmons

1
@ABC: Đối với phần khác của câu hỏi của bạn, tôi hơi bối rối về những gì đang làm phiền bạn. Bạn đang tạo số ngẫu nhiên; không làm tròn hoặc số lượng bản sao lớn vô hạn, bạn sẽ không bao giờ nhận được chính xác 0 với độ lệch (hoặc, thực sự, một ước tính chính xác của tham số BẤT K)). Tuy nhiên, với số lượng bản sao đủ lớn (giả sử là 1000), bạn có thể nhận được độ lệch rất nhỏ (gần bằng 0). Bài báo mà bạn trích dẫn mà bạn đang cố gắng sao chép đã chứng minh điều này.
Ryan Simmons
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.