java - 如何从 OLSMultipleLinearRegression 获取 T-Stat 和 P-Value

标签 java linear-regression p-value

使用示例中的以下代码...我如何获得您会在 Excel 等输出中找到的 p 值和 t-stat?

  OLSMultipleLinearRegression regression2 = new OLSMultipleLinearRegression();
  double[] y = { 4, 8, 13, 18};
  double[][] x = {{ 1, 1, 1  },
                  { 1, 2, 4  },
                  { 1, 3, 9  },
                  { 1, 4, 16  }};

  regression2.newSampleData(y, x);
  regression2.setNoIntercept(true);
  double[] beta = regression2.estimateRegressionParameters();

  for (double d : beta) {
     System.out.println("D: " + d);
  }

发布这个问题后,我解决了 t-stat 部分:

  for (int i=0; i < beta.length; i++){
     double tstat = beta[i] / regression.estimateRegressionParametersStandardErrors()[i];
     System.out.println("t-stats(" +i +") : " +tstat );
  }

最佳答案

  int residualdf = regression.estimateResiduals().length-beta.length;
  for (int i=0; i < beta.length; i++){
     double tstat = beta[i] / regression.estimateRegressionParametersStandardErrors()[i];

     double pvalue = new TDistribution(residualdf).cumulativeProbability(-FastMath.abs(tstat))*2;

     System.out.println("p-value(" +i +") : " +pvalue );
  }

这将为您提供 p 值。无论如何它都没有优化,但值与 excel 完美匹配。

我已将我的代码更新为以下内容以解决评论问题。它与 Excel 匹配。

      final double[] beta = regression.estimateRegressionParameters();
  final double[] standardErrors = regression.estimateRegressionParametersStandardErrors();
  final int residualdf = regression.estimateResiduals().length - beta.length;

  final TDistribution tdistribution = new TDistribution(residualdf);

  //calculate p-value and create coefficient
  final Map<RegressionCoefficientNames, RegressionCoefficient> coefficientMap = new HashMap<>(beta.length);
  for (int i = 0; i < beta.length; i++)
  {
     double tstat = beta[i] / standardErrors[i];
     double pvalue = tdistribution.cumulativeProbability(-FastMath.abs(tstat)) * 2;
     final RegressionCoefficient coefficient = new RegressionCoefficient(extensionModelType.getNameByIndex(i),
                                                                         beta[i],
                                                                         standardErrors[i],
                                                                         tstat,
                                                                         pvalue);

     coefficientMap.put(extensionModelType.getNameByIndex(i), coefficient);
  }

这是改进后的代码。我在匹配

class RegressionCoefficient {
    private final RegressionCoefficientNames valueName;
    private final Double coefficient;
    private final Double standardError;
    private final Double tStat;
    private final Double pValue;
}

关于java - 如何从 OLSMultipleLinearRegression 获取 T-Stat 和 P-Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33638170/

相关文章:

r - 在表格中呈现 Tukey HSD 成对 p 值

r - 使用 p 值的逐步回归删除 p 值不显着的变量

java - 使用堆栈的二叉搜索树的中序树遍历算法

python - scikit-learn 是否执行 "real"多元回归(多个因变量)?

岭回归 - 如何从 ridgelm 对​​象创建 lm 对象

python - 你能找出这个关于线性回归的正规方程实现的程序有什么问题吗

java - z 分数和 Java 中的 p 值(生存函数)

java - 测试 PostgreSQL 中的任何相关行

java - 如何在Reducer中导入BigInteger Writable?

java - 获取 Java lambda 表达式的封闭类