R Решение больших разреженных неквадратных матриц

Я пытаюсь решить проблему разреженной матрицы с большой линейной регрессией. Я создал две матрицы следующим образом:

> dim(A)
[1] 26573 32991

> dim(B)
[1] 26573     1

Если я использую matrixmodels lm.fit.sparse, я получаю следующую ошибку:

> X=MatrixModels:::lm.fit.sparse(A,B)
Error in .solve.dgC.qr(if (cld@className %in% c("dtCMatrix", "dgCMatrix")) x else as(x,  : dgCMatrix_qrsol(<26573 x 32991>-matrix) requires a 'tall' rectangular matrix

Что означает высокая матрица? Если я изменю B так, чтобы это была разреженная матрица:

[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"

и попробуйте решить снова, я получаю другую ошибку:

> X=MatrixModels:::lm.fit.sparse(A,B)
Error: is.numeric(y) is not TRUE

Кто-нибудь знает лучший способ решить эту проблему?

Большое спасибо,

1 ответ

У вас больше столбцов, чем строк. Таким образом, у вас матрица не "высокая", а "широкая" и не имеет полного ранга. lm.fit.sparse функция использует либо .solve.dgC.chol или же .solve.dgC.qr от Matrix пакет. Вы можете взглянуть на ?Matrix::solve,

Вам нужно использовать метод регуляризации или метод псевдообращения для решения проблемы (я настоятельно рекомендую первый). Кажется, ни один не доступен в MatrixModels пакет, хотя я могу ошибаться.

Другие вопросы по тегам