[TOC]
一个例子
约翰逊过滤股份公司对遍布南佛罗里达州的水过滤系统提供维修保养服务。当顾客的水过滤系统出现故障时,他们就要与约翰逊公司进行联系,请求公司对他们的水过滤系统进行维修。为了估计服务时间和服务成本,约翰逊公司的管理人员希望对顾客的每一次维修请求预测必要的维修时间。所以,按小时计算的维修时间是因变量。管理人员认为,维修时间依赖两个因素:从最近一次维修服务至今水过滤系统已经使用的时间和需要维修的故障类型。由10次维修服务组成一个样本,有关资料数据如下1:
维修服务请求 | 最近一次维修服务至今的时间(x1) | 维修的故障类型(x2) | 维修时间(y1) |
---|---|---|---|
1 | 2 | 1 | 2.9 |
2 | 6 | 0 | 3.0 |
3 | 8 | 1 | 4.8 |
4 | 3 | 0 | 1.8 |
5 | 2 | 1 | 2.9 |
6 | 7 | 1 | 4.9 |
7 | 9 | 0 | 4.2 |
8 | 8 | 0 | 4.8 |
9 | 4 | 1 | 4.4 |
10 | 6 | 1 | 4.5 |
分析计算
我们计算利用的工具是Apache Commons Math2:
准备数据
OLSMultipleLinearRegression oregression = new OLSMultipleLinearRegression();
double[] y = new double[]{2.9, 3.0, 4.8, 1.8, 2.9,4.9,4.2,4.8,4.4,4.5};
double[][] x = new double[10][2];
x[0] = new double[]{2, 1};
x[1] = new double[]{6, 0};
x[2] = new double[]{8, 1};
x[3] = new double[]{3, 0};
x[4] = new double[]{2, 1};
x[5] = new double[]{7, 1};
x[6] = new double[]{9, 0};
x[7] = new double[]{8, 0};
x[8] = new double[]{4, 1};
x[9] = new double[]{6, 1};
y
代表的是维修时间,为因变量;二维数组x代表最近一次维修服务至今的时间和故障类型,为自变量,其中数字10 表示维修服务的请求次数,也即样本的数量,数字2表示自变量的个数(这里例子中有2个变量:x1,x2),每个一维数组对应一组自变量的值。
计算
oregression.newSampleData(y, x);
查看结果
模型参数
double[] beta = oregression.estimateRegressionParameters();
for (double d : beta) {
System.out.println(d);
}
打印的结果:
0.9304953560371505
0.38761609907120753
1.2626934984520124
数组beta中的值按顺序依次代表回归方程中的常量、x1系数、x2系数,因此,最终的回归方程为:
该方程的标准差S:
double s = oregression.estimateRegressionStandardError();
判定系数R2:
double rSquared = oregression.calculateRSquared();
参考
<div id="refer-anchor-1"></div>- [1] 《商务与经济统计》<div id="refer-anchor-2"></div>
<div id="refer-anchor-2"></div>- [2] http://commons.apache.org/proper/commons-math/userguide/stat.html#a1.4_Simple_regression<div id="refer-anchor-2"></div>