1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.math.distribution;
17
18 /***
19 * <code>PoissonDistributionTest</code>
20 *
21 * @version $Revision: 1.2 $ $Date: 2004/11/07 20:39:15 $
22 */
23 public class PoissonDistributionTest extends IntegerDistributionAbstractTest {
24
25 /***
26 * Poisson parameter value for the test distribution.
27 */
28 private static final double DEFAULT_TEST_POISSON_PARAMETER = 4.0;
29
30 /***
31 * Constructor.
32 * @param name
33 */
34 public PoissonDistributionTest(String name) {
35 super(name);
36 setTolerance(1e-12);
37 }
38
39 /***
40 * Creates the default discrete distribution instance to use in tests.
41 */
42 public IntegerDistribution makeDistribution() {
43 return DistributionFactory.newInstance().createPoissonDistribution
44 (DEFAULT_TEST_POISSON_PARAMETER);
45 }
46
47 /***
48 * Creates the default probability density test input values.
49 */
50 public int[] makeDensityTestPoints() {
51 return new int[] { -1, 0, 1, 2, 3, 4, 5, 10, 20};
52 }
53
54 /***
55 * Creates the default probability density test expected values.
56 * These and all other test values are generated by R, version 1.8.1
57 */
58 public double[] makeDensityTestValues() {
59 return new double[] { 0d, 0.0183156388887d, 0.073262555555d,
60 0.14652511111d, 0.195366814813d, 0.195366814813,
61 0.156293451851d, 0.00529247667642d, 8.27746364655e-09};
62 }
63
64 /***
65 * Creates the default cumulative probability density test input values.
66 */
67 public int[] makeCumulativeTestPoints() {
68 return new int[] { -1, 0, 1, 2, 3, 4, 5, 10, 20 };
69 }
70
71 /***
72 * Creates the default cumulative probability density test expected values.
73 */
74 public double[] makeCumulativeTestValues() {
75 return new double[] { 0d, 0.0183156388887d, 0.0915781944437d,
76 0.238103305554d, 0.433470120367d, 0.62883693518,
77 0.78513038703d, 0.99716023388d, 0.999999998077 };
78 }
79
80 /***
81 * Creates the default inverse cumulative probability test input values.
82 * Increased 3rd and 7th values slightly as computed cumulative
83 * probabilities for corresponding values exceeds the target value (still
84 * within tolerance).
85 */
86 public double[] makeInverseCumulativeTestPoints() {
87 return new double[] { 0d, 0.018315638889d, 0.0915781944437d,
88 0.238103305554d, 0.433470120367d, 0.62883693518,
89 0.78513038704d, 0.99716023388d, 0.999999998077 };
90 }
91
92 /***
93 * Creates the default inverse cumulative probability density test expected values.
94 */
95 public int[] makeInverseCumulativeTestValues() {
96 return new int[] { -1, 0, 1, 2, 3, 4, 5, 10, 20};
97 }
98
99 /***
100 * Test the normal approximation of the Poisson distribution by
101 * calculating P(90 ≤ X ≤ 110) for X = Po(100) and
102 * P(9900 ≤ X ≤ 10200) for X = Po(10000)
103 */
104 public void testNormalApproximateProbability() throws Exception {
105 PoissonDistribution dist = new PoissonDistributionImpl(100);
106 double result = dist.normalApproximateProbability(110)
107 - dist.normalApproximateProbability(89);
108 assertEquals(0.706281887248, result, 1E-10);
109 dist.setMean(10000);
110 result = dist.normalApproximateProbability(10200)
111 - dist.normalApproximateProbability(9899);
112 assertEquals(0.820070051552, result, 1E-10);
113 }
114
115 /***
116 * Test the degenerate cases of a 0.0 and 1.0 inverse cumulative probability.
117 * @throws Exception
118 */
119 public void testDegenerateInverseCumulativeProbability() throws Exception {
120 PoissonDistribution dist = new PoissonDistributionImpl(
121 DEFAULT_TEST_POISSON_PARAMETER);
122 assertEquals(Integer.MAX_VALUE, dist.inverseCumulativeProbability(1.0d));
123 assertEquals(-1, dist.inverseCumulativeProbability(0d));
124 }
125 }