private void findInliersOutliers(List<? extends IndependentPair<I, D>> data, double[] bestErrors) { inliers.clear(); outliers.clear(); double threshold; if (inlierNoiseLevel > 0) threshold = inlierNoiseLevel * inlierNoiseLevel * new ChiSquaredDistribution(degreesOfFreedom).inverseCumulativeProbability(probability); else { final double sigmahat = 1.4826 * (1 + 5 / (Math.max(1, data.size() - model.numItemsToEstimate()))) * Math.sqrt(bestMedianError); // http://research.microsoft.com/en-us/um/people/zhang/INRIA/Publis/Tutorial-Estim/node25.html threshold = (2.5 * sigmahat) * (2.5 * sigmahat); } for (int i = 0; i < data.size(); i++) { if (bestErrors[i] < threshold) inliers.add(data.get(i)); else outliers.add(data.get(i)); } }
public double getZScoreEquivalent(double zscore) { // compute zscore to CDF double cdf = (new NormalDistribution()).cumulativeProbability(zscore); // for normal distribution, mahalanobis distance is chi-squared // https://en.wikipedia.org/wiki/Mahalanobis_distance#Normal_distributions return (new ChiSquaredDistribution(p)).inverseCumulativeProbability(cdf); } }
private static double chi(final double p, final int degreeOfFreedom) { return new ChiSquaredDistribution(degreeOfFreedom) .inverseCumulativeProbability(p); }
double cumulativeProbability = chi.inverseCumulativeProbability(confidenceLevels[i]);
@Override public final void compute() { if (input[0].isDefined() && input[1].isDefined()) { double param = a.getDouble(); double val = b.getDouble(); try { ChiSquaredDistribution dist = getChiSquaredDistribution(param); num.setValue(dist.inverseCumulativeProbability(val)); } catch (Exception e) { num.setUndefined(); } } else { num.setUndefined(); } }