第四个独立变量之后的Math.Net多元回归是错误的



我能够为最多三个自变量的多元回归(Math.Net(生成正确的截距和系数。然而,一旦添加了第四个自变量,返回的值现在就接近了。

使用此代码:

Dim i As Integer
Dim g(5)() As Double
g(0) = {1.0, 4.0, 3.2}
g(1) = {2.0, 5.0, 4.1}
g(2) = {3.0, 2.0, 2.5}
g(3) = {4.0, 3.0, 1.6}
g(4) = {4.0, 3.0, 1.6}
Dim d As Double() = {3.5, 5.6, 1.2, 15.2, 3.4, 4.2}
Dim p As Double() = MultipleRegression.QR(Of Double)(g, d, intercept:=True)
For i = 0 To UBound(p)
Debug.WriteLine(p(i))
Next

我得到:

-2.45972222222223
1.13194444444445
3.11805555555555
-2.38888888888889

这些都是正确的。

然而,如果我运行相同的代码,但添加了第四个自变量:

Dim i As Integer
Dim g(5)() As Double
g(0) = {1.0, 4.0, 3.2, 5.3}
g(1) = {2.0, 5.0, 4.1, 2.4}
g(2) = {3.0, 2.0, 2.5, 3.6}
g(3) = {4.0, 3.0, 1.6, 2.1}
g(4) = {4.0, 3.0, 1.6, 2.1}
g(5) = {4.0, 3.0, 1.6, 2.1}
Dim d As Double() = {3.5, 5.6, 1.2, 15.2, 3.4, 4.2}
Dim p As Double() = MultipleRegression.QR(Of Double)(g, d, intercept:=True)
For i = 0 To UBound(p)
Debug.WriteLine(p(i))
Next

我得到:

6.88018203734109E+17
-9.8476516475107E+16
-3.19472310972754E+16
-4.61094057074081E+16
-5.92835216238101E+16

这些数字远非正确。

如果有人能就我做错了什么提供任何指导,我将不胜感激。TIA-

我还没有计算出数学细节,但直观地看一下你的问题,在六个观测值中,有三个(g(3(、g(4(、g。所以这些观察结果没有任何实际的预测价值。实际上,您正试图根据三个观测值来估计5个值。这样做效果不好,会导致数学不稳定。

我稍微更改了您的数据,它会返回更好的值。(我使用C#(。问题出在数据上,而不是程序上。

double[][] g = new double [6][];
g[0] = new double[4] { 1.0, 4.0, 3.2, 5.3};
g[1] = new double[4] { 2.0, 5.0, 4.1, 2.4};
g[2] = new double[4] { 3.0, 2.0, 2.5, 3.6};
g[3] = new double[4] { 4.0, 3.0, 1.6, 2.12};
g[4] = new double[4] { 4.0, 3.0, 1.6, 2.11};
g[5] = new double[4] { 4.0, 3.0, 1.6, 2.1};
double[] d = new double[6] { 3.5, 5.6, 1.2, 15.2, 3.4, 4.2 };
var p = MultipleRegression.QR(g, d, true);
for (int i = 0; i < p.Length; i++) Console.WriteLine(p[i].ToString());

返回:

-6386.81388888898
913.902777777791
297.597222222225
428.444444444452
550.000000000007

最新更新