List of usage examples for org.apache.commons.math3.stat.regression RegressionResults RegressionResults
public RegressionResults(final double[] parameters, final double[][] varcov, final boolean isSymmetricCompressed, final long nobs, final int rank, final double sumy, final double sumysq, final double sse, final boolean containsConstant, final boolean copyData)
From source file:experiment.SimpleRegression_bug.java
/** * Performs a regression on data present in buffers and outputs a RegressionResults object. * * <p>If there are fewer than 3 observations in the model and {@code hasIntercept} is true * a {@code NoDataException} is thrown. If there is no intercept term, the model must * contain at least 2 observations.</p> * * @return RegressionResults acts as a container of regression output * @throws ModelSpecificationException if the model is not correctly specified * @throws NoDataException if there is not sufficient data in the model to * estimate the regression parameters/* w w w . j a v a 2 s . c o m*/ */ public RegressionResults regress() throws ModelSpecificationException, NoDataException { if (hasIntercept) { if (n < 3) { throw new NoDataException(LocalizedFormats.NOT_ENOUGH_DATA_REGRESSION); } if (FastMath.abs(sumXX) > Precision.SAFE_MIN) { final double[] params = new double[] { getIntercept(), getSlope() }; final double mse = getMeanSquareError(); final double _syy = sumYY + sumY * sumY / n; final double[] vcv = new double[] { mse * (xbar * xbar / sumXX + 1.0 / n), -xbar * mse / sumXX, mse / sumXX }; return new RegressionResults(params, new double[][] { vcv }, true, n, 2, sumY, _syy, getSumSquaredErrors(), true, false); } else { final double[] params = new double[] { sumY / n, Double.NaN }; //final double mse = getMeanSquareError(); final double[] vcv = new double[] { ybar / (n - 1.0), Double.NaN, Double.NaN }; return new RegressionResults(params, new double[][] { vcv }, true, n, 1, sumY, sumYY, getSumSquaredErrors(), true, false); } } else { if (n < 2) { throw new NoDataException(LocalizedFormats.NOT_ENOUGH_DATA_REGRESSION); } if (!Double.isNaN(sumXX)) { final double[] vcv = new double[] { getMeanSquareError() / sumXX }; final double[] params = new double[] { sumXY / sumXX }; return new RegressionResults(params, new double[][] { vcv }, true, n, 1, sumY, sumYY, getSumSquaredErrors(), false, false); } else { final double[] vcv = new double[] { Double.NaN }; final double[] params = new double[] { Double.NaN }; return new RegressionResults(params, new double[][] { vcv }, true, n, 1, Double.NaN, Double.NaN, Double.NaN, false, false); } } }
From source file:experiment.SimpleRegression_bug.java
/** * Performs a regression on data present in buffers including only regressors * indexed in variablesToInclude and outputs a RegressionResults object * @param variablesToInclude an array of indices of regressors to include * @return RegressionResults acts as a container of regression output * @throws MathIllegalArgumentException if the variablesToInclude array is null or zero length * @throws OutOfRangeException if a requested variable is not present in model *///from ww w . ja v a 2s.co m public RegressionResults regress(int[] variablesToInclude) throws MathIllegalArgumentException { if (variablesToInclude == null || variablesToInclude.length == 0) { throw new MathIllegalArgumentException(LocalizedFormats.ARRAY_ZERO_LENGTH_OR_NULL_NOT_ALLOWED); } if (variablesToInclude.length > 2 || (variablesToInclude.length > 1 && !hasIntercept)) { throw new ModelSpecificationException(LocalizedFormats.ARRAY_SIZE_EXCEEDS_MAX_VARIABLES, (variablesToInclude.length > 1 && !hasIntercept) ? 1 : 2); } if (hasIntercept) { if (variablesToInclude.length == 2) { if (variablesToInclude[0] == 1) { throw new ModelSpecificationException(LocalizedFormats.NOT_INCREASING_SEQUENCE); } else if (variablesToInclude[0] != 0) { throw new OutOfRangeException(variablesToInclude[0], 0, 1); } if (variablesToInclude[1] != 1) { throw new OutOfRangeException(variablesToInclude[0], 0, 1); } return regress(); } else { if (variablesToInclude[0] != 1 && variablesToInclude[0] != 0) { throw new OutOfRangeException(variablesToInclude[0], 0, 1); } final double _mean = sumY * sumY / n; final double _syy = sumYY + _mean; if (variablesToInclude[0] == 0) { //just the mean final double[] vcv = new double[] { sumYY / (((n - 1) * n)) }; final double[] params = new double[] { ybar }; return new RegressionResults(params, new double[][] { vcv }, true, n, 1, sumY, _syy + _mean, sumYY, true, false); } else if (variablesToInclude[0] == 1) { //final double _syy = sumYY + sumY * sumY / ((double) n); final double _sxx = sumXX + sumX * sumX / n; final double _sxy = sumXY + sumX * sumY / n; final double _sse = FastMath.max(0d, _syy - _sxy * _sxy / _sxx); final double _mse = _sse / ((n - 1)); if (!Double.isNaN(_sxx)) { final double[] vcv = new double[] { _mse / _sxx }; final double[] params = new double[] { _sxy / _sxx }; return new RegressionResults(params, new double[][] { vcv }, true, n, 1, sumY, _syy, _sse, false, false); } else { final double[] vcv = new double[] { Double.NaN }; final double[] params = new double[] { Double.NaN }; return new RegressionResults(params, new double[][] { vcv }, true, n, 1, Double.NaN, Double.NaN, Double.NaN, false, false); } } } } else { if (variablesToInclude[0] != 0) { throw new OutOfRangeException(variablesToInclude[0], 0, 0); } return regress(); } return null; }