nb10<-scan("nb10.txt") qqnorm(nb10); qqline(nb10, col = 2) # 1) MH============================================= mu<-400 n<-100 u<-1/n*sum((nb10-mu)^2) s0<-60 n0<-3 f<-function(theta,n=n0,s=s0) { (n/2)^(n/2)/gamma(n/2) * s^(n/2) * theta^(-n/2-1)*exp(-(n*s)/(2*theta)) } likelihood<-function(sigma) { sigma^(-100/2) * exp(-sum((nb10-mu)^2)/(2*sigma)) } theta<-seq(from=0,to=200,length=1000) plot(theta,f(theta,n-2,n*u/(n-2)), type='l',lty=1) lines(theta,f(theta,n0,s0),lty=2) lines(theta,f(theta,n+n0,(n0*s0+n*u)/(n0+n)),lty=3) n0<-0.000001 plot(theta,f(theta,n-2,n*u/(n-2)), type='l',lty=1) lines(theta,f(theta,n0,s0),lty=2) lines(theta,f(theta,n+n0,(n0*s0+n*u)/(n0+n)),lty=3) rvscaleinvchisquare<-function(n,s) { x<-rchisq(1,n) x<-n*s/x return(x) } metropolis_hastings<-function(iter,nstar) { accept<-0 met<-numeric(iter) last<-30 for(i in 1:iter) { cand<-rvscaleinvchisquare(nstar,(nstar-2)/nstar * last) alpha<-(f(cand,(n0+100),(n0*s0+sum((nb10-mu)^2))/(n0+100))/f(last,(n0+100),(n0*s0+sum((nb10-mu)^2))/(n0+100)))*(f(last,nstar,((nstar-2)/nstar*cand))/f(cand,nstar,((nstar-2)/nstar*last))) if(runif(1)