R: исследование сингулярного градиента в нелинейной регрессии

library(nls2)
# Investigate singular gradient.
# Note that this cannot be done with nls since the singular gradient at
# the initial conditions would stop it with an error.
DF1 <- data.frame(y=1:9, one=rep(1,9))
xx <- nls2(y~(a+2*b)*one, DF1, start = c(a=1, b=1), algorithm = "brute-force")
svd(xx$m$Rmat())[-2]

Я играю с пакетом nls2, который определяет нелинейные оценки методом наименьших квадратов для нелинейной регрессии. В документации один из примеров (показанных выше) отмечает, что он исследует сингулярный градиент. Я вижу, что xx — это объект nls, у которого нет оценок параметров. Означает ли это, что алгоритм не сошелся? Почему это? И что именно делает svd(xx$m$Rmat())[-2]?


person Adrian    schedule 26.06.2017    source источник


Ответы (1)


Для грубой силы не существует понятия сходимости. Он просто оценивает целевую функцию по заданному начальному значению или значениям и возвращает объект или объекты nls в зависимости от конкретных аргументов. Подробнее см. ?nls2.

Обычно он используется для получения начальных значений для ввода в nls или другую функцию оптимизации, для исследования сингулярных значений (поскольку nls подавляет их, а nls2 нет) или просто оценивает nls целевую функцию при известных значениях.

Поскольку пример из документации, воспроизведенный в вопросе, дал nls2 одно начальное значение, он оценил цель по этому единственному значению и вернул. Оценки параметра — это просто значения параметра, при которых он был оценен, а именно начальное значение.

> coef(xx)
a b 
1 1 

xx$m$Rmat() — это матрица, вектор сингулярных значений которой содержит хотя бы один нуль, если задача сингулярна в вычисляемой точке. Функция R svd(...) возвращает список, в котором компонент d является вектором сингулярных значений, а u и v являются следующими двумя компонентами, где v является собственным вектором. Вы здесь нас не интересуете, поэтому [-2] было использовано, чтобы опустить его.

Для этого конкретного случая мы видим, что второе сингулярное значение равно нулю:

s <- sv(xx$m$Rmat)
s$d
## [1] 6.708204 0.000000

и соответствует собственному вектору

v2 <- s$v[, 2]; v2
## [1] -0.8944272  0.4472136

и поскольку собственные векторы определяются только до скалярного кратного, это то же самое, что:

v2/v2[2]
## [1] -2  1

что является направлением сингулярности в текущей точке оценки. В этом случае добавление любого кратного (-2, 1) к (1, 1) дает правую шкалу, идентичную по значению правой части в точке (1, 1), поэтому она явно сингулярна в этом направлении. В этом случае он проще общего случая из-за линейности RHS, но работает аналогично относительно касательного пространства, т.е. бесконечно мало, для нелинейных целевых функций.

person G. Grothendieck    schedule 26.06.2017