Работа с ошибкой 0 в nls - сценарий R

Есть ли способ разрешить моему 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))

person StanLe    schedule 20.08.2011    source источник
comment
Grrr. Пожалуйста, обращайтесь к предыдущим вопросам, задавая новые (и подумайте о том, чтобы соответствующим образом изменить старые вопросы, если они очень похожи), и, пожалуйста, не меняйте свою учетную запись, чтобы она выглядела как кто-то другой. Я собираюсь перестать отвечать на ваши вопросы сейчас, @ CodeGuy / StanLe ... Я не буду отрицать этот вопрос, потому что сам по себе это разумный вопрос.   -  person Ben Bolker    schedule 21.08.2011


Ответы (1)


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

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

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

у = f (х, θ) + 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.

person joran    schedule 20.08.2011