我想在我的模型中定义一个分布:P(x = 10)= 0.10,P(x = 15)= 0.20,P(x = 20)= 0.70
WinBUGS常见问题解答说,有可能将我自己的离散均匀分布构造为具有统一先验的分类变量,并且可以采用必要的整数值。请参阅本手册第一部分中的blockerht示例。
我看了一下这个例子,我认为是这样的:“具有未知自由度的等级t分布”
在模型规范中,他们执行以下操作:
for (n in 1:Nbins) {
prior[n] <- 1/Nbins; # Uniform prior on v
}
k ~ dcat(prior[]);
这确定了一个离散的制服。但我不知道如何达到我需要的形式。任何人都可以帮助我吗?
答案 0 :(得分:3)
如果我理解你的问题,你就不需要循环......
#BUGS script to obtain distribution
m1<-"model{
ind ~ dcat(p[])
pmix <- x[ind]
}"
writeLines(m1,"m1.txt")
#simulate from the distribution
library("R2OpenBUGS")
m1.bug<-bugs(data = list(x=c(10, 15, 20), p=c(0.1,0.2,0.7)),
inits = NULL,
param = "pmix",
model = "m1.txt",
n.iter = 1100, n.burnin = 100, n.chains = 1, n.thin=1, DIC=FALSE)
hist(m1.bug$sims.list$pmix)
应该有用......
答案 1 :(得分:1)
我正在学习如何自己做这件事。我想知道你能不能这样做:
prior[10] <- .1
prior[15] <- .2
prior[20] <- .7
x ~ dcat(prior[])