List of usage examples for org.apache.commons.math3.stat.descriptive.moment VectorialMean increment
public void increment(double[] v) throws DimensionMismatchException
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")); }