需要引入的依赖:
<!--Java时间序列预测(ARIMA)-->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
工具类实现:
/**
*
* @Author ljy
* @Description
* @Date 13:52 2023/9/26
* @param data 横纵坐标数据
* @param year 要预估的年份
* @return java.lang.Double
**/
public static Double linearFit(double[][] data, int year) {
SimpleRegression regression = new SimpleRegression();
//导入原始数据集
regression.addData(data);
//使用回归结果类接受数据
RegressionResults results = regression.regress();
//按照序号获取估计参数
DecimalFormat df = new DecimalFormat("#0.0000");
double b = results.getParameterEstimate(0);
double k = results.getParameterEstimate(1);
//保留精度
b = Double.parseDouble(df.format(b));
k = Double.parseDouble(df.format(k));
/* StringBuilder func = new StringBuilder();
func.append("f(x) =");
func.append(b >= 0 ? " " : " - ");
func.append(Math.abs(b));
func.append(k > 0 ? " + " : " - ");
func.append(Math.abs(k));
func.append("x");*/
return BigDecimal.valueOf(year * k + b).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}