Updated: 6 August 2010

Use CHITEST2_q to calculate the Pearson chi-square test for independence. CHITEST2_q returns the value from the chi-square (χ^{2}) distribution for the statistic and the appropriate degrees of freedom. Calculate the chi-square statistic (χ^{2}) directly using the CHISQ2 or the CHISQ2_q function.

The chi-square statistic is calculated by finding the difference between each observed and theoretical frequency for each possible outcome, squaring them, dividing each by the theoretical frequency, and taking the sum of the results. A second important part of determining the test statistic is to define the degrees of freedom of the test: this is essentially the number of squares errors involving the observed frequencies adjusted for the effect of using some of those observations to define the expected frequencies.

Given the test statistic and the degrees of freedom, the test value is returned by the regularized gamma function *Q(a, x) *where:

CHITEST2_q requires the expected results as input to the function but automatically calculates the degrees of freedom.

The value of the test statistic is

Where

r is the number of rows

c is the number of columns

O is the Observed result

E is the Expected result

SELECT [wctStatistics].[wct].[CHITEST2_q] (

<@Actual_range_RangeQuery, nvarchar(max),>

,<@Expected_range_RangeQuery, nvarchar(max),>)

the select statement, as text, used to determine the actual, or observed, results to be used in the calculation.

the select statement, as text, used to determine the expected results to be used in the calculation.

float

· CHITEST2_q is designed for de-normalized tables. For normalized tables, use the CHITESTN2_q function.

· CHITEST2_q requires the expected values as input to the function. If you want to perform the chi-squared test without providing the expected values, use the CHITEST_q function.

· For simpler queries, consider using the CHITEST2 function.

· CHITEST2_q = CHIDIST(χ^{2}, df), where df = (r-1)(c-1), r>1, c>1

· To calculate the test statistic, use the CHISQ2_q function

· No GROUP BY is required for this function even though it produces aggregated results.

In this hypothetical situation, we want to determine if there is an association between population density and the preference for a sport from among baseball, football, and basketball. We will use the CHITEST2_q function to perform the chi-squared test.

CREATE TABLE #O(

[Sport] [varchar] (20) NOT NULL,

[Rural] [float] NOT NULL,

[Suburban] [float] NOT NULL,

[Urban] [float] NOT NULL

)

INSERT INTO #O VALUES ('Basketball',28,35,54)

INSERT INTO #O VALUES ('Baseball',60,43,35)

INSERT INTO #O VALUES ('Football',52,48,28)

CREATE TABLE #E(

[Sport] [varchar] (20) NOT NULL,

[Rural] [float] NOT NULL,

[Suburban] [float] NOT NULL,

[Urban] [float] NOT NULL

)

INSERT INTO #E VALUES ('Basketball',42.77,38.49,35.74)

INSERT INTO #E VALUES ('Baseball',50.44,45.4,42.16)

INSERT INTO #E VALUES ('Football',46.79,42.11,39.1)

SELECT wct.CHITEST2_q(

'SELECT Rural, Suburban, Urban from #O'

,'SELECT Rural, Suburban, Urban from #E')

This produces the following result

----------------------

0.000162575660939674

(1 row(s) affected)