I'm writing a maximum likelihood estimator for the Poisson distribution, and I get different results from using poisspdf versus computing the probability myself with the formula (which is listed on the help page for poisspdf). I'm taking the log-likelihood, and here's my code:
n = 40;d = 10;X = poissrnd(30, [d n]);mlearray = zeros(100,1);mlearray2 = zeros(100,1);mlearray3 = zeros(100,1);for lambda = 1:100 mlearray(lambda) = sum(sum(log(poisspdf(lambda, X)))); mlearray2(lambda) = sum(sum(X*log(lambda)-lambda-log(factorial(X)))); mlearray3(lambda) = sum(sum(log(lambda.^X*exp(-lambda)./factorial(X))));endplot(mlearray)hold onplot(mlearray2,'r')plot(mlearray3,'g:')axis([20 40 min(mlearray(20:40)) max(mlearray)])hold off
mlearray2 and mlearray3 give the same result, as expected (and the correct result I might add, with a peak at 30), while mlearray peaks at 29. This difference persists regardless of n and d. It doesn't appear to be an off-by-one error, since adding or subtracting a one here and there fails to fix the peak without distortion of the curve.
EDIT: minor code tweak unrelated to the issue.
Best Answer