Я пытаюсь вычислить обратную матрицу формы X'X, используя NumPy следующим образом.
df = pd.read_csv('https://raw.githubusercontent.com/jianghaochu/data/master/x.csv')
X = np.array(df)
X.shape # returns (92, 18)
np.linalg.det(np.matmul(X.transpose(), X)) # returns 8.029863818629298
np.linalg.matrix_rank(np.matmul(X.transpose(), X)) # returns 17
Меня смущает то, что X'X имеет не полный ранг, а определитель положительный, и NumPy может успешно рассчитать обратное значение X'X. Однако, если я возьму другую матрицу Y, которая образована подмножеством столбцов X, детерминант становится равным нулю, и обратное вычисление не может быть вычислено.
Y = X[:, [0, 12, 13, 14, 15, 16, 17]]
Y.shape # returns (92, 7)
np.linalg.det(np.matmul(Y.transpose(), Y)) # returns 0.0
np.linalg.matrix_rank(np.matmul(Y.transpose(), Y)) # returns 16
np.linalg.inv(np.matmul(Y.transpose(), Y)) # numpy.linalg.LinAlgError: Singular matrix
numpy .linalg .LinAlgError: Сингулярная матрица
На мой взгляд, столбцы Y линейно зависимы. Следовательно, Y'Y сингулярен, а его определитель равен нулю. Добавление большего числа столбцов в Y (как в X) не должно приводить к линейной независимости. Следовательно, я не могу понять, как NumPy может вычислить обратное значение X'X, если Y'Y является единственным.
Я вычисляю оценку OLS, используя приведенные выше данные. Когда я использую столбцы (переменные) в Y, я получаю единственную ошибку, которая, как я полагаю, обусловлена совершенной коллинеарностью независимых переменных. Когда я добавляю больше независимых переменных в модель и получаю матрицу как X, я могу успешно получить оценку, используя NumPy. Это действительно смущает меня, так как предполагает, что добавление большего количества независимых переменных может решить идеальную коллинеарность, которая действительно поражает мою голову.
Я боролся с этим весь день и вечер, но все еще не могу понять. Я также попробовал это в R и получил тот же результат. Я надеюсь, что кто-то может направить меня в некоторых новых направлениях. Любые предложения будут оценены.