Hồi quy tổng quát có trọng số trong BUGS, JAGS


10

Trong Rchúng ta có thể "cân trước" một glmhồi quy thông qua tham số trọng số. Ví dụ:

glm.D93 <- glm(counts ~ outcome + treatment, family = poisson(), weights=w)

Làm thế nào điều này có thể được thực hiện trong một JAGShoặc một BUGSmô hình?

Tôi tìm thấy một số bài báo thảo luận về điều này, nhưng không ai trong số họ cung cấp một ví dụ. Tôi quan tâm chủ yếu đến các ví dụ hồi quy Poisson và logistic.


+1 câu hỏi rất hay! Tôi đã hỏi điều này một số chuyên gia Bayes và họ chỉ nói rằng trong một số trường hợp (trọng số theo hiệp phương phân loại), bạn có thể tính phân phối (các) tham số sau cho mỗi loại và sau đó kết hợp chúng theo một giá trị trung bình. Họ đã không cho tôi một giải pháp chung, vì vậy tôi sẽ thực sự quan tâm nếu nó tồn tại hay không!
Tò mò

Câu trả lời:


7

Có thể đã muộn ... nhưng,

Xin lưu ý 2 điều:

  • Thêm điểm dữ liệu không được khuyến khích vì nó sẽ thay đổi mức độ tự do. Các ước tính trung bình về hiệu ứng cố định có thể được ước tính tốt, nhưng tất cả các suy luận nên tránh với các mô hình như vậy. Thật khó để "để dữ liệu lên tiếng" nếu bạn thay đổi nó.
  • Tất nhiên, nó chỉ hoạt động với các trọng số có giá trị nguyên (bạn không thể nhân đôi 0,5 điểm dữ liệu), đây không phải là điều được thực hiện trong hồi quy có trọng số (lm) nhất. Nói chung, việc cân được tạo ra dựa trên độ biến thiên cục bộ được ước tính từ các lần lặp (ví dụ 1 / s hoặc 1 / s ^ 2 tại một 'x' nhất định) hoặc dựa trên chiều cao phản hồi (ví dụ 1 / Y hoặc 1 / Y ^ 2, tại một 'x' đã cho.

Trong Jags, Bugs, Stan, Proc MCMC hoặc ở Bayes nói chung, khả năng không khác so với lm hoặc glm thường xuyên (hoặc bất kỳ mô hình nào), nó chỉ giống nhau !! Chỉ cần tạo một cột "trọng lượng" mới cho phản hồi của bạn và viết khả năng là

y [i] ~ dnorm (mu [i], tau / trọng lượng [i])

Hoặc một poisson có trọng số:

y [i] ~ dpois (lambda [i] * trọng lượng [i])

Mã Bugs / Jags này chỉ đơn giản là để lừa. Bạn sẽ nhận được mọi thứ chính xác. Đừng quên tiếp tục nhân số sau của tau với trọng số, ví dụ như khi đưa ra dự đoán và khoảng tin cậy / dự đoán.


Nếu chúng ta làm như đã nêu, chúng ta thay đổi giá trị trung bình và phương sai. Tại sao nó không phải là y [i] * weight [i] ~ dpois (lambda [i] * weight [i])? Điều đó sẽ chỉ điều chỉnh phương sai. Vấn đề ở đây là y [i] * weight [i] có thể thuộc loại thực.
dùng28937

thật vậy, hồi quy có trọng số thay đổi có nghĩa (vì trọng số dẫn hồi quy tiến gần hơn đến các điểm có nhiều trọng số!) và phương sai bây giờ là một hàm của các trọng số (do đó nó không phải là mô hình homoskedastic). Phương sai (hoặc độ chính xác) tau không còn ý nghĩa nữa, nhưng tau / weight [i] có thể được hiểu chính xác là độ chính xác của mô hình (đối với "x" đã cho). Tôi sẽ không tư vấn nhân số liệu (y) theo trọng số ... mong đợi nếu đây chính xác là điều bạn muốn làm, nhưng tôi không hiểu mô hình của bạn trong trường hợp này ...
Pierre Lebrun

Tôi đồng ý với bạn, nó không thay đổi giá trị trung bình trong ví dụ bình thường: y [i] ~ dnorm (mu [i], tau / weight [i]), nhưng nó thực hiện trong lần thứ hai, vì lambda [i] * weight [ i] trở thành lambda "mới" cho dpois và điều này sẽ không còn phù hợp với y [i] nữa. Tôi phải tự sửa nó phải là: ty [i] * exp (weight [i]) ~ dpois (lambda [i] * weight [i]). Ý tưởng với phép nhân trong trường hợp poisson là chúng ta muốn điều chỉnh phương sai, nhưng cũng điều chỉnh giá trị trung bình, vì vậy chúng ta không cần phải sửa trung bình?
dùng28937

Nếu bạn cần điều chỉnh phương sai một cách độc lập, có thể một mô hình nhị thức âm có thể có ích thay vì Poisson? Nó thêm một tham số lạm phát / giảm phát phương sai cho Poisson. Ngoại trừ việc nó rất giống nhau.
Pierre Lebrun

Pierre ý kiến ​​hay. Tôi cũng nghĩ về sự thể hiện liên tục của phân phối poisson được xác định trong slide 6/12 tại linkd
user28937

4

Đầu tiên, đáng để chỉ ra rằng glmkhông thực hiện hồi quy bayes. Tham số 'trọng số' về cơ bản là một bàn tay ngắn cho "tỷ lệ quan sát", có thể được thay thế bằng cách lấy mẫu dữ liệu của bạn một cách thích hợp. Ví dụ:

x=1:10
y=jitter(10*x)
w=sample(x,10)

augmented.x=NULL
augmented.y=NULL    
for(i in 1:length(x)){
    augmented.x=c(augmented.x, rep(x[i],w[i]))
    augmented.y=c(augmented.y, rep(y[i],w[i]))
}

# These are both basically the same thing
m.1=lm(y~x, weights=w)
m.2=lm(augmented.y~augmented.x)

Vì vậy, để thêm trọng số cho các điểm trong JAGS hoặc BUGS, bạn có thể tăng dữ liệu của mình theo cách tương tự như trên.


2
Điều này sẽ không hoạt động, trọng số là số thực thông thường, không phải số nguyên
Tò mò

Điều này không ngăn cản bạn xấp xỉ chúng với số nguyên. Giải pháp của tôi không hoàn hảo, nhưng nó hoạt động khoảng. Ví dụ: các trọng số đã cho (1/3, 2/3, 1), bạn có thể thay thế lớp thứ hai theo hệ số hai và lớp thứ ba theo hệ số ba.
David Marx

0

Đã thử thêm vào nhận xét ở trên, nhưng đại diện của tôi quá thấp.

Nên

y[i] ~ dnorm(mu[i], tau / weight[i])

không được

y[i] ~ dnorm(mu[i], tau * weight[i])

trong JAGS? Tôi đang chạy một số thử nghiệm so sánh kết quả từ phương pháp này trong JAGS với kết quả từ hồi quy có trọng số thông qua lm () và chỉ có thể tìm thấy sự phù hợp bằng cách sử dụng phương pháp sau. Đây là một ví dụ đơn giản:

aggregated <- 
  data.frame(x=1:5) %>%
  mutate( y = round(2 * x + 2 + rnorm(length(x)) ),
          freq = as.numeric(table(sample(1:5, 100, 
                 replace=TRUE, prob=c(.3, .4, .5, .4, .3)))))
x <- aggregated$x
y <- aggregated$y
weight <- aggregated$freq
N <- length(y)

# via lm()
lm(y ~ x, data = aggregated, weight = freq)

và so sánh với

lin_wt_mod <- function() {

  for (i in 1:N) {
    y[i] ~ dnorm(mu[i], tau*weight[i])
    mu[i] <- beta[1] + beta[2] * x[i]
  }

  for(j in 1:2){
    beta[j] ~ dnorm(0,0.0001)
  }

  tau   ~ dgamma(0.001, 0.001)
  sigma     <- 1/sqrt(tau)
}

dat <- list("N","x","y","weight")
params <- c("beta","tau","sigma")

library(R2jags)
fit_wt_lm1 <- jags.parallel(data = dat, parameters.to.save = params,
              model.file = lin_wt_mod, n.iter = 3000, n.burnin = 1000)
fit_wt_lm1$BUGSoutput$summary

Bất kể ý kiến ​​danh tiếng không nên được đưa ra như câu trả lời.
Michael R. Chernick
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.