/** * Normalize x_i as x_i -> (x_i - mean)/(standard deviation) * @param xData X values of data * @return Normalized X values */ private double[] normaliseData(double[] xData) { int nData = xData.length; double[] res = new double[nData]; Function<double[], Double> calculator = new MeanCalculator(); _renorm[0] = calculator.apply(xData); calculator = new SampleStandardDeviationCalculator(); _renorm[1] = calculator.apply(xData); double tmp = _renorm[0] / _renorm[1]; for (int i = 0; i < nData; ++i) { res[i] = xData[i] / _renorm[1] - tmp; } return res; }
@Test public void test() { assertCDFWithNull(LAPLACE); assertPDFWithNull(LAPLACE); assertInverseCDFWithNull(LAPLACE); final double mean = new MeanCalculator().apply(DATA); final double median = new MedianCalculator().apply(DATA); final double variance = new SampleVarianceCalculator().apply(DATA); final double skew = new SampleSkewnessCalculator().apply(DATA); final double kurtosis = new SampleFisherKurtosisCalculator().apply(DATA); assertEquals(mean, MU, EPS1); assertEquals(median, MU, EPS1); assertEquals(variance, 2 * B * B, EPS1); assertEquals(skew, 0, EPS1); assertEquals(kurtosis, 3, EPS1); } }
@Test public void testDistribution() { final Function<double[], Double> meanCalculator = new MeanCalculator(); final Function<double[], Double> medianCalculator = new MedianCalculator(); final Function<double[], Double> varianceCalculator = new PopulationVarianceCalculator(); final int n = 1000000; final double eps = 0.1; final double[] data = new double[n]; for (int i = 0; i < n; i++) { data[i] = DIST.nextRandom(); } final double mean = MU + SIGMA / (1 - KSI); final double median = MU + SIGMA * (Math.pow(2, KSI) - 1) / KSI; final double variance = SIGMA * SIGMA / ((1 - KSI) * (1 - KSI) * (1 - 2 * KSI)); assertEquals(meanCalculator.apply(data), mean, eps); assertEquals(medianCalculator.apply(data), median, eps); assertEquals(varianceCalculator.apply(data), variance, eps); }