Validation
This morning I validated my CUDA output with that of SatScan’s. It seems as if the output is nearly identical with SatScan’s. The only major difference relates to how the two handle windows.
In my CUDA imp, I have an array of nearest grid points to the current grid point. As I expand the window to include new grid points, grid points that are equidistant from the current grid point are added in a non-deterministic fashion to the window. So while SatScan might add a grid point that has 1 case and 0 controls, my CUDA imp might add the a grid point that is the same distance but has 0 cases and 1 control. Then, once that grid point is added, it isn’t removed.
Hmm, that might not have made a lot of sense.
Example: The next larger window will include 3 new grid points that are all the same distance away. My CUDA imp will add them in a random order and not try all combinations of adding them. So the result is that my CUDA imp might miss a higher log likelihood value by not trying all possible combinations of adding the 3 grid points in different orders.
I have not determined yet if SatScan tries all the combinations too or if it just got lucky with the order it added the grid points to the window and thus calculated a greater likelihood value.
So, the question is, is this a big deal?