wsattacker.plugin.intelligentdos.StatisticTest.java Source code

Java tutorial

Introduction

Here is the source code for wsattacker.plugin.intelligentdos.StatisticTest.java

Source

/**
 * WS-Attacker - A Modular Web Services Penetration Testing Framework Copyright
 * (C) 2013 Christian Altmeier
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 51
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
package wsattacker.plugin.intelligentdos;

import java.text.DecimalFormat;

import org.apache.commons.math3.distribution.TDistribution;
import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
import org.apache.commons.math3.stat.inference.TestUtils;

public class StatisticTest {

    // http://www.math.csi.cuny.edu/Statistics/R/simpleR/stat012.html

    public static void main(String[] args) {

        double[] withDrug = { 15, 10, 13, 7, 9, 8, 21, 9, 14, 8 };
        double[] placebo = { 15, 14, 12, 8, 14, 7, 16, 10, 15, 12 };
        // statistics(withDrug, placebo);

        double[] experimental = { 2, 2, 2, 3, 3, 1, 3, 3, 4, 3, 1, 2, 3, 2, 0, 2, 3, 2, 2, 2, 4, 3, 1, 2, 2, 1, 2,
                2, 3, 0 };
        double[] kontroll = { 3, 2, 3, 4, 0, 2, 4, 2, 3, 2, 2, 5, 3, 5, 3, 4, 3, 3, 3, 2, 3, 2, 4, 3, 3, 4, 4, 2, 3,
                3 };
        // statistics(experimental, kontroll);

        double[] x = { 3, 0, 5, 2, 5, 5, 5, 4, 4, 5 };
        double[] y = { 2, 1, 4, 1, 4, 3, 3, 2, 3, 5 };
        // statistics(x, y);

        double[] utr1 = { 1025090, 1016940, 30776545, 851827, 1009695, 843979, 934836, 1111118, 1024788, 949929,
                1019657, 1057086, 1018751, 905859, 1265364, 1330564, 997320, 769120, 1032334, 969851, 1613702,
                897709, 1407235, 1160320, 1041390, 1144624, 26599816, 26644490, 1520731, 1185977, 1184468,
                24128251 };
        double[] utr2 = { 1599839, 2662677, 1427782, 1425669, 2240077, 109574, 753736, 1086382, 1575088, 1898979,
                1057101, 1068874, 1898678, 1774615, 1712734, 2054737, 1900791, 1118982, 1085476, 1092720, 1680134,
                142778, 1780651, 1786085, 2228909, 1129547, 1049857, 1040198, 972883, 1468834, 735625, 1074308 };
        double[] utr3 = { 108668, 119234, 70936, 103839, 123157, 99009, 184737, 73352, 104443, 118932, 83917, 74861,
                112593, 77879, 74257, 74559, 114102, 80595, 92670, 120139, 109272, 97801, 83313, 71238, 118026,
                126780, 95085, 99009, 109574, 103537, 208583, 118931 };
        System.out.println("utr1 <> utr2");
        statistics(utr1, utr2);
        System.out.println();
        System.out.println("utr1 <> utr3");
        statistics(utr1, utr3);
        System.out.println();
        System.out.println("utr2 <> utr3");
        statistics(utr2, utr3);
    }

    private static void statistics(double[] x, double[] y) {

        DecimalFormat df = new DecimalFormat("#.######");

        SummaryStatistics statisticsX = new SummaryStatistics();
        for (double value : x) {
            statisticsX.addValue(value);
        }

        SummaryStatistics statisticsY = new SummaryStatistics();
        for (double value : y) {
            statisticsY.addValue(value);
        }

        // t = -0.5331
        double t = TestUtils.t(statisticsX, statisticsY);
        // df = 18
        long degreesOfFreedom = statisticsX.getN() + statisticsY.getN() - 2;
        // p-value = 0.3002
        TDistribution tDistribution = new TDistribution(degreesOfFreedom);
        double pValue = tDistribution.cumulativeProbability(t);

        // t = -0.5331, df = 18, p-value = 0.3002
        System.out.print("t = " + df.format(t));
        System.out.print(", df = " + degreesOfFreedom);
        System.out.println(", p-value = " + df.format(pValue));

        System.out.println("mean of x mean of y");
        System.out.println(df.format(statisticsX.getMean()) + " - " + df.format(statisticsY.getMean()));

        // Calculate 95% confidence interval
        double ci = calcMeanCI(statisticsY, 0.95);
        System.out.println(String.format("Confidence inteval 95%%: %f", ci));
    }

    private static double calcMeanCI(SummaryStatistics stats, double level) {
        // Create T Distribution with N-1 degrees of freedom
        TDistribution tDist = new TDistribution(stats.getN() - 1);
        // Calculate critical value
        double critVal = tDist.inverseCumulativeProbability(1.0 - (1 - level) / 2);
        // Calculate confidence interval
        return critVal * stats.getStandardDeviation() / Math.sqrt(stats.getN());
    }

    private static void standardDeviation(SummaryStatistics statisticsWithDrug,
            SummaryStatistics statisticsPlacebo) {
        System.out.println("standardDeviation: " + statisticsWithDrug.getStandardDeviation());
        System.out.println("standardDeviation: " + statisticsPlacebo.getStandardDeviation());
    }
}