#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
, вместо того, чтобы выходить из моделирования.