为了帮助我理解贝叶斯更新,我一直在使用来自 bayesianbiologist 的代码。由于我必须学习如何创建动画情节,我认为创建更新的动画情节将是一个有趣的练习。事实证明,这比预期的要艰难。从Rob Hyndman 的博客中获取灵感,我尝试创建以下内容:
library(animation)
setwd("~/Dropbox/PriorUpdating") #set working directory
## Simulate Bayesian Binomial updating
sim_bayes<-function(p=0.5,N=10,y_lim=15,prior_a=1,prior_b=1)
{
print(paste("The prior expectation of p is ",prior_a/(prior_a+prior_b)))
success<-0
curve(dbeta(x,prior_a,prior_b),xlim=c(0,1),ylim=c(0,y_lim),xlab='p',ylab='Posterior Density',lty=2)
legend('topright',legend=c('Prior','Updated Posteriors','Final Posterior'),lty=c(2,1,1),col=c('black','black','red'))
for(i in 1:N)
{
if(runif(1,0,1)<=p) success<-success+1 #this is where we see if there is a "success"
curve(dbeta(x,success+prior_a,(i-success)+prior_b),add=TRUE) #plot updated
}
curve(dbeta(x,success+prior_a,(i-success)+prior_b),add=TRUE,col='red',lwd=1.5) #plot final posterior
}
oopt = ani.options(interval = 0)
saveMovie(sim_bayes(p=0.6,N=90,prior_a=1,prior_b=1),interval=0.1,width=580,height=400)
ani.options(oopt)
然而,这只产生了最终的情节。所以我想我会尝试输出绘图的所有 PDF。
library(animation)
setwd("~/Dropbox/PriorUpdating") #set working directory
## Simulate Bayesian Binomial updating
sim_bayes<-function(p=0.5,N=10,y_lim=15,prior_a=1,prior_b=1)
{
print(paste("The prior expectation of p is ",prior_a/(prior_a+prior_b)))
success<-0
curve(dbeta(x,prior_a,prior_b),xlim=c(0,1),ylim=c(0,y_lim),xlab='p',ylab='Posterior Density',lty=2)
legend('topright',legend=c('Prior','Updated Posteriors','Final Posterior'),lty=c(2,1,1),col=c('black','black','red'))
for(i in 1:N)
{
pdf(paste("posterior",i,".pdf",sep=""),height=4,width=6.5)
if(runif(1,0,1)<=p) success<-success+1 #this is where we see if there is a "success"
curve(dbeta(x,success+prior_a,(i-success)+prior_b),add=TRUE) #plot updated
#print(paste(success,"successes and ",i-success," failures"))
dev.off()
}
pdf(paste("posterior_final",".pdf",sep=""),height=4,width=6.5)
curve(dbeta(x,success+prior_a,(i-success)+prior_b),add=TRUE,col='red',lwd=1.5) #plot final posterior
dev.off()
}
但是,这给了我以下错误
Error in plot.xy(xy.coords(x, y), type = type, ...) :
plot.new has not been called yet
我尝试在某些点插入 plot.new() ,但我认为这与图的附加性质相冲突。
有没有人知道如何使这些方法中的一种或两种正常工作?虽然这对我来说是一个玩具示例,但我需要绘制一些更有趣的动画,其中了解如何为情节设置动画将是有用/必要的。
谢谢你的帮助!