MS Excel在Java中的Linest函数

时间:2017-07-20 11:55:25

标签: java excel

我正在开发一个Java应用程序,我需要使用" Linest"在MS Excel中运行。我花了很多时间,但找不到合适的答案。如果有人对此有所了解,请告诉我......非常感谢提前。

3 个答案:

答案 0 :(得分:1)

查看可用于进行简单线性回归的Apache Commons Math SimpleRegression。示例:

import org.apache.commons.math3.stat.regression.SimpleRegression;

public class Test {

    public static void main(String[] args) {
        double[][] data = { {1, 3}, {2, 7.9}, {3, 8}, {4, 9.2 }, {4.5, 12}, {5, 10.5}, {6, 15}};
        SimpleRegression regression = new SimpleRegression();
        regression.addData(data);
        System.out.println("y = "+ regression.getIntercept() + " + " + regression.getSlope() + " * x");
    } 
}

答案 1 :(得分:0)

终于找到了答案。您可以使用JAMA库计算与Excel完全相同的Linest。请参考以下链接.. http://algs4.cs.princeton.edu/14analysis/PolynomialRegression.java.html

答案 2 :(得分:0)

我知道您正在寻找使用Java编码的答案,但是这是Excel的LINEST()函数在C#中的实现,没有具有库依赖性。它返回给定数据集的斜率,并使用与LINEST()使用的“最小二乘法”相同的方法进行归一化:

public static double CalculateLinest(double[] y, double[] x)
{
   double linest = 0;
   if (y.Length == x.Length)
   {
      double avgY = y.Average();
      double avgX = x.Average();
      double[] dividend = new double[y.Length];
      double[] divisor = new double[y.Length];
      for (int i = 0; i < y.Length; i++)
      {
         dividend[i] = (x[i] - avgX) * (y[i] - avgY);
         divisor[i] = Math.Pow((x[i] - avgX), 2);
      }
      linest = dividend.Sum() / divisor.Sum();
   }
   return linest;
}

此外,这是我写的一种获取Excel的LINEST函数生成的“ b”(y轴截距)值的方法。

private double CalculateYIntercept(double[] x, double[] y, double linest)
{
    return (y.Average() - linest * x.Average());
}

由于这些方法仅适用于一组数据,因此,如果您希望生成多组线性回归数据,则建议在循环内调用它们。

此链接帮助我找到了答案:https://agrawalreetesh.blogspot.com/2011/11/how-to-calculate-linest-of-given.html