Множественная линейная регрессия - определение коэффициентов для 3 независимых переменных - PullRequest
0 голосов
/ 30 ноября 2018

Я изо всех сил пытаюсь найти коэффициенты для b1, b2 и b3.Моя модель имеет 3 независимые переменные x1, x2 и x3 и одну зависимую переменную y.

x1,x2,x3,y
89,4,3.84,7
66,1,3.19,5.4
78,3,3.78,6.6
111,6,3.89,7.4
44,1,3.57,4.8
77,3,3.57,6.4
80,3,3.03,7
66,2,3.51,5.6
109,5,3.54,7.3
76,3,3.25,6.4

Я хочу использовать матричный метод, чтобы узнать коэффициенты для b1, b2 и b3.Из учебника, за которым я следую, значение для b1 равно 0,0141, b2 равно 0,383 и b3 равно -0,607.

Я не уверен в том, как достичь тех значений, которые упомянуты выше, когда я пытался инвертировать матрицу, содержащую значения x1, x2, x3, я получаю приведенную ниже ошибку.

raise LinAlgError('Last 2 dimensions of the array must be square')
numpy.linalg.linalg.LinAlgError: Last 2 dimensions of the array must be square

Пожалуйста,кто-то поможет мне решить эту матрицу, чтобы я мог получить желаемые значения.

1 Ответ

0 голосов
/ 21 марта 2019

В матричной форме коэффициенты регрессии задаются как

enter image description here

Где x - ваша матрица данных предикторов, а y -вектор значений результатов

В python (numpy) это выглядит примерно так:

import numpy as np

b = np.dot(x.T, x)
b = np.linalg.inv(b)
b = np.dot(b, x.T)
b = np.dot(b, y)

Используя это в ваших данных, вы получите следующие коэффициенты:

0.0589514 , -0.25211869,  0.70097577

Эти значения не соответствуют ожидаемому результату, и это потому, что учебник, которому вы следуете, должен также моделировать перехват.Для этого мы добавляем столбец единиц в матрицу данных, чтобы он выглядел следующим образом:

x.insert(loc=0, column='x0', value=np.ones(10))

    x0   x1  x2    x3
0  1.0   89   4  3.84
1  1.0   66   1  3.19
2  1.0   78   3  3.78
3  1.0  111   6  3.89
4  1.0   44   1  3.57
5  1.0   77   3  3.57
6  1.0   80   3  3.03
7  1.0   66   2  3.51
8  1.0  109   5  3.54
9  1.0   76   3  3.25

Теперь мы получаем ожидаемые коэффициенты регрессии (плюс дополнительное значение для перехвата):

6.21137766,  0.01412189,  0.38315024, -0.60655271
...