Мне нужно выполнить регрессию OLS на Python с использованием numpy и матричной алгебры.
Я использовал следующий код:
Код: Выделить всё
import numpy as np
coeff = np.linalg.inv(X.T@X)@X.T@y
где X — матрица независимых переменных, а y — вектор зависимых переменных.
Я сравнил эти результаты с оценками, полученными с помощью статистических моделей OLS, следующим образом:
Код: Выделить всё
import numpy as np
import statsmodels.api as sm
model = sm.OLS(y, X)
results = model.fit()
coeff = results.params
По какой-то причине я получаю разные результаты, и мне интересно, почему. Я также пытался написать форму матричной алгебры по-другому, но, похоже, она всегда дает другие результаты, чем статистические модели OLS.
Вот пример, который приводит к другим результатам:
Код: Выделить всё
data = np.array([
[1, 2, 3, 14],
[2, 4, 5, 25],
[3, 6, 7, 36],
[4, 8, 9, 47],
[5, 10, 11, 58]
])
# Independent variables (X) - First three columns
X = data[:, :-1]
# Dependent variable (Y) - Last column
y = data[:, -1]
statsmodels OLS создает вектор коэффициентов, в то время как форма матричной алгебры приводит к ошибке, поскольку матрица X.T@X не является обратимой. Фактический набор данных, для которого мне нужен подход матричной алгебры, значительно больше, поэтому я предпочел включить этот меньший пример. В моем конкретном случае матрица X.T@X является обратимой, но коэффициенты значительно отличаются от коэффициентов OLS статистических моделей. Я предполагаю, что это зависит от обратного X.T@X и другой процедуры оценки коэффициентов между двумя подходами, отсюда и мой вопрос.
Подробнее здесь:
https://stackoverflow.com/questions/766 ... ix-algebra