void Discriminant_getPartialDiscriminationProbability (Discriminant me, long numberOfDimensions, double *p_prob, double *p_chisq, double *p_df) { long g = my numberOfGroups; long p = my eigen -> dimension, k = numberOfDimensions; long numberOfFunctions = Discriminant_getNumberOfFunctions (me); double degreesOfFreedom = Discriminant_getDegreesOfFreedom (me); double prob = NUMundefined, chisq = NUMundefined, df = NUMundefined; if (k < numberOfFunctions) { double lambda = NUMwilksLambda (my eigen -> eigenvalues, k + 1, numberOfFunctions); if (lambda != 1.0) { chisq = - (degreesOfFreedom + (g - p) / 2.0 - 1.0) * log (lambda); df = (p - k) * (g - k - 1); if (p_prob) { prob = NUMchiSquareQ (chisq, df); } } } if (p_prob) { *p_prob = prob; } if (p_chisq) { *p_chisq = chisq; } if (p_df) { *p_df = df; } }
void CCA_getZeroCorrelationProbability (CCA me, long index, double *p_prob, double *p_chisq, double *p_df) { double lambda = 1.0, *ev = my y -> eigenvalues; long nev = my y -> numberOfEigenvalues; long ny = my y -> dimension, nx = my x -> dimension; double chisq = NUMundefined, prob = NUMundefined, df = NUMundefined; if (index >= 1 && index <= nev) { for (long i = index; i <= nev; i ++) { lambda *= 1.0 - ev [i]; } df = (ny - index + 1) * (nx - index + 1); chisq = - (my numberOfObservations - (ny + nx + 3.0) / 2.0) * log (lambda); prob = NUMchiSquareQ (chisq, df); } if (p_chisq) { *p_chisq = chisq; } if (p_df) { *p_df = df; } if (p_prob) { *p_prob = prob; } }
double ContingencyTable_chisqProbability (ContingencyTable me) { double chisq, df; ContingencyTable_chisq (me, &chisq, &df); if (chisq == 0.0 && df == 0.0) { return 0.0; } return NUMchiSquareQ (chisq, df); }
void CCA_getZeroCorrelationProbability (CCA me, long index, double *chisq, long *ndf, double *probability) { double lambda = 1.0, *ev = my y -> eigenvalues; long nev = my y -> numberOfEigenvalues; long ny = my y -> dimension, nx = my x -> dimension; *chisq = *probability = NUMundefined; *ndf = 0; if (index < 1 || index > nev) { return; } for (long i = index; i <= nev; i++) { lambda *= (1.0 - ev[i]); } *ndf = (ny - index + 1) * (nx - index + 1); *chisq = - (my numberOfObservations - (ny + nx + 3.0) / 2.0) * log (lambda); *probability = NUMchiSquareQ (*chisq, *ndf); }
void PCA_getEqualityOfEigenvalues (PCA me, long from, long to, int conservative, double *p_prob, double *p_chisq, double *p_df) { double sum = 0, sumln = 0; double prob = NUMundefined, df = NUMundefined, chisq = NUMundefined; if (from == 0 && to == 0) { to = 1; from = my numberOfEigenvalues; } if (from < to && from > 0 && to <= my numberOfEigenvalues) { long i; for (i = from; i <= to; i++) { if (my eigenvalues[i] <= 0) { break; } sum += my eigenvalues[i]; sumln += log (my eigenvalues[i]); } if (sum == 0) { return; } long r = i - from; long n = my numberOfObservations - 1; if (conservative) { n -= from + (r * (2 * r + 1) + 2) / (6 * r); } df = r * (r + 1) / 2 - 1; chisq = n * (r * log (sum / r) - sumln); prob = NUMchiSquareQ (chisq, df); } if (p_prob) { *p_prob = prob; } if (p_chisq) { *p_chisq = chisq; } if (p_df) { *p_df = df; } }
void Discriminant_getPartialDiscriminationProbability (Discriminant me, long numberOfDimensions, double *probability, double *chisq, long *ndf) { long g = my numberOfGroups; long p = my dimension, k = numberOfDimensions; long numberOfFunctions = Discriminant_getNumberOfFunctions (me); double degreesOfFreedom = Discriminant_getDegreesOfFreedom (me); double lambda; *probability = 1; *chisq = 0; *ndf = 0; if (k >= numberOfFunctions) { return; } lambda = NUMwilksLambda (my eigenvalues, k + 1, numberOfFunctions); if (lambda == 1) { return; } *chisq = - (degreesOfFreedom + (g - p) / 2 - 1) * log (lambda); *ndf = (p - k) * (g - k - 1); *probability = NUMchiSquareQ (*chisq, *ndf); }
void PCA_getEqualityOfEigenvalues (PCA me, long from, long to, int conservative, double *probability, double *chisq, long *ndf) { double sum = 0, sumln = 0; *probability = 1; *ndf = 0; *chisq = 0; if ((from > 0 && to == from) || to > my numberOfEigenvalues) { return; } if (to <= from) { from = 1; to = my numberOfEigenvalues; } long i; for (i = from; i <= to; i++) { if (my eigenvalues[i] <= 0) { break; } sum += my eigenvalues[i]; sumln += log (my eigenvalues[i]); } if (sum == 0) { return; } long r = i - from; long n = my numberOfObservations - 1; if (conservative) { n -= from + (r * (2 * r + 1) + 2) / (6 * r); } *ndf = r * (r + 1) / 2 - 1; *chisq = n * (r * log (sum / r) - sumln); *probability = NUMchiSquareQ (*chisq, *ndf); }