

y.vals<-c(1,3,1,5,2,6,8,11,0,0)

# POISSON LIKELIHOOD AND LOG-LIKELIHOOD FUNCTION
llhfunc<-function(X,p,do.log=TRUE) {
	d <- rep(X,length(p))
	q.vec <- rep(length(y.vals),length(p)); p.vec <- rep(p,q.vec)
	d.mat <- matrix(dpois(d,p.vec,log=do.log),ncol=length(p))
	if (do.log==TRUE) apply(d.mat,2,sum)
	else apply(d.mat,2,prod)
}

# HERE'S A TEST FUNCTION
llhfunc(y.vals,c(4,30))

# THIS IS A SLIGHTLY IMPROVED VERSION OF THE mle CALL FROM BEFORE
mle <- optim(par=1,fn=llhfunc,X=y.vals,control=list(fnscale=-1),method="BFGS")

# MAKE A PRETTY GRAPH OF THE LOG AND NON-LOG VERSIONS
ruler <- seq(from=.01, to=20, by= .01)
poison.ll <- llhfunc(y.vals,ruler)
poison.l <- llhfunc(y.vals,ruler,do.log=FALSE)

par(oma=c(3,3,1,1),mar=c(0,0,0,0),mfrow=c(2,1))
plot(ruler,poison.l,col="purple",type="l",xaxt="n")
text(mean(ruler),mean(poison.l),"Poisson Likelihood Function")
plot(ruler,poison.ll,col="red",type="l")
text(mean(ruler),mean(poison.ll)/2,"Poisson Log-Likelihood Function")



