Ejemplo 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;
    }
}
Ejemplo n.º 2
0
void structDiscriminant :: v_info () {
	structDaata :: v_info ();
	MelderInfo_writeLine (U"Number of groups: ", numberOfGroups);
	MelderInfo_writeLine (U"Number of variables: ", dimension);
	MelderInfo_writeLine (U"Number of discriminant functions: ", Discriminant_getNumberOfFunctions (this));
	MelderInfo_writeLine (U"Number of observations (total): ", Discriminant_getNumberOfObservations (this, 0));
}
Ejemplo n.º 3
0
void structDiscriminant :: v_info () {
    structDaata :: v_info ();
    MelderInfo_writeLine (U"Number of groups: ", numberOfGroups);
    MelderInfo_writeLine (U"Number of eigenvalues: ", eigen -> numberOfEigenvalues);
    MelderInfo_writeLine (U"Dimension of eigenvector: ", eigen -> dimension);
    MelderInfo_writeLine (U"Number of discriminant functions: ", Discriminant_getNumberOfFunctions (this));
    MelderInfo_writeLine (U"Number of observations (total): ", Discriminant_getNumberOfObservations (this, 0));
}
Ejemplo n.º 4
0
double Discriminant_getWilksLambda (Discriminant me, long from) {
    long numberOfFunctions = Discriminant_getNumberOfFunctions (me);
    if (from >= numberOfFunctions) {
        return 1;
    }
    if (from < 1) {
        from = 1;
    }
    return NUMwilksLambda (my eigen -> eigenvalues, 1 + from, numberOfFunctions);
}
Ejemplo n.º 5
0
autoConfiguration Discriminant_and_TableOfReal_to_Configuration (Discriminant me, TableOfReal thee, long numberOfDimensions) {
    try {
        if (numberOfDimensions == 0) {
            numberOfDimensions = Discriminant_getNumberOfFunctions (me);
        }
        autoConfiguration him = Configuration_create (thy numberOfRows, numberOfDimensions);
        Eigen_and_TableOfReal_into_TableOfReal_projectRows (my eigen.get(), thee, 1, him.get(), 1, numberOfDimensions);
        TableOfReal_copyLabels (thee, him.get(), 1, 0);
        TableOfReal_setSequentialColumnLabels (him.get(), 0, 0, U"Eigenvector ", 1, 1);
        return him;
    } catch (MelderError) {
        Melder_throw (U"Configuration not created.");
    }
}
Ejemplo n.º 6
0
void Discriminant_drawConcentrationEllipses (Discriminant me, Graphics g, double scale, bool confidence, char32 *label,
        int discriminantDirections, long d1, long d2, double xmin, double xmax, double ymin, double ymax, int fontSize, int garnish)
{
    long numberOfFunctions = Discriminant_getNumberOfFunctions (me);

    if (! discriminantDirections) {
        SSCPList_drawConcentrationEllipses (my groups.get(), g, scale, confidence, label, d1, d2, xmin, xmax, ymin, ymax, fontSize, garnish);
        return;
    }

    if (numberOfFunctions <= 1) {
        Melder_warning (U"Discriminant_drawConcentrationEllipses: Nothing drawn "
                        U"because there is only one dimension in the discriminant space.");
        return;
    }

    // Project SSCPs on eigenvectors.

    if (d1 == 0 && d2 == 0) {
        d1 = 1;
        d2 = MIN (numberOfFunctions, d1 + 1);
    } else if (d1 < 0 || d2 > numberOfFunctions) {
        return;
    }

    double *v1 = my eigen -> eigenvectors [d1];
    double *v2 = my eigen -> eigenvectors [d2];


    autoSSCPList thee = SSCPList_toTwoDimensions (my groups.get(), v1, v2);

    SSCPList_drawConcentrationEllipses (thee.get(), g, scale, confidence, label, 1, 2, xmin, xmax, ymin, ymax, fontSize, 0);

    if (garnish) {
        char32 llabel[40];
        Graphics_drawInnerBox (g);
        Graphics_marksLeft (g, 2, true, true, false);
        Melder_sprint (llabel,40, U"function ", d2);
        Graphics_textLeft (g, true, llabel);
        Graphics_marksBottom (g, 2, true, true, false);
        Melder_sprint (llabel,40, U"function ", d1);
        Graphics_textBottom (g, true, llabel);
    }
}
Ejemplo n.º 7
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);
}