我试图为Google编写一个扩展,以添加CHIDIST()函数,就像Microsoft和LibreOffice Calc中的那样。我目前的尝试并没有产生与LibreOffice函数相同的结果。任何帮助都将不胜感激。
function CHIDIST(value, degrees_of_freedom) {
x = value;
v = degrees_of_freedom;
if(x>0) {
return (Math.pow(x,(v-2)/2)*Math.pow(Math.E,-x/2))/(Math.pow(2,v/2)*gamma(v/2));
}
else {
return 0;
}
}
function gamma(x){
var p = [0.99999999999980993, 676.5203681218851, -1259.1392167224028,
771.32342877765313, -176.61502916214059, 12.507343278686905,
-0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7];
var g = 7;
if(x < 0.5){
return Math.PI / (Math.sin(Math.PI * x)*gamma(1-x));
}
x -= 1;
var a = p[0];
var t = x+g+0.5;
for(var i = 1; i < p.length; i++){
a += p[i]/(x+i);
}
return Math.sqrt(2*Math.PI)*Math.pow(t, x+0.5)*Math.exp(-t)*a;
}这是我在以下基础上对程序建模的等式:

发布于 2016-02-12 22:34:41
您的函数工作正常,因为它给出了χ2分布的概率密度函数。它在Excel2013中返回与=CHISQ.DIST(x,v,FALSE)相同的结果。请注意,这里的"false“意思是”不累加“。
LibreOffice函数=CHIDIST(x;v)和(老式的) Excel函数=CHIDIST(x,v)返回右尾累积概率.它的现代Excel等价于=CHISQ.DIST.RT(x,v)。
有一个累积分布函数公式用于χ2分布;它涉及到较低的不完全伽马函数,所以您需要首先找到该函数的实现。在计算结束时,您需要从1中减去结果,以得到右尾而不是左尾。
https://webapps.stackexchange.com/questions/89867
复制相似问题