Skip to content

Instantly share code, notes, and snippets.

@sushain97
Created September 8, 2013 20:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sushain97/6488296 to your computer and use it in GitHub Desktop.
Save sushain97/6488296 to your computer and use it in GitHub Desktop.
private static Pair<List<Integer>,List<Integer>> calculateStats(List<Integer> list)
{
double[] data = new double[list.size()];
for(int i = 0; i < list.size(); i++)
data[i] = list.get(i);
DescriptiveStatistics dStats = new DescriptiveStatistics(data);
List<Integer> summary = new ArrayList<Integer>(5);
summary.add((int) dStats.getMin()); //Minimum
summary.add((int) dStats.getPercentile(25)); //Lower Quartile (Q1)
summary.add((int) dStats.getPercentile(50)); //Middle Quartile (Median - Q2)
summary.add((int) dStats.getPercentile(75)); //High Quartile (Q3)
summary.add((int) dStats.getMax()); //Maxiumum
List<Integer> outliers = new ArrayList<Integer>();
if(list.size() > 5 && dStats.getStandardDeviation() > 0) //Only remove outliers if relatively normal
{
double mean = dStats.getMean();
double stDev = dStats.getStandardDeviation();
NormalDistribution normalDistribution = new NormalDistribution(mean, stDev);
Iterator<Integer> listIterator = list.iterator();
double significanceLevel = .50 / list.size();
while(listIterator.hasNext())
{
int num = listIterator.next();
double pValue = normalDistribution.cumulativeProbability(num);
if(pValue < significanceLevel) //Chauvenet's Criterion for Outliers
{
outliers.add(num);
listIterator.remove();
}
}
if(list.size() != dStats.getN()) //If and only if outliers have been removed
{
double[] significantData = new double[list.size()];
for(int i = 0; i < list.size(); i++)
significantData[i] = list.get(i);
dStats = new DescriptiveStatistics(significantData);
summary.set(0, (int) dStats.getMin());
summary.set(4, (int) dStats.getMax());
}
}
return new Pair<List<Integer>,List<Integer>>(summary, outliers);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment