import static java.lang.System.out;

import java.util.*;

 

import javastat.*;

import javastat.multivariate.*;

import static javastat.util.Output.*;

import javastat.util.*;

 

/**

 *

 * <p>Example: class DiscriminantAnalysis.</p>

 * <p>Data Source: Fisher's iris data</p>

 */

 

public class DiscriminantAnalysisExample

{

 

    public static void main(String arg[])

    {

        DataManager dm = new DataManager();

        double[][] testdata = new double[4][];

        dm.scanFileToMatrix(System.getProperty("user.dir") +

                           System.getProperty("file.separator") +

                           "iris.txt", testdata, 4);

        double[] testgroup = new double[150];

        for (int j = 0; j < 3; j++)

        {

            for (int i = 0; i < 50; i++)

            {

                testgroup[j * 50 + i] = j + 1;

            }

        }

 

        DiscriminantAnalysis testclass1 = new DiscriminantAnalysis(testgroup,

                testdata);

        double[][] linearDiscriminants1 = {testclass1.linearDiscriminants[0],

testclass1.linearDiscriminants[1]};

        DiscriminantAnalysis testclass2 = new DiscriminantAnalysis();

        double[][] linearDiscriminants2 = testclass2.linearDiscriminants(

                testgroup, testdata);

 

        double[][] predata = new double[4][];

        dm.scanFileToMatrix(System.getProperty("user.dir") +

                           System.getProperty("file.separator") +

                           "iris2.txt", predata, 4);

        int[] predictedGroup2 = testclass2.predictedGroup(testgroup, testdata,

                predata);

        double errorRate = 0.0;

        for (int i = 0; i < predictedGroup2.length; i++)

        {

            if ((int) testgroup[i] != predictedGroup2[i])

            {

                errorRate += 1.0;

            }

        }

        errorRate /= predictedGroup2.length;

 

        DiscriminantAnalysis testclass3 = new DiscriminantAnalysis(testgroup,

                testdata, testdata);

        double[][] linearDiscriminants3 = {testclass3.linearDiscriminants[0],

                                      testclass3.linearDiscriminants[1]};

 

        int[] predictedGroup3 = testclass3.predictedGroup;

        int preg = predictedGroup3[predictedGroup3.length - 1];

 

        Hashtable argument1 = new Hashtable();

        StatisticalAnalysis testclass4 = new DiscriminantAnalysis(argument1,

                testgroup, testdata).statisticalAnalysis;

        linearDiscriminants1 = (double[][]) testclass4.output.get(

                LINEAR_DISCRIMINANTS);

 

        Hashtable argument2 = new Hashtable();

        DiscriminantAnalysis testclass5 =

                new DiscriminantAnalysis(argument2, null);

        linearDiscriminants2 =

           testclass5.linearDiscriminants(argument2, testgroup, testdata);

 

        predictedGroup2 = testclass5.predictedGroup(argument2, testgroup,

                testdata, predata);

        errorRate = 0.0;

        for (int i = 0; i < predictedGroup2.length; i++)

        {

            if ((int) testgroup[i] != predictedGroup2[i])

            {

                errorRate += 1.0;

            }

        }

        errorRate /= predictedGroup2.length;

 

        Hashtable argument3 = new Hashtable();

        StatisticalAnalysis testclass6 = new DiscriminantAnalysis(argument3,

                testgroup, testdata, testdata).statisticalAnalysis;

        linearDiscriminants3 = (double[][]) testclass6.output.get(

                LINEAR_DISCRIMINANTS);

 

        predictedGroup3 =

(int[]) testclass6.output.get(PREDICTED_GROUP);

        preg = predictedGroup3[predictedGroup3.length - 1];

    }

 

}

Results:

The first discriminant based on non-null constructor  =

[-0.946 , -1.803 , 1.523 , 4.002]

The second discriminant based on non-null constructor =

[0.031 , 1.382 , -1.551 , 4.32]

 

The first discriminant based on null constructor = [-0.946 , -1.803 , 1.523 , 4.002]

The second discriminant based on null constructor = [0.031 , 1.382 , -1.551 , 4.32]

The error rate based on null constructor       =  0.02

 

{LINEAR_DISCRIMINANTS=[[D@8813f2,

PREDICTED_GROUP=[I@1d58aae}

 

The first discriminant based on non-null constructor  =

[-0.946 , -1.803 , 1.523 , 4.002]

The second discriminant based on non-null constructor =

[0.031 , 1.382 , -1.551 , 4.32]

The last observation of Iris data was assigned to =  group 3.0

 

{LINEAR_DISCRIMINANTS=[[D@83cc67,

PREDICTED_GROUP=[I@e09713}