Kiểm tra dự báo sau theo suy luận ABC cho nhiều tham số


8

Tôi còn khá mới với số liệu thống kê của Bayes vì ​​vậy hãy nhẹ nhàng.

Tôi vừa thực hiện tính toán xấp xỉ Bayesian (ABC) cho suy luận của một mô hình đa tham số. Bây giờ tôi đang tìm cách thực hiện kiểm tra dự đoán sau cho các tham số đã được suy ra.

Điều tôi muốn biết là, khi lấy mẫu từ phía sau để tạo số liệu thống kê tóm tắt cho kiểm tra dự báo sau, tôi có lấy mẫu độc lập với các thông số cận biên cho từng tham số hay tôi phải lấy mẫu các giá trị tham số chung (ví dụ: mẫu từ các kết hợp tham số chính xác đã dẫn đến thống kê tóm tắt được chấp nhận).

Mô hình chứa rất nhiều tham số (trên 6) và tôi quan tâm đến các thông số biên cho mỗi tham số. Tôi hy vọng câu hỏi này có ý nghĩa.

Câu trả lời:


8

Câu hỏi tuyệt vời cho người mới !!!

θ1,Giáo dục,θMθM

#normal data with 100 observations 
x=rnorm(100)
#observed summaries
sumx=c(median(x),mad(x))

#normal x gamma prior
priori=function(N){
  return(cbind(rnorm(N,sd=10),1/sqrt(rgamma(N,shape=2,scale=5))))
  }

ABC=function(N){

  prior=priori(N)  #reference table

  #pseudo-data
  summ=matrix(0,N,2)
  for (i in 1:N){
    xi=rnorm(100)*prior[i,2]+prior[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }

  #normalisation factor for the distance
  mads=c(mad(summ[,1]),mad(summ[,2]))

  #distance
  dist=(abs(sumx[1]-summ[,1])/mads[1])+(abs(sumx[2]-summ[,2])/mads[2])

  #selection
  posterior=prior[dist<quantile(dist,.05),]

  return(posterior)
  }

Nếu bạn âm mưu

res=ABC(10^5);hist(res[,1])

bạn sẽ nhận được ABC-posterior cho trung bình bình thường.

Tuy nhiên, nếu bạn muốn thực hiện kiểm tra dự báo sau, bạn không thể tạo một thành phần của hậu thế của mình tại một thời điểm để lấy dữ liệu giả và các bản tóm tắt tương ứng. Bạn cần cả trung bình và phương sai để có được một mẫu bình thường mới! Vì vậy, mã R của tôi sẽ là

postsample=res[sample(1:length(res[,1]),10^3),]

để vẽ một mẫu từ ABC-posterior và dữ liệu giả sau đó sẽ được tạo như trước:

  #pseudo-data
  summ=matrix(0,M,2)
  for (i in 1:M){
    xi=rnorm(100)*postsample[i,2]+postsample[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }

1
Cảm ơn bạn rất nhiều vì câu trả lời kỹ lưỡng. Kịch bản ví dụ R của bạn thực sự làm cho nó rõ ràng với tôi. Sau khi tôi đăng câu hỏi đó, tôi đã suy nghĩ kỹ hơn về những gì tôi đã hỏi và tôi đang hướng đến kết luận mà bạn đã đưa ra, vì vậy thật tuyệt khi bạn xác nhận nó cho tôi :-)
David

1
@ Tây An: Xong. Cảm ơn bạn. Tôi vẫn còn mới với trang web này!
David

MMthetmộtM1035×103
Simon C.
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.