Math. Net Множественная регрессия неверна после 4-х независимых переменных - PullRequest
0 голосов
/ 02 марта 2020

Я могу сгенерировать правильный перехват и коэффициенты для множественной регрессии (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

Это правильно.

Однако, если я запускаю тот же код, но добавляю 4-ю независимую переменную как таковую:

        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

Эти числа нигде близко не быть правильным.

Если кто-нибудь может дать какое-либо указание относительно того, что я делаю неправильно, я был бы очень признателен. ТИА

1 Ответ

0 голосов
/ 04 марта 2020

Я не проработал математические детали, но, глядя на вашу задачу, из шести наблюдений три (g (3), g (4), g (5)) имеют одинаковые независимые переменные и соответствующие значения зависимой переменной имеют самые высокие, средние и самые низкие значения. Таким образом, эти наблюдения не имеют никакой реальной прогностической ценности. По сути, вы пытаетесь оценить 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
...