Statistics { public double get(String key) { if (!statistics.containsKey(key)) { if (MEDIAN.equals(key) || QUARTILE_1.equals(key) || QUARTILE_2.equals(key) || QUARTILE_3.equals(key)) { createDistributionStats(data, statistics); } else { createBasicStats(data, statistics); } } Double v = statistics.get(key); return DataUtils.getValueOrDefault(v, Double.NaN); } Statistics(Iterable<? extends Comparable<?>> data); double get(String key); static final String N; static final String SUM; static final String SUM2; static final String SUM3; static final String SUM4; static final String MIN; static final String MAX; static final String MEAN; static final String SUM_OF_DIFF_SQUARES; static final String SUM_OF_DIFF_CUBICS; static final String SUM_OF_DIFF_QUADS; static final String VARIANCE; static final String POPULATION_VARIANCE; static final String SKEWNESS; static final String KURTOSIS; static final String MEDIAN; static final String QUARTILE_1; static final String QUARTILE_2; static final String QUARTILE_3; }
@Test public void testMin() { assertEquals(0.0, stats.get(Statistics.MIN), DELTA); assertThat(table.getRowStatistics(Statistics.MIN), CoreMatchers.<Comparable<?>>hasItems(0.0, 1.0, 2.0)); assertThat(table.getColumnStatistics(Statistics.MIN), CoreMatchers.<Comparable<?>>hasItems(0.0, 1.0, 2.0)); }
@Test public void testMax() { assertEquals(9.0, stats.get(Statistics.MAX), DELTA); assertThat(table.getRowStatistics(Statistics.MAX), CoreMatchers.<Comparable<?>>hasItems(2.0, 3.0, 4.0)); assertThat(table.getColumnStatistics(Statistics.MAX), CoreMatchers.<Comparable<?>>hasItems(5.0, 9.0, 9.0)); }
@Test public void testN() { assertEquals(24.0, stats.get(Statistics.N), DELTA); assertThat(table.getRowStatistics(Statistics.N), CoreMatchers.<Comparable<?>>hasItems(3.0, 3.0, 3.0)); assertThat(table.getColumnStatistics(Statistics.N), CoreMatchers.<Comparable<?>>hasItems(8.0, 8.0, 8.0)); }
@Test public void testSumOfDiffSquares() { assertEquals(157.95833333333337, stats.get(Statistics.SUM_OF_DIFF_SQUARES), DELTA); assertEquals(2.00000000000000, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_SQUARES).get(0, 0)).doubleValue(), DELTA); assertEquals(2.66666666666666, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_SQUARES).get(0, 1)).doubleValue(), DELTA); assertEquals(2.66666666666666, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_SQUARES).get(0, 2)).doubleValue(), DELTA); assertEquals(18.87500000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_SQUARES).get(0, 0)).doubleValue(), DELTA); assertEquals(48.00000000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_SQUARES).get(1, 0)).doubleValue(), DELTA); assertEquals(42.00000000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_SQUARES).get(2, 0)).doubleValue(), DELTA); }
@Test public void testSumOfDiffCubics() { assertEquals(340.50347222222221, stats.get(Statistics.SUM_OF_DIFF_CUBICS), DELTA); assertEquals( 0.00000000000000, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_CUBICS).get(0, 0)).doubleValue(), DELTA); assertEquals(-1.77777777777777, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_CUBICS).get(0, 1)).doubleValue(), DELTA); assertEquals( 1.77777777777777, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_CUBICS).get(0, 2)).doubleValue(), DELTA); assertEquals( 17.90625000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_CUBICS).get(0, 0)).doubleValue(), DELTA); assertEquals(198.00000000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_CUBICS).get(1, 0)).doubleValue(), DELTA); assertEquals( 0.00000000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_CUBICS).get(2, 0)).doubleValue(), DELTA); }
@Test public void testSumOfDiffQuads() { assertEquals(2723.1039496527756, stats.get(Statistics.SUM_OF_DIFF_QUADS), DELTA); assertEquals( 2.0000000000000, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_QUADS).get(0, 0)).doubleValue(), DELTA); assertEquals( 3.5555555555555, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_QUADS).get(0, 1)).doubleValue(), DELTA); assertEquals( 3.5555555555555, ((Number) table.getRowStatistics(Statistics.SUM_OF_DIFF_QUADS).get(0, 2)).doubleValue(), DELTA); assertEquals( 104.2753906250000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_QUADS).get(0, 0)).doubleValue(), DELTA); assertEquals(1332.0000000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_QUADS).get(1, 0)).doubleValue(), DELTA); assertEquals( 388.5000000000000, ((Number) table.getColumnStatistics(Statistics.SUM_OF_DIFF_QUADS).get(2, 0)).doubleValue(), DELTA); }
@Test public void testSkewness() { assertEquals( -2.1597406540506, stats.get(Statistics.SKEWNESS), DELTA); assertEquals( -3.0000000000000, ((Number) table.getRowStatistics(Statistics.SKEWNESS).get(0, 0)).doubleValue(), DELTA); assertEquals( -3.7071067811865, ((Number) table.getRowStatistics(Statistics.SKEWNESS).get(0, 1)).doubleValue(), DELTA); assertEquals( -2.2928932188134, ((Number) table.getRowStatistics(Statistics.SKEWNESS).get(0, 2)).doubleValue(), DELTA); assertEquals( -2.3823830637406, ((Number) table.getColumnStatistics(Statistics.SKEWNESS).get(0, 0)).doubleValue(), DELTA); assertEquals( -1.3159758018366, ((Number) table.getColumnStatistics(Statistics.SKEWNESS).get(1, 0)).doubleValue(), DELTA); assertEquals( -3.0000000000000, ((Number) table.getColumnStatistics(Statistics.SKEWNESS).get(2, 0)).doubleValue(), DELTA); }
@Test public void testKurtosis() { assertEquals( -0.3806690393420, stats.get(Statistics.KURTOSIS), DELTA); assertEquals( -1.5000000000000, ((Number) table.getRowStatistics(Statistics.KURTOSIS).get(0, 0)).doubleValue(), DELTA); assertEquals( -1.5000000000000, ((Number) table.getRowStatistics(Statistics.KURTOSIS).get(0, 1)).doubleValue(), DELTA); assertEquals( -1.5000000000000, ((Number) table.getRowStatistics(Statistics.KURTOSIS).get(0, 2)).doubleValue(), DELTA); assertEquals( -0.6584798912328, ((Number) table.getColumnStatistics(Statistics.KURTOSIS).get(0, 0)).doubleValue(), DELTA); assertEquals( 1.6250000000000, ((Number) table.getColumnStatistics(Statistics.KURTOSIS).get(1, 0)).doubleValue(), DELTA); assertEquals( -1.2380952380952, ((Number) table.getColumnStatistics(Statistics.KURTOSIS).get(2, 0)).doubleValue(), DELTA); }
@Test public void testQuartiles() { assertEquals(2.00, stats.get(Statistics.QUARTILE_1), DELTA); assertEquals(0.50, ((Number) table.getRowStatistics(Statistics.QUARTILE_1).get(0, 0)).doubleValue(), DELTA); assertEquals(2.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_1).get(0, 1)).doubleValue(), DELTA); assertEquals(2.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_1).get(0, 2)).doubleValue(), DELTA); assertEquals(1.00, ((Number) table.getColumnStatistics(Statistics.QUARTILE_1).get(0, 0)).doubleValue(), DELTA); assertEquals(1.75, ((Number) table.getColumnStatistics(Statistics.QUARTILE_1).get(1, 0)).doubleValue(), DELTA); assertEquals(3.75, ((Number) table.getColumnStatistics(Statistics.QUARTILE_1).get(2, 0)).doubleValue(), DELTA); assertEquals(2.50, stats.get(Statistics.QUARTILE_2), DELTA); assertEquals(1.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_2).get(0, 0)).doubleValue(), DELTA); assertEquals(3.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_2).get(0, 1)).doubleValue(), DELTA); assertEquals(2.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_2).get(0, 2)).doubleValue(), DELTA); assertEquals(2.00, ((Number) table.getColumnStatistics(Statistics.QUARTILE_2).get(0, 0)).doubleValue(), DELTA); assertEquals(2.00, ((Number) table.getColumnStatistics(Statistics.QUARTILE_2).get(1, 0)).doubleValue(), DELTA); assertEquals(5.50, ((Number) table.getColumnStatistics(Statistics.QUARTILE_2).get(2, 0)).doubleValue(), DELTA); assertEquals(5.00, stats.get(Statistics.QUARTILE_3), DELTA); assertEquals(1.50, ((Number) table.getRowStatistics(Statistics.QUARTILE_3).get(0, 0)).doubleValue(), DELTA); assertEquals(3.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_3).get(0, 1)).doubleValue(), DELTA); assertEquals(3.00, ((Number) table.getRowStatistics(Statistics.QUARTILE_3).get(0, 2)).doubleValue(), DELTA); assertEquals(2.50, ((Number) table.getColumnStatistics(Statistics.QUARTILE_3).get(0, 0)).doubleValue(), DELTA); assertEquals(3.25, ((Number) table.getColumnStatistics(Statistics.QUARTILE_3).get(1, 0)).doubleValue(), DELTA); assertEquals(7.25, ((Number) table.getColumnStatistics(Statistics.QUARTILE_3).get(2, 0)).doubleValue(), DELTA); assertEquals(stats.get(Statistics.MEDIAN), stats.get(Statistics.QUARTILE_2), DELTA); }
@Test public void testNonExistant() { assertTrue(Double.isNaN(stats.get("foobar"))); }
@Test public void testDataUpdate() { table.add(24, -11, 42); table.set(1, 1, -42); assertEquals( 27.0, stats.get(Statistics.N), DELTA); assertEquals(-42.0, stats.get(Statistics.MIN), DELTA); assertEquals( 42.0, stats.get(Statistics.MAX), DELTA); assertEquals( 95.0, stats.get(Statistics.SUM), DELTA); assertEquals( 3.0, ((Number) table.getRowStatistics(Statistics.N ).get(0, 1)).doubleValue(), DELTA); assertEquals(-42.0, ((Number) table.getRowStatistics(Statistics.MIN).get(0, 1)).doubleValue(), DELTA); assertEquals( 3.0, ((Number) table.getRowStatistics(Statistics.MAX).get(0, 1)).doubleValue(), DELTA); assertEquals(-38.0, ((Number) table.getRowStatistics(Statistics.SUM).get(0, 1)).doubleValue(), DELTA); assertEquals( 9.0, ((Number) table.getColumnStatistics(Statistics.N ).get(1, 0)).doubleValue(), DELTA); assertEquals(-42.0, ((Number) table.getColumnStatistics(Statistics.MIN).get(1, 0)).doubleValue(), DELTA); assertEquals( 9.0, ((Number) table.getColumnStatistics(Statistics.MAX).get(1, 0)).doubleValue(), DELTA); assertEquals(-32.0, ((Number) table.getColumnStatistics(Statistics.SUM).get(1, 0)).doubleValue(), DELTA); }
@Test public void testSum() { assertEquals(85.0, stats.get(Statistics.SUM), DELTA); assertThat(table.getRowStatistics(Statistics.SUM), CoreMatchers.<Comparable<?>>hasItems(3.0, 7.0, 8.0)); assertThat(table.getColumnStatistics(Statistics.SUM), CoreMatchers.<Comparable<?>>hasItems(17.0, 24.0, 44.0)); }
@Test public void testMean() { assertEquals(85.0/24.0, stats.get(Statistics.MEAN), DELTA); assertThat(table.getRowStatistics(Statistics.MEAN), CoreMatchers.<Comparable<?>>hasItems(3.0/3.0, 7.0/3.0, 8.0/3.0)); assertThat(table.getColumnStatistics(Statistics.MEAN), CoreMatchers.<Comparable<?>>hasItems(17.0/8.0, 24.0/8.0, 44.0/8.0)); }