Chi-square Distribution (χ²-distribution)
In probability theory and statistics, the chi-square distribution (χ²-distribution) with k degrees of freedom is the distribution of a sum of the squares of k independent standard normal random variables. It is one of the most widely used probability distributions in inferential statistics, e.g., in hypothesis testing or in construction of confidence intervals.
The chi-square test (χ²-test) is a statistical hypothesis test in which the sampling distribution of the test statistic is a chi-square distribution when the null hypothesis is true. Common applications are the chi-square test for goodness of fit of an observed distribution to a theoretical one and the chi-square test for equality of two proportions.
This source code estimates the probability P of a given chi-square (χ²) value and the degrees of freedom using series expansion. It is accurate to 18 decimal places.
#COMPILE EXE #REGISTER NONE #DIM ALL ' FUNCTION PCHI2(BYVAL X AS EXT, BYVAL F AS EXT) AS EXT ' ' FUNCTION PCHI2 - CALCULATES THE P-VALUE FROM ' THE CHI-SQUARE VALUE (X) AND THE DEGREES OF FREEDOM (F, must be integer) ' The probability is calculated using series expansions 26.4.4 and 26.4.5. ' In: Handbook of mathematical Functions. Editors: Abramowitz M & Stegun IA, ' Dover, New York, 1972. ' Original code by Erik Christensen ' LOCAL D, E, R, G, H, SL, S, T, P, C, SK, Q AS EXT ' extended precision Q = 1.0 IF X > 0 AND F > 0 AND ROUND(F, 0) = F THEN D = F E = D / 2.0 R = F - INT(F / 2.0) * 2.0 G = 1.0 IF R < 0.3 THEN ' F is even DO E = E - 1.0 IF E < 1.8 THEN EXIT LOOP G = G * E LOOP ELSE ' F is odd G = SQR(ATN(1.0) * 4.0) ' = sqrt(PI) DO E = E - 1.0 IF E < 0.3 THEN EXIT LOOP G = G * E LOOP END IF H = ((X / 2.0) ^ (D / 2.0) * EXP(-X / 2.0)) / (X * G) SL = H * 2.0 * X / D S = 0.0 T = 0.0 P = 1.0 DO D = D + 2.0 P = P * X / D S = S + P C = ABS(S - T) IF C < 1.0E-18 THEN EXIT LOOP T = S LOOP SK = (S + 1.0) * SL Q = 1.0 - SK IF Q < 1.0E-18 THEN Q = 1.0E-18 END IF FUNCTION = Q END FUNCTION ' FUNCTION PBMAIN LOCAL Result$,P##,t$,df##,i1& Result$ = INPUTBOX$("Enter Chi-square, df","Get p-value") i1&=INSTR(Result$,",") df=VAL(MID$(Result$,i1&+1)) P = PCHI2(VAL(LEFT$(Result$,i1&-1)),df) MSGBOX "P="+FORMAT$(P,"##.###################"),,"P for " + _ "Chi-square="+LEFT$(Result$,i1&-1)+" and d.f.="+STR$(df) END FUNCTION