BernGridSerie4b = function( Theta , pTheta , Data ,mycex=1.4 ) { # Bayesian updating for Bernoulli likelihood and prior specified on a grid. # Input arguments: # Theta is a vector of theta values, all between 0 and 1. # pTheta is a vector of corresponding probability _masses_. # Data is a vector of 1's and 0's, where 1 corresponds to a and 0 to b. # Output: # pThetaGivenData is a vector of posterior probability masses over Theta. # Also creates a three-panel graph of prior, likelihood, and posterior # probability masses with credible interval. # Create summary values of Data z = sum( Data==1 ) # number of 1's in Data N = length( Data ) # number of flips in Data # Compute the likelihood of the Data for each value of Theta. pDataGivenTheta = Theta^z * (1-Theta)^(N-z) # Compute the evidence pData and the posterior. pData = sum( pDataGivenTheta * pTheta ) pThetaGivenData = pDataGivenTheta * pTheta / pData dotsize <- 8 # how big to make the plotted dots #--------------- Plot the prior. meanTheta = sum( Theta * pTheta ) # mean of prior, for plotting plot( Theta , pTheta , type="p" , pch="." , cex=dotsize , xlim=c(0,1) , ylim=c(0,1.1*max(pThetaGivenData)) , cex.axis=1.2 , xlab=bquote(theta) , ylab=bquote(p(theta)) , cex.lab=1.5 , main="Prior" , cex.main=1.5 ) if ( meanTheta > .5 ) { textx = 0 ; textadj = c(0,1) } else { textx = 1 ; textadj = c(1,1) } text( textx , 1.0*max(pThetaGivenData) , bquote( "mean(" * theta * ")=" * .(signif(meanTheta,3)) ) , cex=mycex , adj=textadj ) #------------- Plot the likelihood: p(Data|Theta) plot(Theta ,pDataGivenTheta ,type="p" ,pch="." ,cex=dotsize ,xlim=c(0,1) ,cex.axis=1.2 ,xlab=bquote(theta) ,ylim=c(0,1.1*max(pDataGivenTheta)) ,ylab=bquote( "p(D|" * theta * ")" ) ,cex.lab=1.5 ,main="Likelihood" ,cex.main=1.5 ) if ( z > .5*N ) { textx = 0 ; textadj = c(0,1) } else { textx = 1 ; textadj = c(1,1) } text( textx ,1.0*max(pDataGivenTheta) ,cex=mycex ,bquote( "Data: z=" * .(z) * ",N=" * .(N) ) ,adj=textadj ) #------------ Plot the posterior. meanThetaGivenData = sum( Theta * pThetaGivenData ) plot(Theta ,pThetaGivenData ,type="p" ,pch="." ,cex=dotsize ,xlim=c(0,1) ,ylim=c(0,1.1*max(pThetaGivenData)) ,cex.axis=1.2 ,xlab=bquote(theta) ,ylab=bquote( "p(" * theta * "|D)" ) ,cex.lab=1.5 ,main="Posterior" ,cex.main=1.5 ) if ( meanThetaGivenData > .5 ) { textx = 0 ; textadj = c(0,1) } else { textx = 1 ; textadj = c(1,1) } text(textx ,1.00*max(pThetaGivenData) ,cex=mycex ,bquote( "mean(" * theta * "|D)=" * .(signif(meanThetaGivenData,3)) ) ,adj=textadj ) #----- evidence text(textx ,0.75*max(pThetaGivenData) ,cex=mycex ,bquote( "p(D)=" * .(signif(pData,3)) ) ,adj=textadj ) return( pThetaGivenData ) } # end of function