R: Завершение цикла из-за инвертирования матрицы

#r #gam #lasso-regression #regularized

Вопрос:

Я пытаюсь воспроизвести результаты Ван и Ся (2009), используя R, и у меня есть следующий цикл:

 B #  'initialization'. Matrix of estimates based on Varying Coefficient Model
a = c(seq(0,1,length = 50), seq(2,100, length = 10))
all_B = list()

for(i in 1:length(a)){
  tol = 1e-6
  itr = 0
  Bhat_old = B
  lambdaj  = a/ n**(-0.5)/apply(B, 2, euclidean)
   
 repeat{

    itr = itr   1
    Bhat_new = My_fn(Bhat_old,x,y,z,lambdaj)

    criterion = max(abs(Bhat_new - Bhat_old))
    if(criterion < tol) break 

    Bhat_old = Bhat_new
  }
  all_B[[i]] = Bhat_new
  
}
 

где euclidean и My_fn являются функциями для вычисления евклидова расстояния и новых оценок соответственно. z является переменной индекса.

Моя проблема в том, что My_fn требуется вычислить обратную некоторую матрицу. Иногда после нескольких итераций я получаю следующую ошибку

система вычислительно сингулярна: число взаимных условий = 0

Я ввел аргумент tol = 1e-20 solve() , но все равно получаю ту же ошибку. Я добавил небольшое число, 1e-4 , к диагонали матрицы, которую нужно перевернуть, но это тоже не помогло.

Я хотел бы сделать одно из следующих действий:

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