create binomial distribution from data
numbers <- rbinom(50, 50, 0.5)
numbers
## [1] 24 25 25 23 28 27 23 31 23 26 22 23 25 22 24 29 25 24 27 25 30 23 25 30 20
## [26] 25 27 24 23 22 30 19 27 30 21 25 27 24 26 20 24 29 24 26 26 24 22 27 29 24
define binomial distribution function
binomial_dist <- function(n,p,x) {
temp_C <- (factorial(n) / (factorial(x) * factorial(n-x)))*(p^x)*((1-p)^(n-x))
return(temp_C)
}
binom_df<-NULL
for (i in 1:50){
binom_df[i] <- binomial_dist(50,0.5,numbers[i])
}
make it dataframe and plot binomial distribution
full_df <- data.frame(numbers,binom_df)
plot(numbers,binom_df,type="h",main="Binom Distribution",ylab="Binomial Distributions of Values", xlab = "Number of Trials",col="blue")
define beta function
beta<-function(x,a,b){
betaf<-(factorial(a+b)/(factorial(a)*factorial(b)))*(x^(a-1))*((1-x)^(b-1))
return(betaf)
}
plot beta distribution
dist<- beta(binom_df,2,3)
plot(binom_df,dist,type="b",col="blue",main = paste("Beta (",2,",",3,")"),ylab="density")
define beta prior function to binomial distribution get posterior densities
beta_binom_prior <- function(x,a,b,n,p){
betap<-(factorial(a+b+n)/(factorial(x+a)*factorial(n-x+b)))*(p^(x+a-1))*((1-p)^(n-x+b-1))
return(betap)
}
check out posterior distibution with beta prior for binomial data that is conjugate family of priors
x_post <- beta_binom_prior(binom_df,2,3,50,0.5)
plot(binom_df,x_post,type="b",col="blue",ylab="density",main = paste("Posterior of Binomial Data with Beta Prior(",2,",",3,")"))
if we give beta prior for binomial data we get beta posterior, this is conjugate distribution.