Web Applications Stack Exchange is a question and answer site for power users of web applications. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to write an extension for Google Sheets to add the CHIDIST() function as in Microsoft Excel and LibreOffice Calc. My current attempt does not produce the same results as the LibreOffice function. Any help would be greatly appreciated.

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;
}

This is the equation that I modeled the program after:

Wikipedia ChiDist PDF

share|improve this question

Your function works correctly, in the sense that it gives the probability density function of the χ²-distribution. It returns the same results as =CHISQ.DIST(x,v,FALSE) in Excel 2013. Note that "false" here means "not cumulative".

The LibreOffice function =CHIDIST(x;v) and (old-fashioned) Excel function =CHIDIST(x,v) return the right-tailed cumulative probability. Its modern Excel equivalent is =CHISQ.DIST.RT(x,v).

There is a formula for the cumulative distribution function for χ²-distribution; it involves the lower incomplete gamma function, so you'll need to find an implementation of that first. At the end of computation you'll need to subtract the result from 1 to get the right tail instead of left.

share|improve this answer
    
Thanks so very much! – Joshua Grebler Feb 12 at 23:28

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.