comparison libs/commons-math-2.1/docs/apidocs/src-html/org/apache/commons/math/distribution/GammaDistributionImpl.html @ 13:cbf34dd4d7e6

commons-math-2.1 added
author dwinter
date Tue, 04 Jan 2011 10:02:07 +0100
parents
children
comparison
equal deleted inserted replaced
12:970d26a94fb7 13:cbf34dd4d7e6
1 <HTML>
2 <BODY BGCOLOR="white">
3 <PRE>
4 <FONT color="green">001</FONT> /*<a name="line.1"></a>
5 <FONT color="green">002</FONT> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
6 <FONT color="green">003</FONT> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
7 <FONT color="green">004</FONT> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
8 <FONT color="green">005</FONT> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a>
9 <FONT color="green">006</FONT> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
10 <FONT color="green">007</FONT> * the License. You may obtain a copy of the License at<a name="line.7"></a>
11 <FONT color="green">008</FONT> *<a name="line.8"></a>
12 <FONT color="green">009</FONT> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
13 <FONT color="green">010</FONT> *<a name="line.10"></a>
14 <FONT color="green">011</FONT> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
15 <FONT color="green">012</FONT> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
16 <FONT color="green">013</FONT> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
17 <FONT color="green">014</FONT> * See the License for the specific language governing permissions and<a name="line.14"></a>
18 <FONT color="green">015</FONT> * limitations under the License.<a name="line.15"></a>
19 <FONT color="green">016</FONT> */<a name="line.16"></a>
20 <FONT color="green">017</FONT> package org.apache.commons.math.distribution;<a name="line.17"></a>
21 <FONT color="green">018</FONT> <a name="line.18"></a>
22 <FONT color="green">019</FONT> import java.io.Serializable;<a name="line.19"></a>
23 <FONT color="green">020</FONT> <a name="line.20"></a>
24 <FONT color="green">021</FONT> import org.apache.commons.math.MathException;<a name="line.21"></a>
25 <FONT color="green">022</FONT> import org.apache.commons.math.MathRuntimeException;<a name="line.22"></a>
26 <FONT color="green">023</FONT> import org.apache.commons.math.special.Gamma;<a name="line.23"></a>
27 <FONT color="green">024</FONT> <a name="line.24"></a>
28 <FONT color="green">025</FONT> /**<a name="line.25"></a>
29 <FONT color="green">026</FONT> * The default implementation of {@link GammaDistribution}.<a name="line.26"></a>
30 <FONT color="green">027</FONT> *<a name="line.27"></a>
31 <FONT color="green">028</FONT> * @version $Revision: 925812 $ $Date: 2010-03-21 11:49:31 -0400 (Sun, 21 Mar 2010) $<a name="line.28"></a>
32 <FONT color="green">029</FONT> */<a name="line.29"></a>
33 <FONT color="green">030</FONT> public class GammaDistributionImpl extends AbstractContinuousDistribution<a name="line.30"></a>
34 <FONT color="green">031</FONT> implements GammaDistribution, Serializable {<a name="line.31"></a>
35 <FONT color="green">032</FONT> <a name="line.32"></a>
36 <FONT color="green">033</FONT> /**<a name="line.33"></a>
37 <FONT color="green">034</FONT> * Default inverse cumulative probability accuracy<a name="line.34"></a>
38 <FONT color="green">035</FONT> * @since 2.1<a name="line.35"></a>
39 <FONT color="green">036</FONT> */<a name="line.36"></a>
40 <FONT color="green">037</FONT> public static final double DEFAULT_INVERSE_ABSOLUTE_ACCURACY = 1e-9;<a name="line.37"></a>
41 <FONT color="green">038</FONT> <a name="line.38"></a>
42 <FONT color="green">039</FONT> /** Serializable version identifier */<a name="line.39"></a>
43 <FONT color="green">040</FONT> private static final long serialVersionUID = -3239549463135430361L;<a name="line.40"></a>
44 <FONT color="green">041</FONT> <a name="line.41"></a>
45 <FONT color="green">042</FONT> /** The shape parameter. */<a name="line.42"></a>
46 <FONT color="green">043</FONT> private double alpha;<a name="line.43"></a>
47 <FONT color="green">044</FONT> <a name="line.44"></a>
48 <FONT color="green">045</FONT> /** The scale parameter. */<a name="line.45"></a>
49 <FONT color="green">046</FONT> private double beta;<a name="line.46"></a>
50 <FONT color="green">047</FONT> <a name="line.47"></a>
51 <FONT color="green">048</FONT> /** Inverse cumulative probability accuracy */<a name="line.48"></a>
52 <FONT color="green">049</FONT> private final double solverAbsoluteAccuracy;<a name="line.49"></a>
53 <FONT color="green">050</FONT> <a name="line.50"></a>
54 <FONT color="green">051</FONT> /**<a name="line.51"></a>
55 <FONT color="green">052</FONT> * Create a new gamma distribution with the given alpha and beta values.<a name="line.52"></a>
56 <FONT color="green">053</FONT> * @param alpha the shape parameter.<a name="line.53"></a>
57 <FONT color="green">054</FONT> * @param beta the scale parameter.<a name="line.54"></a>
58 <FONT color="green">055</FONT> */<a name="line.55"></a>
59 <FONT color="green">056</FONT> public GammaDistributionImpl(double alpha, double beta) {<a name="line.56"></a>
60 <FONT color="green">057</FONT> this(alpha, beta, DEFAULT_INVERSE_ABSOLUTE_ACCURACY);<a name="line.57"></a>
61 <FONT color="green">058</FONT> }<a name="line.58"></a>
62 <FONT color="green">059</FONT> <a name="line.59"></a>
63 <FONT color="green">060</FONT> /**<a name="line.60"></a>
64 <FONT color="green">061</FONT> * Create a new gamma distribution with the given alpha and beta values.<a name="line.61"></a>
65 <FONT color="green">062</FONT> * @param alpha the shape parameter.<a name="line.62"></a>
66 <FONT color="green">063</FONT> * @param beta the scale parameter.<a name="line.63"></a>
67 <FONT color="green">064</FONT> * @param inverseCumAccuracy the maximum absolute error in inverse cumulative probability estimates<a name="line.64"></a>
68 <FONT color="green">065</FONT> * (defaults to {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY})<a name="line.65"></a>
69 <FONT color="green">066</FONT> * @since 2.1<a name="line.66"></a>
70 <FONT color="green">067</FONT> */<a name="line.67"></a>
71 <FONT color="green">068</FONT> public GammaDistributionImpl(double alpha, double beta, double inverseCumAccuracy) {<a name="line.68"></a>
72 <FONT color="green">069</FONT> super();<a name="line.69"></a>
73 <FONT color="green">070</FONT> setAlphaInternal(alpha);<a name="line.70"></a>
74 <FONT color="green">071</FONT> setBetaInternal(beta);<a name="line.71"></a>
75 <FONT color="green">072</FONT> solverAbsoluteAccuracy = inverseCumAccuracy;<a name="line.72"></a>
76 <FONT color="green">073</FONT> }<a name="line.73"></a>
77 <FONT color="green">074</FONT> <a name="line.74"></a>
78 <FONT color="green">075</FONT> /**<a name="line.75"></a>
79 <FONT color="green">076</FONT> * For this distribution, X, this method returns P(X &amp;lt; x).<a name="line.76"></a>
80 <FONT color="green">077</FONT> *<a name="line.77"></a>
81 <FONT color="green">078</FONT> * The implementation of this method is based on:<a name="line.78"></a>
82 <FONT color="green">079</FONT> * &lt;ul&gt;<a name="line.79"></a>
83 <FONT color="green">080</FONT> * &lt;li&gt;<a name="line.80"></a>
84 <FONT color="green">081</FONT> * &lt;a href="http://mathworld.wolfram.com/Chi-SquaredDistribution.html"&gt;<a name="line.81"></a>
85 <FONT color="green">082</FONT> * Chi-Squared Distribution&lt;/a&gt;, equation (9).&lt;/li&gt;<a name="line.82"></a>
86 <FONT color="green">083</FONT> * &lt;li&gt;Casella, G., &amp; Berger, R. (1990). &lt;i&gt;Statistical Inference&lt;/i&gt;.<a name="line.83"></a>
87 <FONT color="green">084</FONT> * Belmont, CA: Duxbury Press.&lt;/li&gt;<a name="line.84"></a>
88 <FONT color="green">085</FONT> * &lt;/ul&gt;<a name="line.85"></a>
89 <FONT color="green">086</FONT> *<a name="line.86"></a>
90 <FONT color="green">087</FONT> * @param x the value at which the CDF is evaluated.<a name="line.87"></a>
91 <FONT color="green">088</FONT> * @return CDF for this distribution.<a name="line.88"></a>
92 <FONT color="green">089</FONT> * @throws MathException if the cumulative probability can not be<a name="line.89"></a>
93 <FONT color="green">090</FONT> * computed due to convergence or other numerical errors.<a name="line.90"></a>
94 <FONT color="green">091</FONT> */<a name="line.91"></a>
95 <FONT color="green">092</FONT> public double cumulativeProbability(double x) throws MathException{<a name="line.92"></a>
96 <FONT color="green">093</FONT> double ret;<a name="line.93"></a>
97 <FONT color="green">094</FONT> <a name="line.94"></a>
98 <FONT color="green">095</FONT> if (x &lt;= 0.0) {<a name="line.95"></a>
99 <FONT color="green">096</FONT> ret = 0.0;<a name="line.96"></a>
100 <FONT color="green">097</FONT> } else {<a name="line.97"></a>
101 <FONT color="green">098</FONT> ret = Gamma.regularizedGammaP(alpha, x / beta);<a name="line.98"></a>
102 <FONT color="green">099</FONT> }<a name="line.99"></a>
103 <FONT color="green">100</FONT> <a name="line.100"></a>
104 <FONT color="green">101</FONT> return ret;<a name="line.101"></a>
105 <FONT color="green">102</FONT> }<a name="line.102"></a>
106 <FONT color="green">103</FONT> <a name="line.103"></a>
107 <FONT color="green">104</FONT> /**<a name="line.104"></a>
108 <FONT color="green">105</FONT> * For this distribution, X, this method returns the critical point x, such<a name="line.105"></a>
109 <FONT color="green">106</FONT> * that P(X &amp;lt; x) = &lt;code&gt;p&lt;/code&gt;.<a name="line.106"></a>
110 <FONT color="green">107</FONT> * &lt;p&gt;<a name="line.107"></a>
111 <FONT color="green">108</FONT> * Returns 0 for p=0 and &lt;code&gt;Double.POSITIVE_INFINITY&lt;/code&gt; for p=1.&lt;/p&gt;<a name="line.108"></a>
112 <FONT color="green">109</FONT> *<a name="line.109"></a>
113 <FONT color="green">110</FONT> * @param p the desired probability<a name="line.110"></a>
114 <FONT color="green">111</FONT> * @return x, such that P(X &amp;lt; x) = &lt;code&gt;p&lt;/code&gt;<a name="line.111"></a>
115 <FONT color="green">112</FONT> * @throws MathException if the inverse cumulative probability can not be<a name="line.112"></a>
116 <FONT color="green">113</FONT> * computed due to convergence or other numerical errors.<a name="line.113"></a>
117 <FONT color="green">114</FONT> * @throws IllegalArgumentException if &lt;code&gt;p&lt;/code&gt; is not a valid<a name="line.114"></a>
118 <FONT color="green">115</FONT> * probability.<a name="line.115"></a>
119 <FONT color="green">116</FONT> */<a name="line.116"></a>
120 <FONT color="green">117</FONT> @Override<a name="line.117"></a>
121 <FONT color="green">118</FONT> public double inverseCumulativeProbability(final double p)<a name="line.118"></a>
122 <FONT color="green">119</FONT> throws MathException {<a name="line.119"></a>
123 <FONT color="green">120</FONT> if (p == 0) {<a name="line.120"></a>
124 <FONT color="green">121</FONT> return 0d;<a name="line.121"></a>
125 <FONT color="green">122</FONT> }<a name="line.122"></a>
126 <FONT color="green">123</FONT> if (p == 1) {<a name="line.123"></a>
127 <FONT color="green">124</FONT> return Double.POSITIVE_INFINITY;<a name="line.124"></a>
128 <FONT color="green">125</FONT> }<a name="line.125"></a>
129 <FONT color="green">126</FONT> return super.inverseCumulativeProbability(p);<a name="line.126"></a>
130 <FONT color="green">127</FONT> }<a name="line.127"></a>
131 <FONT color="green">128</FONT> <a name="line.128"></a>
132 <FONT color="green">129</FONT> /**<a name="line.129"></a>
133 <FONT color="green">130</FONT> * Modify the shape parameter, alpha.<a name="line.130"></a>
134 <FONT color="green">131</FONT> * @param alpha the new shape parameter.<a name="line.131"></a>
135 <FONT color="green">132</FONT> * @throws IllegalArgumentException if &lt;code&gt;alpha&lt;/code&gt; is not positive.<a name="line.132"></a>
136 <FONT color="green">133</FONT> * @deprecated as of 2.1 (class will become immutable in 3.0)<a name="line.133"></a>
137 <FONT color="green">134</FONT> */<a name="line.134"></a>
138 <FONT color="green">135</FONT> @Deprecated<a name="line.135"></a>
139 <FONT color="green">136</FONT> public void setAlpha(double alpha) {<a name="line.136"></a>
140 <FONT color="green">137</FONT> setAlphaInternal(alpha);<a name="line.137"></a>
141 <FONT color="green">138</FONT> }<a name="line.138"></a>
142 <FONT color="green">139</FONT> <a name="line.139"></a>
143 <FONT color="green">140</FONT> /**<a name="line.140"></a>
144 <FONT color="green">141</FONT> * Modify the shape parameter, alpha.<a name="line.141"></a>
145 <FONT color="green">142</FONT> * @param newAlpha the new shape parameter.<a name="line.142"></a>
146 <FONT color="green">143</FONT> * @throws IllegalArgumentException if &lt;code&gt;newAlpha&lt;/code&gt; is not positive.<a name="line.143"></a>
147 <FONT color="green">144</FONT> */<a name="line.144"></a>
148 <FONT color="green">145</FONT> private void setAlphaInternal(double newAlpha) {<a name="line.145"></a>
149 <FONT color="green">146</FONT> if (newAlpha &lt;= 0.0) {<a name="line.146"></a>
150 <FONT color="green">147</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.147"></a>
151 <FONT color="green">148</FONT> "alpha must be positive ({0})",<a name="line.148"></a>
152 <FONT color="green">149</FONT> newAlpha);<a name="line.149"></a>
153 <FONT color="green">150</FONT> }<a name="line.150"></a>
154 <FONT color="green">151</FONT> this.alpha = newAlpha;<a name="line.151"></a>
155 <FONT color="green">152</FONT> }<a name="line.152"></a>
156 <FONT color="green">153</FONT> <a name="line.153"></a>
157 <FONT color="green">154</FONT> /**<a name="line.154"></a>
158 <FONT color="green">155</FONT> * Access the shape parameter, alpha<a name="line.155"></a>
159 <FONT color="green">156</FONT> * @return alpha.<a name="line.156"></a>
160 <FONT color="green">157</FONT> */<a name="line.157"></a>
161 <FONT color="green">158</FONT> public double getAlpha() {<a name="line.158"></a>
162 <FONT color="green">159</FONT> return alpha;<a name="line.159"></a>
163 <FONT color="green">160</FONT> }<a name="line.160"></a>
164 <FONT color="green">161</FONT> <a name="line.161"></a>
165 <FONT color="green">162</FONT> /**<a name="line.162"></a>
166 <FONT color="green">163</FONT> * Modify the scale parameter, beta.<a name="line.163"></a>
167 <FONT color="green">164</FONT> * @param newBeta the new scale parameter.<a name="line.164"></a>
168 <FONT color="green">165</FONT> * @throws IllegalArgumentException if &lt;code&gt;newBeta&lt;/code&gt; is not positive.<a name="line.165"></a>
169 <FONT color="green">166</FONT> * @deprecated as of 2.1 (class will become immutable in 3.0)<a name="line.166"></a>
170 <FONT color="green">167</FONT> */<a name="line.167"></a>
171 <FONT color="green">168</FONT> @Deprecated<a name="line.168"></a>
172 <FONT color="green">169</FONT> public void setBeta(double newBeta) {<a name="line.169"></a>
173 <FONT color="green">170</FONT> setBetaInternal(newBeta);<a name="line.170"></a>
174 <FONT color="green">171</FONT> }<a name="line.171"></a>
175 <FONT color="green">172</FONT> <a name="line.172"></a>
176 <FONT color="green">173</FONT> /**<a name="line.173"></a>
177 <FONT color="green">174</FONT> * Modify the scale parameter, beta.<a name="line.174"></a>
178 <FONT color="green">175</FONT> * @param newBeta the new scale parameter.<a name="line.175"></a>
179 <FONT color="green">176</FONT> * @throws IllegalArgumentException if &lt;code&gt;newBeta&lt;/code&gt; is not positive.<a name="line.176"></a>
180 <FONT color="green">177</FONT> */<a name="line.177"></a>
181 <FONT color="green">178</FONT> private void setBetaInternal(double newBeta) {<a name="line.178"></a>
182 <FONT color="green">179</FONT> if (newBeta &lt;= 0.0) {<a name="line.179"></a>
183 <FONT color="green">180</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.180"></a>
184 <FONT color="green">181</FONT> "beta must be positive ({0})",<a name="line.181"></a>
185 <FONT color="green">182</FONT> newBeta);<a name="line.182"></a>
186 <FONT color="green">183</FONT> }<a name="line.183"></a>
187 <FONT color="green">184</FONT> this.beta = newBeta;<a name="line.184"></a>
188 <FONT color="green">185</FONT> }<a name="line.185"></a>
189 <FONT color="green">186</FONT> <a name="line.186"></a>
190 <FONT color="green">187</FONT> /**<a name="line.187"></a>
191 <FONT color="green">188</FONT> * Access the scale parameter, beta<a name="line.188"></a>
192 <FONT color="green">189</FONT> * @return beta.<a name="line.189"></a>
193 <FONT color="green">190</FONT> */<a name="line.190"></a>
194 <FONT color="green">191</FONT> public double getBeta() {<a name="line.191"></a>
195 <FONT color="green">192</FONT> return beta;<a name="line.192"></a>
196 <FONT color="green">193</FONT> }<a name="line.193"></a>
197 <FONT color="green">194</FONT> <a name="line.194"></a>
198 <FONT color="green">195</FONT> /**<a name="line.195"></a>
199 <FONT color="green">196</FONT> * Returns the probability density for a particular point.<a name="line.196"></a>
200 <FONT color="green">197</FONT> *<a name="line.197"></a>
201 <FONT color="green">198</FONT> * @param x The point at which the density should be computed.<a name="line.198"></a>
202 <FONT color="green">199</FONT> * @return The pdf at point x.<a name="line.199"></a>
203 <FONT color="green">200</FONT> */<a name="line.200"></a>
204 <FONT color="green">201</FONT> @Override<a name="line.201"></a>
205 <FONT color="green">202</FONT> public double density(double x) {<a name="line.202"></a>
206 <FONT color="green">203</FONT> if (x &lt; 0) return 0;<a name="line.203"></a>
207 <FONT color="green">204</FONT> return Math.pow(x / beta, alpha - 1) / beta * Math.exp(-x / beta) / Math.exp(Gamma.logGamma(alpha));<a name="line.204"></a>
208 <FONT color="green">205</FONT> }<a name="line.205"></a>
209 <FONT color="green">206</FONT> <a name="line.206"></a>
210 <FONT color="green">207</FONT> /**<a name="line.207"></a>
211 <FONT color="green">208</FONT> * Return the probability density for a particular point.<a name="line.208"></a>
212 <FONT color="green">209</FONT> *<a name="line.209"></a>
213 <FONT color="green">210</FONT> * @param x The point at which the density should be computed.<a name="line.210"></a>
214 <FONT color="green">211</FONT> * @return The pdf at point x.<a name="line.211"></a>
215 <FONT color="green">212</FONT> * @deprecated<a name="line.212"></a>
216 <FONT color="green">213</FONT> */<a name="line.213"></a>
217 <FONT color="green">214</FONT> public double density(Double x) {<a name="line.214"></a>
218 <FONT color="green">215</FONT> return density(x.doubleValue());<a name="line.215"></a>
219 <FONT color="green">216</FONT> }<a name="line.216"></a>
220 <FONT color="green">217</FONT> <a name="line.217"></a>
221 <FONT color="green">218</FONT> /**<a name="line.218"></a>
222 <FONT color="green">219</FONT> * Access the domain value lower bound, based on &lt;code&gt;p&lt;/code&gt;, used to<a name="line.219"></a>
223 <FONT color="green">220</FONT> * bracket a CDF root. This method is used by<a name="line.220"></a>
224 <FONT color="green">221</FONT> * {@link #inverseCumulativeProbability(double)} to find critical values.<a name="line.221"></a>
225 <FONT color="green">222</FONT> *<a name="line.222"></a>
226 <FONT color="green">223</FONT> * @param p the desired probability for the critical value<a name="line.223"></a>
227 <FONT color="green">224</FONT> * @return domain value lower bound, i.e.<a name="line.224"></a>
228 <FONT color="green">225</FONT> * P(X &amp;lt; &lt;i&gt;lower bound&lt;/i&gt;) &amp;lt; &lt;code&gt;p&lt;/code&gt;<a name="line.225"></a>
229 <FONT color="green">226</FONT> */<a name="line.226"></a>
230 <FONT color="green">227</FONT> @Override<a name="line.227"></a>
231 <FONT color="green">228</FONT> protected double getDomainLowerBound(double p) {<a name="line.228"></a>
232 <FONT color="green">229</FONT> // TODO: try to improve on this estimate<a name="line.229"></a>
233 <FONT color="green">230</FONT> return Double.MIN_VALUE;<a name="line.230"></a>
234 <FONT color="green">231</FONT> }<a name="line.231"></a>
235 <FONT color="green">232</FONT> <a name="line.232"></a>
236 <FONT color="green">233</FONT> /**<a name="line.233"></a>
237 <FONT color="green">234</FONT> * Access the domain value upper bound, based on &lt;code&gt;p&lt;/code&gt;, used to<a name="line.234"></a>
238 <FONT color="green">235</FONT> * bracket a CDF root. This method is used by<a name="line.235"></a>
239 <FONT color="green">236</FONT> * {@link #inverseCumulativeProbability(double)} to find critical values.<a name="line.236"></a>
240 <FONT color="green">237</FONT> *<a name="line.237"></a>
241 <FONT color="green">238</FONT> * @param p the desired probability for the critical value<a name="line.238"></a>
242 <FONT color="green">239</FONT> * @return domain value upper bound, i.e.<a name="line.239"></a>
243 <FONT color="green">240</FONT> * P(X &amp;lt; &lt;i&gt;upper bound&lt;/i&gt;) &amp;gt; &lt;code&gt;p&lt;/code&gt;<a name="line.240"></a>
244 <FONT color="green">241</FONT> */<a name="line.241"></a>
245 <FONT color="green">242</FONT> @Override<a name="line.242"></a>
246 <FONT color="green">243</FONT> protected double getDomainUpperBound(double p) {<a name="line.243"></a>
247 <FONT color="green">244</FONT> // TODO: try to improve on this estimate<a name="line.244"></a>
248 <FONT color="green">245</FONT> // NOTE: gamma is skewed to the left<a name="line.245"></a>
249 <FONT color="green">246</FONT> // NOTE: therefore, P(X &lt; &amp;mu;) &gt; .5<a name="line.246"></a>
250 <FONT color="green">247</FONT> <a name="line.247"></a>
251 <FONT color="green">248</FONT> double ret;<a name="line.248"></a>
252 <FONT color="green">249</FONT> <a name="line.249"></a>
253 <FONT color="green">250</FONT> if (p &lt; .5) {<a name="line.250"></a>
254 <FONT color="green">251</FONT> // use mean<a name="line.251"></a>
255 <FONT color="green">252</FONT> ret = alpha * beta;<a name="line.252"></a>
256 <FONT color="green">253</FONT> } else {<a name="line.253"></a>
257 <FONT color="green">254</FONT> // use max value<a name="line.254"></a>
258 <FONT color="green">255</FONT> ret = Double.MAX_VALUE;<a name="line.255"></a>
259 <FONT color="green">256</FONT> }<a name="line.256"></a>
260 <FONT color="green">257</FONT> <a name="line.257"></a>
261 <FONT color="green">258</FONT> return ret;<a name="line.258"></a>
262 <FONT color="green">259</FONT> }<a name="line.259"></a>
263 <FONT color="green">260</FONT> <a name="line.260"></a>
264 <FONT color="green">261</FONT> /**<a name="line.261"></a>
265 <FONT color="green">262</FONT> * Access the initial domain value, based on &lt;code&gt;p&lt;/code&gt;, used to<a name="line.262"></a>
266 <FONT color="green">263</FONT> * bracket a CDF root. This method is used by<a name="line.263"></a>
267 <FONT color="green">264</FONT> * {@link #inverseCumulativeProbability(double)} to find critical values.<a name="line.264"></a>
268 <FONT color="green">265</FONT> *<a name="line.265"></a>
269 <FONT color="green">266</FONT> * @param p the desired probability for the critical value<a name="line.266"></a>
270 <FONT color="green">267</FONT> * @return initial domain value<a name="line.267"></a>
271 <FONT color="green">268</FONT> */<a name="line.268"></a>
272 <FONT color="green">269</FONT> @Override<a name="line.269"></a>
273 <FONT color="green">270</FONT> protected double getInitialDomain(double p) {<a name="line.270"></a>
274 <FONT color="green">271</FONT> // TODO: try to improve on this estimate<a name="line.271"></a>
275 <FONT color="green">272</FONT> // Gamma is skewed to the left, therefore, P(X &lt; &amp;mu;) &gt; .5<a name="line.272"></a>
276 <FONT color="green">273</FONT> <a name="line.273"></a>
277 <FONT color="green">274</FONT> double ret;<a name="line.274"></a>
278 <FONT color="green">275</FONT> <a name="line.275"></a>
279 <FONT color="green">276</FONT> if (p &lt; .5) {<a name="line.276"></a>
280 <FONT color="green">277</FONT> // use 1/2 mean<a name="line.277"></a>
281 <FONT color="green">278</FONT> ret = alpha * beta * .5;<a name="line.278"></a>
282 <FONT color="green">279</FONT> } else {<a name="line.279"></a>
283 <FONT color="green">280</FONT> // use mean<a name="line.280"></a>
284 <FONT color="green">281</FONT> ret = alpha * beta;<a name="line.281"></a>
285 <FONT color="green">282</FONT> }<a name="line.282"></a>
286 <FONT color="green">283</FONT> <a name="line.283"></a>
287 <FONT color="green">284</FONT> return ret;<a name="line.284"></a>
288 <FONT color="green">285</FONT> }<a name="line.285"></a>
289 <FONT color="green">286</FONT> <a name="line.286"></a>
290 <FONT color="green">287</FONT> /**<a name="line.287"></a>
291 <FONT color="green">288</FONT> * Return the absolute accuracy setting of the solver used to estimate<a name="line.288"></a>
292 <FONT color="green">289</FONT> * inverse cumulative probabilities.<a name="line.289"></a>
293 <FONT color="green">290</FONT> *<a name="line.290"></a>
294 <FONT color="green">291</FONT> * @return the solver absolute accuracy<a name="line.291"></a>
295 <FONT color="green">292</FONT> * @since 2.1<a name="line.292"></a>
296 <FONT color="green">293</FONT> */<a name="line.293"></a>
297 <FONT color="green">294</FONT> @Override<a name="line.294"></a>
298 <FONT color="green">295</FONT> protected double getSolverAbsoluteAccuracy() {<a name="line.295"></a>
299 <FONT color="green">296</FONT> return solverAbsoluteAccuracy;<a name="line.296"></a>
300 <FONT color="green">297</FONT> }<a name="line.297"></a>
301 <FONT color="green">298</FONT> }<a name="line.298"></a>
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362 </PRE>
363 </BODY>
364 </HTML>