2012-07-07 22 views
6

Như tiêu đề của bài viết này cho biết, khi tôi cố gắng để chạy mã và dữ liệu mà làm việc tốt trong WinBUGS từ R sử dụng BRugsFit (với coda=T), tôi nhận được các lỗi này:OpenBUGS không hội tụ vào mô hình hội tụ trong WinBUGS. Giới hạn chính xác?

Error in glm.fit(x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, : 
    NA/NaN/Inf in foreign function call (arg 1) 
In addition: Warning messages: 
1: glm.fit: algorithm did not converge 
2: glm.fit: algorithm did not converge 
3: glm.fit: algorithm did not converge 
4: glm.fit: algorithm did not converge 
5: step size truncated due to divergence 

Khi tôi làm tail() trên đối tượng coda, tôi nhận được cùng một số hơn và hơn. Mặt khác, khi tôi chạy WinBUGS, lưu coda, và tải nó vào R, tôi nhận được một số biến thể ngẫu nhiên như tôi mong đợi, và không có cảnh báo về hội tụ.

Đây là mô hình của tôi (nó sử dụng 'thủ thuật' để tìm người đăng ký cho các tham số của phân phối Logistic-Makeham).

model { 
    for(i in 1:n){ 
      ones[i]<-1; 
      # here I pre-calculate two quantities that occur several times 
      # in the PDF, to save a little processing time 
      expbx[i] <- exp(b*x[i]); expbx1[i]<- 1/(1+sd*(expbx[i]-1)); 
      # below is the actual PDF 
      p[i]<-(c+a*expbx[i]*expbx1[i])*exp(-c*x[i])*pow(expbx1[i],1/s); 
      # the ones trick 
      ones[i]~dbern(p[i]); 
    } 
b~dunif(0,1); d~dexp(1); c~dexp(1); s.raw~dflat(); 
    # a (lambda) parametrized this way because it comes out more accurate 
    # s forced to be > 0 
    a<-b*d; s<-abs(s.raw); 
    # NOT a standard deviation, just s times d, to save processing time 
    sd<-s*d; 
    # I save all the parameters I'm interested in to one vector, for convenient 
    # viewing of them all in the same window. 
    out[1]<-a; out[2]<-b; out[3]<-c; out[4]<-s; out[5]<-d; 
} 

Dưới đây là một ví dụ điển hình của dữ liệu của tôi:

list(n= 148 ,x=c(1246,1175,1048,1169,1043,802,543,719,1296,817,1122,542,839,443,1536,700,834,232,596,1096,1118,957,974,1031,1149,1044,1108, 
519,677,569,952,1243,970,1736,1262,1026,979,1543,1029,761,533,540,511,1150,1589,1169,1029,1248,1572,638,731,525,968,1467,1596,1077,712,1603,1 
203,991,37,1775,893,993,913,1487,1186,1381,977,1247,857,786,615,733,1206,1059,1508,569,1205,754,886,1099,843,599,780,1294,1603,1242,883,1320, 
507,1097,1193,218,1362,1181,1118,453,1291,972,787,1061,1097,1100,1117,1174,596,1305,1071,940,919,999,1209,1043,1161,1016,1025,750,423,732, 
1389,907,1184,1275,944,1209,1073,1098,1348,976,817,557,211,961,880,1039,1287,736,1400,1757,1355,977,198,689,853,1251,767,768)) 

... và điển hình trong tệp (tôi sử dụng 4 dây chuyền, mỏng 20, Burnin 2000, 20000 lần lặp)

list(d=0.001738,b=0.0009672,c=0.002451,s.raw=0.001511) 
list(d=0.006217,b=0.005596,c=0.00777,s.raw=0.007019) 
list(d=1.504E-05,b=4.825E-06,c=2.172E-07,s.raw=6.104E-05) 
list(d=0.3011,b=0.03552,c=0.1274,s.raw=0.2549) 

OpenBUGS có đơn giản là làm tròn số chữ số ít hơn đáng kể so với WinBUGS không, và nếu có, có lẽ có một cài đặt mà tôi có thể thay đổi để làm cho nó ngừng hoạt động?

+1

+1, chỉ dành cho danh mục câu hỏi. Tôi rất vui khi thấy ai đó đang áp dụng BUGS. – duffymo

+2

Bạn đã thử JAGS chưa? Nói chung, đối với các vấn đề thậm chí hơi phức tạp, các mẫu lấy mẫu hộp đen giống như BUGS có thể rất nhạy cảm ... –

+0

Tôi sẵn sàng dùng thử. Liệu nó có quá thư giãn không? WinBUGS có một số tự tương đối khủng khiếp mà không có tính năng đó. Ngoài ra, là nhân rộng các chức năng nhiều chuỗi của WinBUGS trong JAGS đơn giản như làm nhiều JAGS chạy và sau đó kết hợp chúng thành một coda bằng tay? – f1r3br4nd

Trả lời

1

câu trả lời thăm dò của tôi để điều này dường như có một số sự kết hợp của ...

  • Thiết lập luận format cho bugsInits()bugsData() lệnh để fg.
  • Tham số phân phối trước đó nếu tham số là rất nhỏ (trong các chữ số kép âm trên thang đo log) nghịch đảo (hoặc một số biến đổi thích hợp khác) đang được lấy mẫu.
  • Chỉ cần sử dụng khoảng thời gian tỉa thưa lớn (trong trường hợp của tôi là 80) và rất nhiều lần lặp lại. OpenBUGS hiện không hỗ trợ thư giãn quá mức, và đó là điều đó.
  • Nếu một số biến được phân loại, không cố gắng đưa chúng vào cùng một bản tóm tắt như các biến liên tục.

Để người trả lời đề nghị tắt thư giãn quá mức: vấn đề là tôi không thể biến nó trên và nếu không có, lặp lại sẽ mất vĩnh viễn. Nhưng điều đó dường như là lựa chọn duy nhất vào thời điểm này. Tôi muốn hướng dẫn sử dụng WinBUGS cụ thể hơn về ý nghĩa của việc sử dụng tính năng này một cách thận trọng. Oh well, tôi đoán cuối cùng tôi sẽ cần đọc bài báo họ trích dẫn. Nhưng, vì điều này thậm chí không có sẵn trong OpenBUGS, nó đã được bán ngay tại thời điểm này.

Tôi sẽ để lại câu hỏi của mình mở trong một thời gian, trong trường hợp ai đó có câu trả lời hay hơn hoặc chi tiết hơn những gì tôi có thể đưa ra.

Các vấn đề liên quan