⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleregression.java

📁 Apache的common math数学软件包
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * <strong>Preconditions</strong>: <ul>     * <li>At least two observations (with at least two different x values)     * must have been added before invoking this method. If this method is      * invoked before a model can be estimated, <code>Double,NaN</code> is     * returned.     * </li></ul></p>     *     * @return sum of squared errors associated with the regression model     */    public double getSumSquaredErrors() {        return Math.max(0d, sumYY - sumXY * sumXY / sumXX);    }    /**     * Returns the sum of squared deviations of the y values about their mean.     * <p>     * This is defined as SSTO      * <a href="http://www.xycoon.com/SumOfSquares.htm">here</a>.</p>     * <p>     * If <code>n < 2</code>, this returns <code>Double.NaN</code>.</p>     *     * @return sum of squared deviations of y values     */    public double getTotalSumSquares() {        if (n < 2) {            return Double.NaN;        }        return sumYY;    }    /**     * Returns the sum of squared deviations of the predicted y values about      * their mean (which equals the mean of y).     * <p>     * This is usually abbreviated SSR or SSM.  It is defined as SSM      * <a href="http://www.xycoon.com/SumOfSquares.htm">here</a></p>     * <p>     * <strong>Preconditions</strong>: <ul>     * <li>At least two observations (with at least two different x values)     * must have been added before invoking this method. If this method is      * invoked before a model can be estimated, <code>Double.NaN</code> is     * returned.     * </li></ul></p>     *     * @return sum of squared deviations of predicted y values     */    public double getRegressionSumSquares() {        return getRegressionSumSquares(getSlope());    }    /**     * Returns the sum of squared errors divided by the degrees of freedom,     * usually abbreviated MSE.      * <p>     * If there are fewer than <strong>three</strong> data pairs in the model,     * or if there is no variation in <code>x</code>, this returns      * <code>Double.NaN</code>.</p>     *     * @return sum of squared deviations of y values     */    public double getMeanSquareError() {        if (n < 3) {            return Double.NaN;        }        return getSumSquaredErrors() / (double) (n - 2);    }    /**     * Returns <a href="http://mathworld.wolfram.com/CorrelationCoefficient.html">     * Pearson's product moment correlation coefficient</a>,     * usually denoted r.      * <p>     * <strong>Preconditions</strong>: <ul>     * <li>At least two observations (with at least two different x values)     * must have been added before invoking this method. If this method is      * invoked before a model can be estimated, <code>Double,NaN</code> is     * returned.     * </li></ul></p>     *     * @return Pearson's r     */    public double getR() {        double b1 = getSlope();        double result = Math.sqrt(getRSquare());        if (b1 < 0) {            result = -result;        }        return result;    }    /**      * Returns the <a href="http://www.xycoon.com/coefficient1.htm">      * coefficient of determination</a>,     * usually denoted r-square.      * <p>     * <strong>Preconditions</strong>: <ul>     * <li>At least two observations (with at least two different x values)     * must have been added before invoking this method. If this method is      * invoked before a model can be estimated, <code>Double,NaN</code> is     * returned.     * </li></ul></p>     *     * @return r-square     */    public double getRSquare() {        double ssto = getTotalSumSquares();        return (ssto - getSumSquaredErrors()) / ssto;    }    /**     * Returns the <a href="http://www.xycoon.com/standarderrorb0.htm">     * standard error of the intercept estimate</a>,      * usually denoted s(b0).      * <p>     * If there are fewer that <strong>three</strong> observations in the      * model, or if there is no variation in x, this returns      * <code>Double.NaN</code>.</p>     *     * @return standard error associated with intercept estimate     */    public double getInterceptStdErr() {        return Math.sqrt(            getMeanSquareError() * ((1d / (double) n) + (xbar * xbar) / sumXX));    }    /**     * Returns the <a href="http://www.xycoon.com/standerrorb(1).htm">standard     * error of the slope estimate</a>,     * usually denoted s(b1).      * <p>     * If there are fewer that <strong>three</strong> data pairs in the model,     * or if there is no variation in x, this returns <code>Double.NaN</code>.     * </p>     *      * @return standard error associated with slope estimate     */    public double getSlopeStdErr() {        return Math.sqrt(getMeanSquareError() / sumXX);    }    /**     * Returns the half-width of a 95% confidence interval for the slope     * estimate.     * <p>     * The 95% confidence interval is</p>     * <p>     * <code>(getSlope() - getSlopeConfidenceInterval(),      * getSlope() + getSlopeConfidenceInterval())</code></p>     * <p>     * If there are fewer that <strong>three</strong> observations in the      * model, or if there is no variation in x, this returns      * <code>Double.NaN</code>.</p>     * <p>     * <strong>Usage Note</strong>:<br>     * The validity of this statistic depends on the assumption that the      * observations included in the model are drawn from a     * <a href="http://mathworld.wolfram.com/BivariateNormalDistribution.html">     * Bivariate Normal Distribution</a>.</p>     *     * @return half-width of 95% confidence interval for the slope estimate     * @throws MathException if the confidence interval can not be computed.     */    public double getSlopeConfidenceInterval() throws MathException {        return getSlopeConfidenceInterval(0.05d);    }    /**     * Returns the half-width of a (100-100*alpha)% confidence interval for      * the slope estimate.     * <p>     * The (100-100*alpha)% confidence interval is </p>     * <p>     * <code>(getSlope() - getSlopeConfidenceInterval(),      * getSlope() + getSlopeConfidenceInterval())</code></p>     * <p>     * To request, for example, a 99% confidence interval, use      * <code>alpha = .01</code></p>     * <p>     * <strong>Usage Note</strong>:<br>     * The validity of this statistic depends on the assumption that the      * observations included in the model are drawn from a     * <a href="http://mathworld.wolfram.com/BivariateNormalDistribution.html">     * Bivariate Normal Distribution</a>.</p>     * <p>     * <strong> Preconditions:</strong><ul>     * <li>If there are fewer that <strong>three</strong> observations in the      * model, or if there is no variation in x, this returns      * <code>Double.NaN</code>.     * </li>     * <li><code>(0 < alpha < 1)</code>; otherwise an      * <code>IllegalArgumentException</code> is thrown.     * </li></ul></p>      *     * @param alpha the desired significance level      * @return half-width of 95% confidence interval for the slope estimate     * @throws MathException if the confidence interval can not be computed.     */    public double getSlopeConfidenceInterval(double alpha)        throws MathException {        if (alpha >= 1 || alpha <= 0) {            throw new IllegalArgumentException();        }        return getSlopeStdErr() *            distribution.inverseCumulativeProbability(1d - alpha / 2d);    }    /**     * Returns the significance level of the slope (equiv) correlation.      * <p>     * Specifically, the returned value is the smallest <code>alpha</code>     * such that the slope confidence interval with significance level     * equal to <code>alpha</code> does not include <code>0</code>.     * On regression output, this is often denoted <code>Prob(|t| > 0)</code>     * </p><p>     * <strong>Usage Note</strong>:<br>     * The validity of this statistic depends on the assumption that the      * observations included in the model are drawn from a     * <a href="http://mathworld.wolfram.com/BivariateNormalDistribution.html">     * Bivariate Normal Distribution</a>.</p>     * <p>     * If there are fewer that <strong>three</strong> observations in the      * model, or if there is no variation in x, this returns      * <code>Double.NaN</code>.</p>     *     * @return significance level for slope/correlation     * @throws MathException if the significance level can not be computed.     */    public double getSignificance() throws MathException {        return 2d * (1.0 - distribution.cumulativeProbability(                    Math.abs(getSlope()) / getSlopeStdErr()));    }    // ---------------------Private methods-----------------------------------    /**    * Returns the intercept of the estimated regression line, given the slope.    * <p>    * Will return <code>NaN</code> if slope is <code>NaN</code>.</p>    *    * @param slope current slope    * @return the intercept of the regression line    */    private double getIntercept(double slope) {        return (sumY - slope * sumX) / ((double) n);    }    /**     * Computes SSR from b1.     *      * @param slope regression slope estimate     * @return sum of squared deviations of predicted y values     */    private double getRegressionSumSquares(double slope) {        return slope * slope * sumXX;    }        /**     * Modify the distribution used to compute inference statistics.     * @param value the new distribution     * @since 1.2     */    public void setDistribution(TDistribution value) {        distribution = value;                // modify degrees of freedom        if (n > 2) {            distribution.setDegreesOfFreedom(n - 2);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -