Esempio n. 1
0
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;
    }
}
Esempio n. 2
0
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;
	}
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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;
	}
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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);
}