Grid approximation
Create probability vector
p <- seq(from = 0, to = 1, length.out = 1000)
plot(p)

Create prior vector
prior <- rep(1, 1000)
plot(prior)

Create likelihood vector
likelihood <- dbinom(6, size = 9, prob = p)
plot(likelihood)

Create posterior vector
posterior <- prior * likelihood
posterior <- posterior / sum(posterior)
plot(p,posterior)

Sample p using posterior vector as distribution
samples <- sample(p, prob = posterior, size = 1e4, replace = TRUE)
plot(samples, type = "p", col= "#99ccff")
plot(density(samples))


Calculate area under curve interval 0-50%
x1 = 1
x2 = 500
sum(posterior[p<0.5])
[1] 0.1718746
with(plot(p,posterior), polygon(x = c(0, p[x1:x2], p[x2]), y = c(0, posterior[x1:x2], 0), col="skyblue"))

x1 <- min(which(density(samples)$x >= 0))
x2 <- max(which(density(samples)$x < 0.5))
sum(samples<0.5)/1e4
[1] 0.1728
with(plot(density(samples)), polygon(x=c(density(samples)$x[c(x1,x1:x2,x2)]), y= c(0, density(samples)$y[x1:x2], 0), col="orange"))

LS0tCnRpdGxlOiAiQmF5ZXNpYW4gU3RhdHMgMSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIyBHcmlkIGFwcHJveGltYXRpb24KKioqCkNyZWF0ZSBwcm9iYWJpbGl0eSB2ZWN0b3IKYGBge3J9CnAgPC0gc2VxKGZyb20gPSAwLCB0byA9IDEsIGxlbmd0aC5vdXQgPSAxMDAwKQpwbG90KHApCmBgYAoqKioKQ3JlYXRlIHByaW9yIHZlY3RvcgpgYGB7cn0KcHJpb3IgPC0gcmVwKDEsIDEwMDApCnBsb3QocHJpb3IpCmBgYAoqKioKQ3JlYXRlIGxpa2VsaWhvb2QgdmVjdG9yCmBgYHtyfQpsaWtlbGlob29kIDwtIGRiaW5vbSg2LCBzaXplID0gOSwgcHJvYiA9IHApCnBsb3QobGlrZWxpaG9vZCkKYGBgCioqKgpDcmVhdGUgcG9zdGVyaW9yIHZlY3RvcgpgYGB7cn0KcG9zdGVyaW9yIDwtIHByaW9yICogbGlrZWxpaG9vZApwb3N0ZXJpb3IgPC0gcG9zdGVyaW9yIC8gc3VtKHBvc3RlcmlvcikKcGxvdChwLHBvc3RlcmlvcikKYGBgCioqKgpTYW1wbGUgcCB1c2luZyBwb3N0ZXJpb3IgdmVjdG9yIGFzIGRpc3RyaWJ1dGlvbgpgYGB7cn0Kc2FtcGxlcyA8LSBzYW1wbGUocCwgcHJvYiA9IHBvc3Rlcmlvciwgc2l6ZSA9IDFlNCwgcmVwbGFjZSA9IFRSVUUpCnBsb3Qoc2FtcGxlcywgdHlwZSA9ICJwIiwgY29sPSAiIzk5Y2NmZiIpCnBsb3QoZGVuc2l0eShzYW1wbGVzKSkKYGBgCioqKgpDYWxjdWxhdGUgYXJlYSB1bmRlciBjdXJ2ZSBpbnRlcnZhbCAwLTUwJQpgYGB7ciwgZWNobz1UUlVFfQp4MSA9IDEKeDIgPSA1MDAKc3VtKHBvc3RlcmlvcltwPDAuNV0pCndpdGgocGxvdChwLHBvc3RlcmlvciksIHBvbHlnb24oeCA9IGMoMCwgcFt4MTp4Ml0sIHBbeDJdKSwgeSA9IGMoMCwgcG9zdGVyaW9yW3gxOngyXSwgMCksIGNvbD0ic2t5Ymx1ZSIpKQpgYGAKCmBgYHtyLCBlY2hvPVRSVUV9CngxIDwtIG1pbih3aGljaChkZW5zaXR5KHNhbXBsZXMpJHggPj0gMCkpICAKeDIgPC0gbWF4KHdoaWNoKGRlbnNpdHkoc2FtcGxlcykkeCA8ICAwLjUpKQpzdW0oc2FtcGxlczwwLjUpLzFlNAp3aXRoKHBsb3QoZGVuc2l0eShzYW1wbGVzKSksIHBvbHlnb24oeD1jKGRlbnNpdHkoc2FtcGxlcykkeFtjKHgxLHgxOngyLHgyKV0pLCB5PSBjKDAsIGRlbnNpdHkoc2FtcGxlcykkeVt4MTp4Ml0sIDApLCBjb2w9Im9yYW5nZSIpKQpgYGA=