1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.distribution;
18
19 import org.apache.commons.discovery.tools.DiscoverClass;
20
21 /***
22 * This factory provids the means to create common statistical distributions.
23 * The following distributions are supported:
24 * <ul>
25 * <li>Binomial</li>
26 * <li>Chi-Squared</li>
27 * <li>Exponential</li>
28 * <li>F</li>
29 * <li>Gamma</li>
30 * <li>HyperGeometric</li>
31 * <li>Poisson</li>
32 * <li>Normal</li>
33 * <li>Student's t</li>
34 * </ul>
35 *
36 * Common usage:<pre>
37 * DistributionFactory factory = DistributionFactory.newInstance();
38 *
39 * // create a Chi-Square distribution with 5 degrees of freedom.
40 * ChiSquaredDistribution chi = factory.createChiSquareDistribution(5.0);
41 * </pre>
42 *
43 * @version $Revision: 1.22 $ $Date: 2004/11/07 03:32:48 $
44 */
45 public abstract class DistributionFactory {
46 /***
47 * Default constructor.
48 */
49 protected DistributionFactory() {
50 super();
51 }
52
53 /***
54 * Create an instance of a <code>DistributionFactory</code>
55 * @return a new factory.
56 */
57 public static DistributionFactory newInstance() {
58 DistributionFactory factory = null;
59 try {
60 DiscoverClass dc = new DiscoverClass();
61 factory = (DistributionFactory) dc.newInstance(
62 DistributionFactory.class,
63 "org.apache.commons.math.distribution.DistributionFactoryImpl");
64 } catch(Throwable t) {
65 return new DistributionFactoryImpl();
66 }
67 return factory;
68 }
69
70 /***
71 * Create a binomial distribution with the given number of trials and
72 * probability of success.
73 *
74 * @param numberOfTrials the number of trials.
75 * @param probabilityOfSuccess the probability of success
76 * @return a new binomial distribution
77 */
78 public abstract BinomialDistribution createBinomialDistribution(
79 int numberOfTrials, double probabilityOfSuccess);
80
81 /***
82 * Create a new chi-square distribution with the given degrees of freedom.
83 *
84 * @param degreesOfFreedom degrees of freedom
85 * @return a new chi-square distribution
86 */
87 public abstract ChiSquaredDistribution createChiSquareDistribution(
88 double degreesOfFreedom);
89
90 /***
91 * Create a new exponential distribution with the given degrees of freedom.
92 *
93 * @param mean mean
94 * @return a new exponential distribution
95 */
96 public abstract ExponentialDistribution createExponentialDistribution(
97 double mean);
98
99 /***
100 * Create a new F-distribution with the given degrees of freedom.
101 *
102 * @param numeratorDegreesOfFreedom numerator degrees of freedom
103 * @param denominatorDegreesOfFreedom denominator degrees of freedom
104 * @return a new F-distribution
105 */
106 public abstract FDistribution createFDistribution(
107 double numeratorDegreesOfFreedom, double denominatorDegreesOfFreedom);
108
109 /***
110 * Create a new gamma distribution with the given shape and scale
111 * parameters.
112 *
113 * @param alpha the shape parameter
114 * @param beta the scale parameter
115 *
116 * @return a new gamma distribution
117 */
118 public abstract GammaDistribution createGammaDistribution(
119 double alpha, double beta);
120
121 /***
122 * Create a new t distribution with the given degrees of freedom.
123 *
124 * @param degreesOfFreedom degrees of freedom
125 * @return a new t distribution
126 */
127 public abstract TDistribution createTDistribution(double degreesOfFreedom);
128
129 /***
130 * Create a new hypergeometric distribution with the given the population
131 * size, the number of successes in the population, and the sample size.
132 *
133 * @param populationSize the population size
134 * @param numberOfSuccesses number of successes in the population
135 * @param sampleSize the sample size
136 * @return a new hypergeometric desitribution
137 */
138 public abstract HypergeometricDistribution
139 createHypergeometricDistribution(int populationSize,
140 int numberOfSuccesses, int sampleSize);
141
142 /***
143 * Create a new normal distribution with the given mean and standard
144 * deviation.
145 *
146 * @param mean the mean of the distribution
147 * @param sd standard deviation
148 * @return a new normal distribution
149 */
150 public abstract NormalDistribution
151 createNormalDistribution(double mean, double sd);
152
153 /***
154 * Create a new normal distribution with mean zero and standard
155 * deviation one.
156 *
157 * @return a new normal distribution.
158 */
159 public abstract NormalDistribution createNormalDistribution();
160
161 /***
162 * Create a new Poisson distribution with poisson parameter lambda.
163 *
164 * @param lambda poisson parameter
165 * @return a new normal distribution.
166 */
167 public abstract PoissonDistribution
168 createPoissonDistribution(double lambda);
169 }