首先,让我们创建一些具有三个级别的样本分类数据。
y<-sample(c("A","B","C"),50,replace=TRUE)我试图建立一个贝叶斯统计模型,其中y变量服从分类分布,参数为theta1,theta2,theta3。这些参数描述了单个彝族属于相应范畴的概率。在贝叶斯的观点中,这些参数也是随机变量,我们用超参数alpha1,alpha2,alpha3在它们之前指定一个dirichlet。
我在语法上遇到了一些问题。
码
model<-function(){
#likelihood
for( i in 1:N){
y[i]~ dcat(theta[])
}
#prior
theta[1:3]~ ddirch(alpha[])
}
library(R2OpenBUGS)
model.file <- file.path(tempdir(),"model.txt")
write.model(model, model.file)
y<-sample(c("A","B","C"),50,replace=TRUE)
N<-50
alpha<-c(1,1,1)
data<-list('y','N','alpha')
params<-c('theta')
inits<-function(){theta=c(1/3,1/3,1/3)}我们通过R调用OpenBUGS,带有bug函数
out<-bugs(data,inits,params,model.file,n.chains = 2
,n.iter=6000,codaPkg = TRUE,n.burnin = 1000,DIC = TRUE)我尝试了不同的方法来构造上面的代码,遍历错误并熟悉log.txt文件(也就是保持OpenBUGS输出的文件),直到这段代码给了我一个没有错误的log.txt,而R仍然有问题。
R输出
Error in bugs.run(n.burnin, OpenBUGS.pgm, debug = debug, WINE = WINE, :
Look at the log file in /tmp/Rtmpofdk0t and
try again with 'debug=TRUE' to figure out what went wrong within OpenBUGS.
In addition: Warning message:
In FUN(X[[i]], ...) : class of 'x' was discardedlog.txt
OpenBUGS version 3.2.3 rev 1012
model is syntactically correct
data loaded
model compiled
initial values generated, model initialized
1000 updates took 0 s
monitor set
monitor set
monitor set
monitor set
deviance set提前感谢您的帮助
发布于 2015-12-11 18:06:02
经过大量的实验,我发现由于某种原因,OpenBUGS不能接受通常给出的因子变量。因此,我用as.numeric R函数将我的数据(格式"A“、"B”、"C")更改为数字(格式1、2、3),一切运行都很顺利!
发布于 2015-12-08 13:23:57
我认为你应该把theta1,theta2,theta3重新命名为alpha1,alpha2,alpha3,因为你使用alpha1,.在函数ddirch中,但您从不声明它们。相反,您可以声明theta1等等,但永远不要使用它们。
如果有其他问题,您可以查看日志文件,就像编译器建议的那样。
https://stackoverflow.com/questions/34158321
复制相似问题