类 SimpleRegression

java.lang.Object
org.hipparchus.stat.regression.SimpleRegression
所有已实现的接口:
Serializable, UpdatingMultipleLinearRegression

public class SimpleRegression extends Object implements Serializable, UpdatingMultipleLinearRegression
用一个独立变量估计普通最小二乘回归模型。

y = intercept + slope * x

interceptslope的标准误差以及ANOVA、r-square和Pearson's r统计数据也可用。

观测值(x,y对)可以逐个添加到模型中,也可以以二维数组的形式提供。观测值不会存储在内存中,因此可以向模型添加的观测值数量没有限制。

* 使用说明:

  • 当模型中观测值少于两个或x值没有变化(即所有x值相同)时,所有统计数据都将返回NaN。至少需要两个具有不同x坐标的观测值才能估计双变量回归模型。
  • 统计数据的获取器始终基于当前观测值集合计算数值--也就是说,您可以获取统计数据,然后添加更多数据并获取更新的统计数据,而无需使用新实例。没有更新所有统计数据的"计算"方法。每个获取器执行必要的计算以返回请求的统计数据。
  • 通过将false传递给SimpleRegression(boolean)构造函数,可以抑制截距项。当hasIntercept属性为false时,模型将在没有常数项的情况下估计,并且getIntercept()返回0
另请参阅:
  • 构造器详细资料

    • SimpleRegression

      public SimpleRegression()
      创建一个空的SimpleRegression实例
    • SimpleRegression

      public SimpleRegression(boolean includeIntercept)
      创建一个SimpleRegression实例,指定是否估计截距。

      使用false估计没有截距的模型。当hasIntercept属性为false时,模型将在没有常数项的情况下估计,并且getIntercept()返回0

      参数:
      includeIntercept - 是否在回归模型中包括截距项
  • 方法详细资料

    • addData

      public void addData(double x, double y)
      将观测值(x,y)添加到回归数据集中。

      使用"用于计算样本方差的算法:分析和建议"中定义的均值和平方和的更新公式,Chan, T.F., Golub, G.H., and LeVeque, R.J. 1983, American Statistician, vol. 37, pp. 242-247, Weisberg, S. "Applied Linear Regression". 2nd Ed. 1985中引用。

      参数:
      x - 自变量值
      y - 因变量值
    • append

      public void append(SimpleRegression reg)
      将另一个回归计算的数据附加到此回归计算中。

      均值更新公式基于Philippe Pébay撰写的一篇论文:用于计算协方差和任意阶统计矩的稳健、一次并行计算的公式,2008年,技术报告SAND2008-6212,Sandia国家实验室。

      参数:
      reg - 要附加数据的模型
    • removeData

      public void removeData(double x, double y)
      从回归数据集中删除观测值(x,y)。

      与addData方法相反。此方法允许在流模式下使用SimpleRegression实例,其中回归应用于滑动的观测值"窗口",但调用方负责维护窗口中的观测值集合。

      如果没有数据点(即n=0),该方法不起作用。
      参数:
      x - 自变量值
      y - 因变量值
    • addData

      public void addData(double[][] data) throws MathIllegalArgumentException
      添加由data中的元素表示的观测值。

      (data[0][0],data[0][1])将是第一个观测值,然后是(data[1][0],data[1][1]),依此类推。

      此方法不会替换已添加的数据。由data表示的观测值将添加到现有数据集中。

      要替换所有数据,请在添加新数据之前使用clear()

      参数:
      data - 要添加的观测值数组
      抛出:
      MathIllegalArgumentException - 如果data[i]的长度小于或等于2
    • addObservation

      public void addObservation(double[] x, double y) throws MathIllegalArgumentException
      向回归模型添加一个观测值。
      指定者:
      addObservation 在接口中 UpdatingMultipleLinearRegression
      参数:
      x - 构成设计矩阵的自变量
      y - 因变量或响应变量
      抛出:
      MathIllegalArgumentException - 如果x的长度与模型中的自变量数量不相等
    • addObservations

      public void addObservations(double[][] x, double[] y) throws MathIllegalArgumentException
      向回归模型中添加一系列观测。x和y的长度必须相同,x必须是矩形的。
      指定者:
      addObservations 在接口中 UpdatingMultipleLinearRegression
      参数:
      x - 自变量的一系列观测
      y - 因变量的一系列观测 x和y的长度必须相同
      抛出:
      MathIllegalArgumentException - 如果x不是矩形的,与y的长度不匹配,或者不包含足够的数据来估计模型
    • removeData

      public void removeData(double[][] data)
      删除由data中的元素表示的观测。

      如果数组大于当前n,则只处理前n个元素。此方法允许在流模式下使用SimpleRegression实例,其中回归应用于滑动的观测“窗口”,但调用方负责维护窗口中的观测集。

      要删除所有数据,请使用clear()

      参数:
      data - 要删除的观测数组
    • clear

      public void clear()
      清除模型中的所有数据。
      指定者:
      clear 在接口中 UpdatingMultipleLinearRegression
    • getN

      public long getN()
      返回已添加到模型中的观测数量。
      指定者:
      getN 在接口中 UpdatingMultipleLinearRegression
      返回:
      已添加的观测数量
    • predict

      public double predict(double x)
      返回与提供的x值相关联的“预测”y值,基于在激活此方法时添加到模型的数据。

      predict(x) = intercept + slope * x

      * 前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double,NaN
      参数:
      x - 输入x
      返回:
      预测的y
    • getIntercept

      public double getIntercept()
      返回估计回归线的截距,如果hasIntercept()为true;否则为0。

      使用正规方程计算截距的最小二乘估计。截距有时表示为b0。

      前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double,NaN
      返回:
      如果模型包括截距,则返回回归线的截距;否则返回0
      另请参阅:
    • hasIntercept

      public boolean hasIntercept()
      如果模型包括截距项,则返回true。
      指定者:
      hasIntercept 在接口中 UpdatingMultipleLinearRegression
      返回:
      如果回归包括截距,则返回true;否则返回false
      另请参阅:
    • getSlope

      public double getSlope()
      返回估计回归线的斜率。

      使用正规方程计算斜率的最小二乘估计。斜率有时表示为b1。

      * 前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double.NaN
      返回:
      回归线的斜率
    • getSumSquaredErrors

      public double getSumSquaredErrors()
      返回与回归模型相关联的平方误差和(SSE)。

      使用计算公式计算总和

      SSE = SYY - (SXY * SXY / SXX)

      其中SYY是y值关于其均值的平方偏差的总和,SXX类似定义,SXY是x和y均值偏差的乘积总和。

      使用addData(double, double)中引用的更新算法累积总和。

      返回值受限于非负 - 即,如果由于舍入误差计算公式返回负结果,则返回0。

      * 前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double,NaN
      返回:
      与回归模型相关联的平方误差和
    • getTotalSumSquares

      public double getTotalSumSquares()
      返回y值关于其均值的平方偏差和。

      这里定义。

      如果n < 2,则返回Double.NaN

      返回:
      y值的平方偏差和
    • getXSumSquares

      public double getXSumSquares()
      返回x值关于其均值的平方偏差和。

      如果n < 2,则返回Double.NaN

      返回:
      x值的平方偏差和
    • getSumOfCrossProducts

      public double getSumOfCrossProducts()
      返回交叉乘积的总和,xi*yi
      返回:
      交叉乘积的总和
    • getRegressionSumSquares

      public double getRegressionSumSquares()
      返回预测y值关于其均值(等于y的均值)的平方偏差和。

      通常缩写为SSR或SSM。在这里定义

      * 前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double.NaN
      返回:
      预测y值的平方偏差和
    • getMeanSquareError

      public double getMeanSquareError()
      返回平方误差和除以自由度,通常缩写为MSE的一半宽度。

      如果模型中的数据对少于对数据,或者x中没有变化,则返回Double.NaN

      返回:
      y值的平方偏差和
    • getR

      public double getR()
      返回皮尔逊积矩相关系数,通常表示为r。

      * 前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double,NaN
      返回:
      皮尔逊r
    • getRSquare

      public double getRSquare()
      返回判定系数,通常表示为r-square。

      * 前提条件:

      • 在调用此方法之前,必须添加至少两个观测(至少具有两个不同的x值)。如果在可以估计模型之前调用此方法,则返回Double,NaN
      返回:
      r-square
    • getInterceptStdErr

      public double getInterceptStdErr()
      返回截距估计的标准误差,通常表示为s(b0)。

      如果模型中的观测少于个,或者x中没有变化,则返回Double.NaN。此外,当截距被约束为零时,也会返回Double.NaN

      返回:
      与截距估计相关的标准误差
    • getSlopeStdErr

      public double getSlopeStdErr()
      返回斜率估计的标准误差,通常表示为s(b1)。

      如果模型中的数据对少于对数据,或者x中没有变化,则返回Double.NaN

      返回:
      与斜率估计相关的标准误差
    • getSlopeConfidenceInterval

      public double getSlopeConfidenceInterval() throws MathIllegalArgumentException
      返回斜率估计的95%置信区间的半宽度。

      95%置信区间为

      (getSlope() - getSlopeConfidenceInterval(), getSlope() + getSlopeConfidenceInterval())

      如果模型中的数据对少于对数据,或者x中没有变化,则返回Double.NaN

      * 使用注意:

      此统计量的有效性取决于假设模型中的观测值来自双变量正态分布

      返回:
      斜率估计的95%置信区间的半宽度
      抛出:
      MathIllegalArgumentException - 如果无法计算置信区间。
    • getSlopeConfidenceInterval

      public double getSlopeConfidenceInterval(double alpha) throws MathIllegalArgumentException
      返回斜率估计的(100-100*alpha)%置信区间的半宽度。

      (100-100*alpha)%的置信区间为

      (getSlope() - getSlopeConfidenceInterval(), getSlope() + getSlopeConfidenceInterval())

      例如,要请求99%的置信区间,请使用alpha = .01

      使用注意:
      此统计量的有效性取决于模型中包含的观测值是否来自双变量正态分布

      前提条件:

      • 如果模型中的观测值少于三个,或者x没有变化,则返回Double.NaN
      • (0 < alpha < 1);否则将抛出MathIllegalArgumentException
      参数:
      alpha - 所需的显著水平
      返回:
      斜率估计的95%置信区间的半宽度
      抛出:
      MathIllegalArgumentException - 如果无法计算置信区间。
    • getSignificance

      public double getSignificance()
      返回斜率(equiv)相关性的显著水平。

      具体来说,返回的值是最小的alpha,使得显著水平等于alpha的斜率置信区间不包括0。在回归输出中,这通常表示为Prob(|t| > 0)

      使用注意:
      此统计量的有效性取决于模型中包含的观测值是否来自双变量正态分布

      如果模型中的观测值少于三个,或者x没有变化,则返回Double.NaN

      返回:
      斜率/相关性的显著水平
      抛出:
      MathIllegalStateException - 如果无法计算显著水平。
    • regress

      对缓冲区中的数据执行回归,并输出一个RegressionResults对象。

      如果模型中的观测值少于3个且hasIntercept为true,则会抛出MathIllegalArgumentException。如果没有截距项,则模型必须至少包含2个观测值。

      指定者:
      regress 在接口中 UpdatingMultipleLinearRegression
      返回:
      RegressionResults充当回归输出的容器
      抛出:
      MathIllegalArgumentException - 如果模型未正确指定
      MathIllegalArgumentException - 如果模型中的数据不足以估计回归参数
    • regress

      public RegressionResults regress(int[] variablesToInclude) throws MathIllegalArgumentException
      对缓冲区中的数据执行回归,仅包括在variablesToInclude中索引的回归变量,并输出一个RegressionResults对象
      指定者:
      regress 在接口中 UpdatingMultipleLinearRegression
      参数:
      variablesToInclude - 要包括的回归变量的索引数组
      返回:
      RegressionResults充当回归输出的容器
      抛出:
      MathIllegalArgumentException - 如果variablesToInclude数组为null或长度为零
      MathIllegalArgumentException - 如果请求的变量在模型中不存在