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这个网址上去下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值