Excel函数在Java中的实现 Finv

TINV(0.5, 10) = 0.6998121397488263
double result = cern.jet.stat.Probability.studentTInverse(0.5, 10);

TDIST則是呼叫cern.jet.stat.Probability.studentT(自由度, T值);

TDIST (0.05, 10, 2) = 0.9611069870474025
double result = (1-cern.jet.stat.Probability.studentT(10, 0.05))*2;

TDIST (0.05, 10, 1) = 0.48055349352370125
double result = 1-cern.jet.stat.Probability.studentT(10, 0.05);


FINV:
/**
* 傳回 F 機率分配的反函數值。如果 p = FDIST(x, ...),則 FINV(p,...) = x。
* F 機率分配可以在 F 檢定中使用,F 檢定是用來比較兩組資料的變異程度。例如,您可以分析美國和加拿大的收入分配,以找出這兩個國家收入的變異程度是否相似。
* Probability   是和 F 累加分配有關的機率值。
* Degrees_freedom1   為分子的自由度。
* Degrees_freedom2   為分母的自由度。
* http://www.danielsoper.com/statkb/topic04.aspx
* Alpha Level : Also known as the p-value, probability, or type I error rate.
* @param alpha
* @param df1
* @param df2
*/
public static double Finv(double probability, int degreesOfFreedom1, int degreesOfFreedom2)
{
//Excel : FINV(0.05 ,5 ,5) = 5.050329058

//df1 => 分子自由度
//df2 => 分母自由度
//alpha => 機率

//這裡要反過來代入才會正確,不知道是不是common apache的問題
//FDistributionImpl(double numeratorDegreesOfFreedom [分子], double denominatorDegreesOfFreedom [分母])
FDistributionImpl fDistribution = new FDistributionImpl(degreesOfFreedom2, degreesOfFreedom1);

try
{
return Math.pow(fDistribution.inverseCumulativeProbability(probability), -1);
}
catch (MathException e)
{
log.error("Finv出現錯誤");
log.error(e);
}

return -1;
}

我用到了Finv其它的暂时还没有细看。。
它的jar包可以去http://commons.apache.org/math/download_math.cgi这个网址上去下载

你可能感兴趣的:(java,apache,F#,Excel,cgi)