Example usage for org.apache.commons.math3.stat.descriptive.moment VectorialMean increment

List of usage examples for org.apache.commons.math3.stat.descriptive.moment VectorialMean increment

Introduction

In this page you can find the example usage for org.apache.commons.math3.stat.descriptive.moment VectorialMean increment.

Prototype

public void increment(double[] v) throws DimensionMismatchException 

Source Link

Document

Add a new vector to the sample.

Usage

From source file:br.unicamp.ic.recod.gpsi.measures.gpsiMeanAndStandardDeviationDistanceScore.java

@Override
public double score(double[][][] input) {

    double[][] means = new double[2][];
    double[] sDistances;
    VectorialMean mean;
    Mean mean_ = new Mean();
    EuclideanDistance distance = new EuclideanDistance();

    int i, j;/*from  w  w  w  .ja  v  a 2  s.c  o m*/
    double d = 0;

    for (i = 0; i < 2; i++) {
        mean = new VectorialMean(input[i][0].length);
        for (j = 0; j < input[i].length; j++)
            mean.increment(input[i][j]);
        means[i] = mean.getResult();
    }

    d = distance.compute(means[0], means[1]);

    double deviations = 0.0;

    for (i = 0; i < 2; i++) {
        sDistances = new double[input[i].length];
        for (j = 0; j < input[i].length; j++)
            sDistances[j] = distance.compute(means[i], input[i][j]);
        deviations += mean_.evaluate(sDistances);
    }

    return d / deviations;

}

From source file:br.unicamp.ic.recod.gpsi.measures.gpsiClusterDistortionScore.java

@Override
public double score(double[][][] samples) {

    double score = 0.0;
    double[] centroid;
    double[][] vectors;
    int nClasses = samples.length, m = 0, m_i = 0, i;

    VectorialMean meanOperator;
    EuclideanDistance distance = new EuclideanDistance();

    for (int label = 0; label < samples.length; label++) {
        vectors = samples[label];//from   w w  w. java2 s .c  om
        meanOperator = new VectorialMean(vectors[0].length);
        for (i = 0; i < vectors.length; i++)
            meanOperator.increment(vectors[i]);
        centroid = meanOperator.getResult();

        m_i = vectors.length;
        for (i = 0; i < m_i; i++) {
            score += distance.compute(centroid, vectors[i]);
        }
        m += m_i;
    }

    if (score <= 1E-30)
        return Double.MAX_VALUE;

    return score / m;

}

From source file:br.unicamp.ic.recod.gpsi.ml.gpsiLinearDiscriminantAnalysisClassificationAlgorithm.java

@Override
public void fit(HashMap<Byte, ArrayList<double[]>> x) {

    VectorialMean mean;

    this.centroids = new HashMap<>();
    this.nClasses = x.size();
    this.dimensionality = 0;
    for (byte label : x.keySet()) {
        if (this.dimensionality <= 0)
            this.dimensionality = x.get(label).get(0).length;

        mean = new VectorialMean(this.dimensionality);
        for (double[] v : x.get(label))
            mean.increment(v);

        this.centroids.put(label, mean.getResult());
    }//w  w  w .j  av a  2  s  . c  o m
}

From source file:com.itemanalysis.psychometrics.mixture.MvNormalMixtureModel.java

public void estimateMean(RealMatrix x) {
    VectorialMean m = new VectorialMean(dimensions);
    for (int i = 0; i < x.getRowDimension(); i++) {
        m.increment(x.getRow(i));
    }//from   ww w.j a va  2  s  .c  om
    initialMean = new Array2DRowRealMatrix(m.getResult());

}

From source file:com.itemanalysis.psychometrics.mixture.MvNormalComponentDistributionTest.java

/**
 * This test computes mean vector and covariance matrix for a single component mixture model.
 * The estimates should be the same as the sample mean and covariance.
 *//*ww w  .  ja v a2s . co m*/
//    @Test
public void mixModel2Test() {
    System.out.println("Mixture model test with Two variables and two components");

    /**
     * x contains 2,000 cases and three variables.
     * The first two variables are continuous data. The last variable is a group indicator variable
     */
    double[][] x = testData.getMixtureData2();
    BlockRealMatrix allData = new BlockRealMatrix(x);
    int nrow = allData.getRowDimension();

    BlockRealMatrix group1Data = allData.getSubMatrix(0, 799, 0, 1);
    BlockRealMatrix group2Data = allData.getSubMatrix(800, 1999, 0, 1);

    VectorialMean trueMean1 = new VectorialMean(2);
    VectorialMean trueMean2 = new VectorialMean(2);
    Covariance trueCov1 = new Covariance(group1Data);
    Covariance trueCov2 = new Covariance(group2Data);

    for (int i = 0; i < group1Data.getRowDimension(); i++) {
        trueMean1.increment(group1Data.getRow(i));
    }
    for (int i = 0; i < group2Data.getRowDimension(); i++) {
        trueMean2.increment(group2Data.getRow(i));
    }

    double[] trueMeanGroup1 = trueMean1.getResult();
    double[] trueMeanGroup2 = trueMean2.getResult();

    /**
     * actual data in first two columns
     */
    BlockRealMatrix data = allData.getSubMatrix(0, nrow - 1, 0, 1);

    //run two group mixture model
    int startGroup = 2;
    int endGroup = 2;
    int maxIter = 500;
    double converge = 1e-12;
    int starts = 100;

    MvNormalMixtureModel model = null;

    model = new MvNormalMixtureModel(data, endGroup);
    model.setModelConstraints(true, true, true, true);
    model.setEmOptions(maxIter, converge, starts);
    model.call();
    //            System.out.println(model.printResults());

    double[] pi = new double[2];
    pi[0] = model.getMixingProportion(0);
    pi[1] = model.getMixingProportion(1);
    int[] index = { 0, 1 };

    //group 1 should be the smaller group. If not, reverse indexes.
    if (pi[0] > pi[1]) {
        index[0] = 1;
        index[1] = 0;
    }

    //check convergence
    System.out.println("    Testing convergence...");
    assertTrue("Convergence test", model.converged());

    //check mixing proportions
    System.out.println("    Testing proportions...");
    assertEquals("Proportion 1 test: ", 0.40, pi[index[0]], 5e-2);
    assertEquals("Proportion 2 test: ", 0.60, pi[index[1]], 5e-2);

    //get estimated parameters
    double[] estMeanGroup1 = model.getMean(index[0]);
    double[] estMeanGroup2 = model.getMean(index[1]);
    double[][] estCovGroup1 = model.getCov(index[0]);
    double[][] estCovGroup2 = model.getCov(index[1]);

    //check mean vector for each group
    System.out.println("    Testing means...");
    assertEquals("Mean (1,1) test", trueMeanGroup1[index[0]], estMeanGroup1[index[0]], 5e-2);
    assertEquals("Mean (1,2) test", trueMeanGroup1[index[1]], estMeanGroup1[index[1]], 5e-2);
    assertEquals("Mean (2,1) test", trueMeanGroup2[index[0]], estMeanGroup2[index[0]], 5e-2);
    assertEquals("Mean (2,2) test", trueMeanGroup2[index[1]], estMeanGroup2[index[1]], 5e-2);

    //check covariance matrix for group 1
    System.out.println("    Testing covariances...");
    double[][] trueCovGroup1 = trueCov1.getCovarianceMatrix().getData();
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            assertEquals("CovGroup1[" + i + "," + j + "] test:", trueCovGroup1[i][j], estCovGroup1[i][j], 5e-2);
        }
    }

    //check covariance matrix for group 2
    double[][] trueCovGroup2 = trueCov2.getCovarianceMatrix().getData();
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            assertEquals("CovGroup2[" + i + "," + j + "] test:", trueCovGroup2[i][j], estCovGroup2[i][j], 5e-2);
        }
    }

}

From source file:com.itemanalysis.psychometrics.mixture.MvNormalComponentDistributionTest.java

/**
 * This test uses the iris data from R. It is a three group mixture model.
 * Results confirmed with the following R code:
 *
 * library(mixtools)// w  w  w.ja  va 2  s .co m
 * mvnormalmixEM(iris[,-5], arbvar=TRUE, k=3)
 *
 */
//    @Test
public void mixModel1Test() {
    System.out.println("Mixture model test with Iris Data");
    MixtureModelTestData testData = new MixtureModelTestData();

    BlockRealMatrix allData = new BlockRealMatrix(testData.getMixtureData3());
    BlockRealMatrix group1Data = allData.getSubMatrix(0, 49, 0, 3);
    BlockRealMatrix group2Data = allData.getSubMatrix(50, 99, 0, 3);
    BlockRealMatrix group3Data = allData.getSubMatrix(100, 149, 0, 3);
    BlockRealMatrix data = allData.getSubMatrix(0, 149, 0, 3);

    //        System.out.println(Arrays.toString(allData.getRow(0)));

    VectorialMean trueMean1 = new VectorialMean(4);
    VectorialMean trueMean2 = new VectorialMean(4);
    VectorialMean trueMean3 = new VectorialMean(4);
    Covariance trueCov1 = new Covariance(group1Data);
    Covariance trueCov2 = new Covariance(group2Data);
    Covariance trueCov3 = new Covariance(group3Data);

    for (int i = 0; i < group1Data.getRowDimension(); i++) {
        trueMean1.increment(group1Data.getRow(i));
    }
    for (int i = 0; i < group2Data.getRowDimension(); i++) {
        trueMean2.increment(group2Data.getRow(i));
    }

    for (int i = 0; i < group3Data.getRowDimension(); i++) {
        trueMean3.increment(group3Data.getRow(i));
    }

    double[] trueMeanGroup1 = trueMean1.getResult();
    double[] trueMeanGroup2 = trueMean2.getResult();
    double[] trueMeanGroup3 = trueMean3.getResult();

    int startGroup = 3;
    int endGroup = 3;
    int maxIter = 1000;
    double converge = 1e-8;
    int starts = 100;

    MvNormalMixtureModel model = null;

    model = new MvNormalMixtureModel(data, endGroup);
    model.setModelConstraints(false, false, false, false);
    model.setEmOptions(maxIter, converge, starts);
    model.call();

    System.out.println("    Testing convergence...");
    assertTrue("Convergence test", model.converged());

    double[] pi = new double[3];
    pi[0] = model.getMixingProportion(0);
    pi[1] = model.getMixingProportion(1);
    pi[2] = model.getMixingProportion(2);

    //check mixing proportions
    //            System.out.println("    Testing proportions...");
    //            assertEquals("Proportion 1 test: ", 0.40, pi[index[0]], 5e-2);
    //            assertEquals("Proportion 2 test: ", 0.60, pi[index[1]], 5e-2);

    double[] estMean1 = model.getMean(0);
    double[] estMean2 = model.getMean(1);
    double[] estMean3 = model.getMean(2);
    double[][] estCov1 = model.getCov(0);
    double[][] estCov2 = model.getCov(1);
    double[][] estCov3 = model.getCov(2);
    double[][] trueCov1Array = trueCov1.getCovarianceMatrix().getData();
    double[][] trueCov2Array = trueCov2.getCovarianceMatrix().getData();
    double[][] trueCov3Array = trueCov3.getCovarianceMatrix().getData();

    System.out.println(model.printResults());

    /**
     * Test means
     */
    //            System.out.println("    Testing means...");
    //            for(int i=0;i<3;i++){
    //                assertEquals("Group 1 mean test", trueMeanGroup1[i], estMean1[i], 5e-2);
    //                assertEquals("Group 2 mean test", trueMeanGroup2[i], estMean2[i], 5e-2);
    //                assertEquals("Group 3 mean test", trueMeanGroup3[i], estMean3[i], 5e-2);
    //            }
    //
    //            /**
    //             * Test Covariance matrix
    //             */
    //            System.out.println("    Testing covariances...");
    //            for(int i=0;i<3;i++){
    //                for(int j=0;j<3;j++){
    //                    assertEquals("Cov[" +i + "," + j+"] test:", trueCov1Array[i][j], estCov1[i][j], 5e-2);
    //                }
    //            }
    //
    //            for(int i=0;i<3;i++){
    //                for(int j=0;j<3;j++){
    //                    assertEquals("Cov[" +i + "," + j+"] test:", trueCov2Array[i][j], estCov2[i][j], 5e-2);
    //                }
    //            }
    //
    //            for(int i=0;i<3;i++){
    //                for(int j=0;j<3;j++){
    //                    assertEquals("Cov[" +i + "," + j+"] test:", trueCov2Array[i][j], estCov2[i][j], 5e-2);
    //                }
    //            }

}

From source file:br.unicamp.ic.recod.gpsi.applications.gpsiTimeSeriesCreator.java

@Override
public void run() throws Exception {
    String datasetsPath = Paths.get(super.datasetPath).getParent().getParent().toString();
    System.out.println(datasetsPath);

    HashMap<Byte, double[][]> indicesMap = new HashMap<>();
    ArrayList<double[]> entities;
    double[][] series;

    int daysCount = 0, i, dayIndex;

    gpsiRawDataset rawDataset;/*  w  w  w .  j  a v  a2 s .  c o m*/
    gpsiMLDataset dataset;

    VectorialMean vmean;
    Mean mean = new Mean();

    File[] days, years = new File(datasetsPath).listFiles(File::isDirectory);
    Arrays.sort(years);

    for (File year : years)
        daysCount += 365 + (Integer.parseInt(year.getName()) % 4 == 0 ? 1 : 0);

    for (Byte label : classLabels) {
        series = new double[daysCount][descriptors.length];
        for (double[] row : series)
            Arrays.fill(row, Double.NaN);
        indicesMap.put(label, series);
    }

    daysCount = 0;
    for (File year : years) {
        days = new File(year.getAbsolutePath()).listFiles(File::isDirectory);
        Arrays.sort(days);
        for (File day : days) {
            dayIndex = daysCount + Integer.parseInt(day.getName()) - 1;
            rawDataset = datasetReader.readDataset(day.getAbsolutePath() + "/", null, 0.0);
            rawDataset.assignFolds(new byte[] { 0 }, null, null);
            for (i = 0; i < descriptors.length; i++) {
                dataset = new gpsiMLDataset(descriptors[i]);
                dataset.loadTrainingSet(rawDataset.getTrainingEntities(), true);
                for (Byte label : classLabels) {

                    if (!dataset.getTrainingEntities().containsKey(label)) {
                        indicesMap.get(label)[dayIndex][i] = Double.NaN;
                        continue;
                    }
                    vmean = new VectorialMean(dataset.getDimensionality());
                    entities = (ArrayList<double[]>) dataset.getTrainingEntities().get(label);
                    for (double[] v : entities)
                        vmean.increment(v);
                    indicesMap.get(label)[dayIndex][i] = mean.evaluate(vmean.getResult());
                }
            }
        }
        daysCount += 365 + (Integer.parseInt(year.getName()) % 4 == 0 ? 1 : 0);
    }

    for (Byte label : classLabels)
        stream.register(new gpsiDoubleCsvIOElement(indicesMap.get(label), names, "series/" + label + ".csv"));

}