/** * Gets the robust loess parameter estimates. * * @param y the y array * @return the robust loess parameter estimates */ public static double[] getRobustLoessParameterEstimates(final double[] y) { int n = y.length; double[] x = new double[n]; for (int i = 0; i < n; i++) { x[i] = i + 1; } SimpleRegression tricubeRegression = createWeigthedLinearRegression(x, y, getTricubeWeigts(n)); double[] residuals = new double[n]; for (int i = 0; i < n; i++) { residuals[i] = y[i] - tricubeRegression.predict(x[i]); } SimpleRegression tricubeBySquareRegression = createWeigthedLinearRegression( x, y, getTricubeBisquareWeigts(residuals)); double[] estimates = tricubeBySquareRegression.regress() .getParameterEstimates(); if (Double.isNaN(estimates[0]) || Double.isNaN(estimates[1])) { return tricubeRegression.regress().getParameterEstimates(); } return estimates; }