Opened 7 years ago

Closed 5 years ago

# class performing chi^2 test

Reported by: Owned by: Peter Peter major yat 0.16 statistics

### Description

Input could be a matrix calculating expected as in Fisher or possibly also a use case for taking a data range and a expectation range.

### comment:1 Changed 6 years ago by Peter

Summary: class performin chi^2 test → class performing chi^2 test

### comment:2 Changed 5 years ago by Peter

Some notes:

Expectation matrix m is defined as: M_ij = sum row i(X) * sum col j(X) / n

chi2 is calculated as sum ((X-M)2 / M) where the sum runs over all elements

If all elements in m is large (>5 or >10) chi2 follows a chi2(df) distribution and p-value can be calculated from that. df is number of degrees of freedom, (#rows - 1) * (#cols - 1)

If M contains small values, p-value can be inferred using monte-carlo. Generate a randomly permuted variant of X, calculate chi2, and collect stats whether chi2 is greater (or equal) that the real chi2. The random matrix should have the same row sums (rs) and columns sums (cs) as the X. The most straight forward method is to generate a vector of size n, with the rs[0] first elements set to 0, the next rs[1] elements set to 1, et.c.; then random_shuffle the vector. Number of 0s in the first cs[0] samples defines element R(0, 0), number of 1s define element in R(0, 1) etc.

A possible faster method to generate a random matrix is to use the hypergeometric distribution repeatedly to fill the matrix.

### comment:3 Changed 5 years ago by Peter

Milestone: yat 0.x+ → yat 0.16

### comment:4 Changed 5 years ago by Peter

(In [3723]) initial version of class for chi-squared test

### comment:5 Changed 5 years ago by Peter

(In [3724]) implement Chi2::p_value(); refs #848

### comment:6 Changed 5 years ago by Peter

Resolution: → fixed new → closed

(In [3725]) closes #848

Note: See TracTickets for help on using tickets.