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