Read in the data
lizards <- read.csv("~/Desktop/hornedLizards.csv")
y <- lizards
2a)
NormalNormal <- function(y,S=10000,mu0=0,tau2=100,a=1,b=1){
n = length(y)
# starting values
mu <- 0
sig2inv <- 1
mu_keep <- rep(NA,S)
sig2inv_keep <- rep(NA,S)
# MCMC
for(s in 1:S){
# sample mu
v <- 1/(n*sig2inv + 1/tau2)
m <- v * (n*sig2inv*mean(y) + mu0/tau2)
mu <- rnorm(1, m,sqrt(v))
# sample sig2inv
sig2inv <- rgamma(1, a+n/2 , b+0.5*sum((y-mu)^2))
# save values
mu_keep[s] <- mu
sig2inv_keep[s] <- sig2inv
}
out <- list( mu = mu_keep, sigma=1/sqrt(sig2inv_keep))
## remove burnin
mu_keep <- mu_keep[-c(1:round(S/2))]
sigma_keep <- 1/sqrt(sig2inv_keep[-c(1:round(S/2))])
## make table
results <- data.frame(
mean = c(mean(mu_keep),mean(sigma_keep)),
sd = c(sd(mu_keep),sd(sigma_keep)),
lower = c(quantile(mu_keep,0.025),quantile(sigma_keep,0.025)),
upper = c(quantile(mu_keep,0.975),quantile(sigma_keep,0.975))
)
row.names(results) <- c("mu", "sigma")
out$results <- results
return(out)
}
2b)
fit <- NormalNormal(y=lizards$squamosalHornLength, S=10000, mu0=0,tau2=100)
fit$results
## mean sd lower upper
## mu 23.894954 0.2058958 23.487111 24.295188
## sigma 2.768433 0.1445616 2.507819 3.077187
3a)
living <- subset(lizards, lizards$Survival=="living")
killed <- subset(lizards, lizards$Survival=="killed")
3b)
fit2 <- NormalNormal(y=living$squamosalHornLength , S=10000, mu0=0,tau2=100)
fit2$results
## mean sd lower upper
## mu 24.268440 0.2113857 23.843518 24.676152
## sigma 2.625905 0.1489444 2.352563 2.944811
fit3 <- NormalNormal(y=killed$squamosalHornLength, S=10000, mu0=0,tau2=100)
fit3$results
## mean sd lower upper
## mu 21.918450 0.4947286 20.96443 22.904673
## sigma 2.690542 0.3486966 2.11127 3.475563
3c)
mean(killed$squamosalHornLength < living$squamosalHornLength)
## Warning in killed$squamosalHornLength < living$squamosalHornLength: longer
## object length is not a multiple of shorter object length
## [1] 0.7012987