Cách chỉ định mô hình hiệu ứng hỗn hợp Bayes trong BUGS


8

Tôi đã đăng bài này vào đầu tuần sau đó rút lại câu hỏi khi tôi tìm thấy một nguồn tốt, không muốn lãng phí thời gian của mọi người. Tôi không có nhiều tiến bộ Tôi sợ. Khi cố gắng trở thành một công dân tốt ở đây tôi sẽ làm cho vấn đề rõ ràng nhất có thể. Tôi nghi ngờ sẽ có vài người tham gia.

Tôi có một khung dữ liệu trong RI muốn phân tích trong BUGS hoặc R. Nó ở định dạng dài. Nó bao gồm nhiều quan sát trên 120 cá nhân, với tổng số 885 hàng. Tôi đang xem xét sự xuất hiện của một kết quả phân loại - nhưng điều đó không thực sự phù hợp ở đây. Câu hỏi là về một cái gì đó sâu sắc hơn.

Mô hình tôi đã sử dụng cho đến đây là

  mymodel<-gee(Category ~ Predictor 1 + Predictor 2..family=binomial(link="logit"),
  data=mydata, 
   id=Person)

với một mô hình cận biên về cơ bản chiếm tỷ lệ nhóm bệnh nhân. Sau đó tôi đã kiểm tra

 mymodel<-gee(Category ~ Predictor 1 + Predictor 2.. , family=binomial(link="logit"), 
  corstr = "AR-M", 
  data=mydata, id=Person)

để tính toán thời gian đặt hàng của các quan sát trên từng người.

Điều này đã không thay đổi nhiều.

Sau đó, tôi đã cố gắng mô hình hóa chúng bằng cách sử dụng bộ lệnh MCMCPack sau:

 mymodel<-MCMCglmm(category~  Predictor1 + Predictor2..,  
 data=mydata, family=binomial(link="logit"))

Một cuộc kiểm tra đầu ra rất ly kỳ, cho thấy ý nghĩa thống kê đối với nhiều người dự đoán. Tôi ca ngợi mình là một người Bayes mới được chuyển đổi, cho đến khi tôi nhận ra rằng tôi đã không tính đến các biện pháp lặp đi lặp lại trong bệnh nhân.

Tôi hiểu rằng tôi phải tính đến điều đó. Tôi hiểu rằng điều này có thể có nghĩa là phù hợp với một siêu nhân cho mỗi cá nhân - đúng không? Hình thức này sẽ có trong BUGS?

Đây là mô hình reg log cơ bản: (kudos to Kruschke, J., Indiana)

    model {
  for( i in 1 : nData ) {
    y[i] ~ dbern( mu[i] )
    mu[i] <- 1/(1+exp(-( b0 + inprod( b[] , x[i,] ))))
  }
  b0 ~ dnorm( 0 , 1.0E-12 )
   for ( j in 1 : nPredictors ) {
    b[j] ~ dnorm( 0 , 1.0E-12 )
  }
}

Tuy nhiên, không có siêu nhân ở đây cho cá nhân. Đây là nỗ lực tốt nhất của tôi cho đến nay với thiết kế bên trong cá nhân, chiếm các biện pháp lặp đi lặp lại trong con người:

Đây là mô hình của Jackman cho JAGS

1 model{
2 ## loop over data for likelihood
3 for(i in 1:n){
4  y[i] ~ dbern( mu[i] )
    mu[i] <- 1/(1+exp(-( b0 + inprod( b[] , x[i,] ))))
6 }
7 sigma ˜ dunif(0,20) ## prior on standard deviation
8 tau <- pow(sigma,-2) ## convert to precision
9
10 ## hierarchical model for each state’s intercept & slope
11 for(p in 1:50){
12 beta[p,1:2] ˜ dmnorm(mu[1:2],Tau[,]) ## bivariate normal
13 }
14
15 ## means, hyper-parameters
16 for(q in 1:2){
17 mu[q] ˜ dnorm(0,.0016)

}

Đây là mô hình con khốn của tôi cho BUGS

1 model{
2 ## loop over data for likelihood
3 for(i in 1:n){
4 mu.y[i] <- alpha + beta[s[i],1] + beta[s[i],2]*(j[i]-jbar)
5 demVote[i] ˜ dnorm(mu.y[i],tau)
6 }
7 sigma ˜ dunif(0,20) ## prior on standard deviation
8 tau <- pow(sigma,-2) ## convert to precision
9
10 ## hierarchical model for each state’s intercept & slope
11 for(p in 1:120){
12 beta[p,1:2] ˜ dmnorm(mu[1:2],Tau[,]) ## bivariate normal
13 }
14
15 ## means, hyper-parameters
16 for(q in 1:2){
17 mu[q] ˜ dnorm(0,.0016)
  }

Ai đó có thể cho tôi biết nếu tôi đang đi đúng hướng. Sự hiểu biết của tôi về điều này đang tăng lên, nhưng chậm. Làm ơn dịu dàng. Tôi là một bác sĩ, không phải là một thống kê! Tôi đã sử dụng R khá nhiều, nhưng tôi chưa quen với BUGS và mới đối với Bayes.

Cảm ơn,

R


1. Kích thước của n trong mô hình của bạn là gì? 2. j là gì? một đồng biến, phải không? 3. Tôi nghĩ biến phụ thuộc (phản hồi) của bạn là nhị phân. 4. Tại sao mu.y và demVote? 5. Phù hợp với hồi quy đơn giản (không phân cấp) trong Lỗi và so sánh với hồi quy cổ điển. Họ nên giống nhau. Và phù hợp với mô hình phân cấp nhanh trong R với chức năng lmer trong nhịp lme4 ...
Manoel Galdino

Câu trả lời:


8

Bạn đang (đã) gần như ở đó. Chỉ cần một vài nhận xét - bạn không cần phải đặt ưu tiên cho các beta[,1:2]tham số thành MV chung; bạn có thể đặt ưu tiên trước đó beta[i,1]beta[i,2]độc lập, đơn giản hóa mọi thứ (ví dụ: không cần hiệp phương sai trước.) Lưu ý rằng làm như vậy không có nghĩa là chúng sẽ độc lập ở phía sau.

Nhận xét khác: Vì bạn có một thuật ngữ không đổi - alpha- trong hồi quy, các thành phần beta[,1]nên có giá trị trung bình bằng 0 trước. Ngoài ra, bạn không có quyền ưu tiên alphatrong mã.

Đây là một mô hình với các điều khoản chặn và phân cấp dốc; Tôi đã cố gắng giữ cho các linh mục và ký hiệu của bạn nếu có thể, đưa ra các thay đổi:

model {
  for(i in 1:n){
    mu.y[i] <- alpha + beta0[s[i]] + beta1[s[i]]*(j[i]-jbar)
    demVote[i] ~ dnorm(mu.y[i],tau)
  }

  alpha ~ dnorm(0, 0.001) ## prior on alpha; parameters just made up for illustration
  sigma ~ dunif(0,20) ## prior on standard deviation
  tau <- pow(sigma,-2) ## convert to precision

  ## hierarchical model for each state’s intercept & slope
  for (p in 1:120) {
     beta0[p] ~ dnorm(0, tau0)
     beta1[p] ~ dnorm(mu1, tau1)
  }

  ## Priors on hierarchical components; parameters just made up for illustration
  mu1 ~ dnorm(0, 0.001) 
  sigma0 ~ dunif(0,20)
  sigma1 ~ dunif(0,20)
  tau0 <- pow(sigma0,-2)
  tau1 <- pow(sigma1,-2)
}

Một tài nguyên rất hữu ích cho các mô hình phân cấp, bao gồm một số "thủ thuật" để tăng tốc độ hội tụ, là Gelman và Hill .

(Một chút muộn với câu trả lời, nhưng có thể hữu ích cho một số người hỏi trong tương lai.)

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.