Работа с ошибкой 0 в скрипте nls - R - PullRequest
2 голосов
/ 20 августа 2011

Можно ли как-нибудь разрешить моим nls иметь 0 остаточных ошибок при нелинейном подборе?У меня в моих данных есть случаи, когда в произведенной подгонке должно быть 0 ошибок, но nls всегда дает сбой и выдает ошибку.

Может кто-нибудь показать мне:

  1. Как проверить, еслиэто ошибка выкладывается nls?
  2. Как учесть 0 ошибок?(Идеально подходит)

Это мой звонок NLS:

fit <- nls(y ~ ifelse(g, m1 * (x - x0) + y0, m2 * (x - x0) + y0),
            start = c(m1 = -1, m2 = 1, y0 = 0, x0 = split),
            algorithm = "port",
            lower = c(m1 = -Inf, m2 = -Inf, y0 = -Inf, x0 = split),
            upper = c(m1 = Inf, m2 = Inf, y0 = Inf, x0 = (split+1)),
            data=data.frame(x,y))

1 Ответ

5 голосов
/ 20 августа 2011

Как упомянул в предыдущем ответе, ?nls явно заявляет , что вы не должны использовать nls для 0 данных об ошибках.Чтобы напрямую процитировать файл справки для используемой вами функции:

Не используйте nls для искусственных данных с нулевым остатком.

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

y = f (x, θ) + eps

(с var (eps)> 0).Он не указывает на сходимость данных типа

y = f (x, θ)

, поскольку критерий сводится к сравнению двух компонентов ошибки округления.Если вы хотите проверить nls на искусственных данных, пожалуйста, добавьте компонент шума, как показано в примере ниже.

Потенциально опасный вариант - использовать warnOnly = TRUE, чтобы заставить nls возвращаться док сходимости только с предупреждением (без ошибок):

x <- -(1:100)/10
y <- 100 + 10 * exp(x / 2)
nlmod <- nls(y ~  Const + A * exp(B * x),control = nls.control(warnOnly = TRUE))

Приведенный выше пример также был взят почти непосредственно из ?nls.

...