Example usage for org.apache.commons.math3.stat.regression RegressionResults RegressionResults

List of usage examples for org.apache.commons.math3.stat.regression RegressionResults RegressionResults

Introduction

In this page you can find the example usage for org.apache.commons.math3.stat.regression RegressionResults RegressionResults.

Prototype

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) 

Source Link

Document

Constructor for Regression Results.

Usage

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;
}