MS-Excel在Java中的Linest函数
我正在开发一个Java应用程序,需要在MS Excel中使用Linest函数。我花了很多时间,但找不到合适的答案。如果有人知道这件事,请一定告诉我。。。非常感谢。看看哪些可以用来做简单的线性回归。例如:MS-Excel在Java中的Linest函数,java,excel,Java,Excel,我正在开发一个Java应用程序,需要在MS Excel中使用Linest函数。我花了很多时间,但找不到合适的答案。如果有人知道这件事,请一定告诉我。。。非常感谢。看看哪些可以用来做简单的线性回归。例如: import org.apache.commons.math3.stat.regression.SimpleRegression; public class Test { public static void main(String[] args) { double[
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");
}
}
终于找到了答案。可以使用JAMA库计算与Excel完全相同的Linest。请参阅下面的链接。。
我知道您正在寻找一个用Java编码的答案,但是这里是一个用C实现的Excel的LINEST函数,没有库依赖项。它返回给定数据集的斜率,使用与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;
}
由于这些方法只适用于一组数据,如果希望生成多组线性回归数据,我建议在循环内部调用它们
这个链接帮助我找到了我的答案:你想要的信息是Hi,谢谢你的回复,但公式给出的答案与第一多项式的excels Linest的答案不同。厄立特里亚人,谢谢你的回复,SimpleRegression只给出了斜率和截距值。我需要的是与Excel中相同的Linest输出。
private double CalculateYIntercept(double[] x, double[] y, double linest)
{
return (y.Average() - linest * x.Average());
}