类 OLSMultipleLinearRegression

java.lang.Object
org.hipparchus.stat.regression.AbstractMultipleLinearRegression
org.hipparchus.stat.regression.OLSMultipleLinearRegression
所有已实现的接口:
MultipleLinearRegression

public class OLSMultipleLinearRegression extends AbstractMultipleLinearRegression

实现普通最小二乘法(OLS)以估计多元线性回归模型的参数。

回归系数 b 满足正规方程:

 XT X b = XT y 

为了解正规方程,此实现使用 X 矩阵的QR分解。(有关分解算法的详细信息,请参见 QRDecomposition。)矩阵 X,也称为设计矩阵,其行对应于样本观测值,列对应于自变量。当使用截距项估计模型时(即当 isNoIntercept 为false时,默认情况下),矩阵 X 包括一个初始列,其值完全等于1。我们按以下方式解决正规方程:

 XTX b = XT y
 (QR)T (QR) b = (QR)Ty
 RT (QTQ) R b = RT QT y
 RT R b = RT QT y
 (RT)-1 RT R b = (RT)-1 RT QT y
 R b = QT y 

给定 QR,最后一个方程通过回代求解。

  • 构造器详细资料

    • OLSMultipleLinearRegression

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

      public OLSMultipleLinearRegression(double threshold)
      创建一个空的 OLSMultipleLinearRegression 实例,使用给定的奇异阈值进行QR分解。
      参数:
      threshold - 奇异阈值
  • 方法详细资料

    • newSampleData

      public void newSampleData(double[] y, double[][] x) throws MathIllegalArgumentException
      加载模型的x和y样本数据,覆盖任何先前的样本。计算并缓存X矩阵的QR分解。
      参数:
      y - 表示y样本的 [n,1] 数组
      x - 表示x样本的 [n,k] 数组
      抛出:
      MathIllegalArgumentException - 如果x和y数组数据与回归不兼容
    • newSampleData

      public void newSampleData(double[] data, int nobs, int nvars)

      从平面输入数组加载模型的x和y样本数据,覆盖任何先前的样本。

      假设行首先连接y值的行被连接。例如,包含值序列(1, 2, 3, 4, 5, 6, 7, 8, 9)的输入 data 数组,其中 nobs = 3nvars = 2 创建一个包含两个自变量的回归数据集,如下所示:

         y   x[0]  x[1]
         --------------
         1     2     3
         4     5     6
         7     8     9
       

      请注意,在指定包含截距项的模型时,无需添加初始单位列(全为1的列)。如果 AbstractMultipleLinearRegression.isNoIntercept()true,则X矩阵将创建为不包含初始列的“1”;否则将添加此列。

      如果以下任何前提条件失败,将抛出IllegalArgumentException:

      • data 不能为null
      • data.length = nobs * (nvars + 1)
      • nobs > nvars

      此实现计算并缓存X矩阵的QR分解。

      覆盖:
      newSampleData 在类中 AbstractMultipleLinearRegression
      参数:
      data - 输入数据数组
      nobs - 观测值数量(行数)
      nvars - 自变量数量(列数,不包括y)
    • calculateHat

      public RealMatrix calculateHat()

      计算“帽子”矩阵。

      帽子矩阵是通过设计矩阵X定义的,公式为 X(XTX)-1XT

      此处的实现使用QR分解来计算帽子矩阵,如 Q IpQT,其中 Ip 是p维单位矩阵,附加了0。这个计算公式来自于“回归和ANOVA中的帽子矩阵”,David C. Hoaglin 和 Roy E. Welsch,The American Statistician,Vol. 32, No. 1 (Feb., 1978),pp. 17-22。

      在调用此方法之前,模型的数据必须使用其中一个 newSampleData 方法成功加载;否则将抛出 NullPointerException

      返回:
      帽子矩阵
      抛出:
      NullPointerException - 除非先调用了方法 newSampleData
    • calculateTotalSumOfSquares

      public double calculateTotalSumOfSquares()

      返回Y值与其均值的平方偏差和。

      如果模型没有截距项,则使用0作为Y的均值 - 即返回的是Y值的平方和。

      此方法返回的值是在R平方计算中使用的SSTO值。

      返回:
      SSTO - 总平方和
      抛出:
      NullPointerException - 如果样本未设置
      另请参阅:
    • calculateResidualSumOfSquares

      public double calculateResidualSumOfSquares()
      返回残差平方和。
      返回:
      残差平方和
      抛出:
      MathIllegalArgumentException - 如果设计矩阵是奇异的
      NullPointerException - 如果模型的数据尚未加载
    • calculateRSquared

      public double calculateRSquared()
      返回R平方统计量,由公式 \(R^2 = 1 - \frac{\mathrm{SSR}}{\mathrm{SSTO}}\) 定义,其中SSR是残差平方和,SSTO是总平方和

      如果y中没有方差,即SSTO = 0,则返回NaN。

      返回:
      R平方统计量
      抛出:
      NullPointerException - 如果样本尚未设置
      MathIllegalArgumentException - 如果设计矩阵是奇异的
    • calculateAdjustedRSquared

      public double calculateAdjustedRSquared()

      返回调整后的R平方统计量,定义为公式 \(R_\mathrm{adj}^2 = 1 - \frac{\mathrm{SSR} (n - 1)}{\mathrm{SSTO} (n - p)}\),其中SSR是残差平方和,SSTO是总平方和,n是观测值的数量,p是估计的参数数量(包括截距)。

      如果回归是在没有截距项的情况下估计的,则返回的值为

        1 - (1 - calculateRSquared()) * (n / (n - p)) 
       

      如果y中没有方差,即SSTO = 0,则返回NaN。

      返回:
      调整后的R平方统计量
      抛出:
      NullPointerException - 如果样本尚未设置
      MathIllegalArgumentException - 如果设计矩阵是奇异的
      另请参阅:
    • newXSampleData

      protected void newXSampleData(double[][] x)

      加载新的x样本数据,覆盖任何先前的数据。

      输入的x数组应该为每个样本观测值的一行,列对应于自变量。例如,如果

        x = new double[][] {{1, 2}, {3, 4}, {5, 6}} 

      那么setXSampleData(x) 会得到一个具有两个自变量和3个观测值的模型:

         x[0]  x[1]
         ----------
           1    2
           3    4
           5    6
       

      请注意,在指定包括截距项的模型时,无需添加初始的单位列(1列)。

      一旦成功加载,此实现会计算并缓存X矩阵的QR分解。

      覆盖:
      newXSampleData 在类中 AbstractMultipleLinearRegression
      参数:
      x - 表示x样本的矩形数组
    • calculateBeta

      protected RealVector calculateBeta()
      计算OLS使用的回归系数。

      在调用此方法之前,必须使用newSampleData方法之一成功加载模型的数据;否则将抛出NullPointerException

      指定者:
      calculateBeta 在类中 AbstractMultipleLinearRegression
      返回:
      beta
      抛出:
      MathIllegalArgumentException - 如果设计矩阵是奇异的
      NullPointerException - 如果尚未加载模型的数据
    • calculateBetaVariance

      protected RealMatrix calculateBetaVariance()

      计算回归参数的方差-协方差矩阵。

      Var(b) = (XTX)-1

      使用QR分解将(XTX)-1减少为(RTR)-1,只包括R的前p行,其中p = beta向量的长度。

      在调用此方法之前,必须使用newSampleData方法之一成功加载模型的数据;否则将抛出NullPointerException

      指定者:
      calculateBetaVariance 在类中 AbstractMultipleLinearRegression
      返回:
      beta方差-协方差矩阵
      抛出:
      MathIllegalArgumentException - 如果设计矩阵是奇异的
      NullPointerException - 如果尚未加载模型的数据