MATLAB: Testing for a Poisson Process

chi-squarepoisson

Hi,
Would you please help me understand to evaluate the outcome of Chi-Square tests? I want to test whether the data (which are created from a Poisson distribution) do really follow Poisson distribution by chi2gof function.
I am using this pdf http://ocw.mit.edu/courses/mathematics/18-443-statistics-for-applications-fall-2006/lecture-notes/lecture11.pdf as a source to understand the concept and followed the instructions there.
I used the following code to generate 1000 simulations of Poisson samples each having 1000 values with an expected value of 10.
for sim=1:1000
X = poissrnd(10, [1000 1]);
[H(sim) P(sim) STATS] = chi2gof(X,'cdf',@(z)poisscdf(z,10));
end
I have two questions regarding this issue:
1. When I ran the code like this, there are more rejected hypothesis (i.e. sum(H)) than if I had used
@(z)poisscdf(z,mean(X))
I would expect the first one would have less number of rejected hypothesis since I am using the same expected value for both generating the poisson values and testing them.
2. Can you please help me understand the meaning of 'z' which is used in the function handle?
Kind Regards, Berk

Best Answer

I find the same thing. I got 52/1000 rejected the first way. That's close to the 5% value that you would expect. I got fewer the second way. That's because by estimating the parameter from the data used in the test, you are using a fit that is "too good." Imagine if you estimated the p parameter of a binomial distribution -- this would always give an exact match between the observed and expected counts of 1's and 0's. This case is not so extreme, but is similar.
The chi2gof function does provide a way to do an approximate adjustment for that, if you tell it that you have estimated one parameter:
[H(sim) P(sim) STATS] = chi2gof(X,'cdf',@(z)poisscdf(z,mean(X)),'nparams',1);
The concept is described further in lecture 12 of the MIT course notes.
As for your other question, the chi2gof function defines a set of bin edges and calls your function to compute the cdf values at these edges. The "@(z)" indicates that your function accepts one input to be represented by the symbol z, and the rest of the expression defines how the cdf is to be computed at the provided z values.