nls — ошибка сходимости: сингулярная сходимость (7)

Следующий код nls вызывает следующую ошибку Convergence failure: singular convergence (7) для fm2 (для Data2). Но тот же код для аналогичного набора данных работает нормально (fm1 для Data1).

Хорошо работает для этого набора данных

Data1 <-
structure(list(D = c(0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L,
10L, 10L, 10L, 10L, 15L, 15L, 15L, 15L, 20L, 20L, 20L, 20L),
    Y = c(11.6, 9.3, 10.7, 9.2, 7.8, 8, 8.6, 7.9, 7.7,
    7.6, 7.5, 7.5, 7.2, 7.3, 7, 6.5, 6.3, 5.7, 5.6, 6)), .Names = c("D",
"Y"), class = "data.frame", row.names = c(NA, 20L))

fm1  <-
  nls(
      formula=Y~w*(1-(i*D/(100*(1+i*D/A))))
    , data=Data1
    , start=list(w=13, i=3, A=80)
    , algorithm="port"
    )

Не работает для этого набора данных

Data2 <-
structure(list(D = c(0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L,
10L, 10L, 10L, 10L, 15L, 15L, 15L, 15L, 20L, 20L, 20L, 20L),
    Y = c(10.8, 10.7, 8.4, 8.5, 8, 8, 8, 7.9, 7.9, 7.2,
    7.8, 7.2, 6.6, 6.5, 6.5, 6.4, 2.2, 4.5, 4.2, 6.2)), .Names = c("D",
"Y"), class = "data.frame", row.names = 21:40)

fm2  <-
  nls(
      formula=Y~w*(1-(i*D/(100*(1+i*D/A))))
    , data=Data2
    , start=list(w=13, i=3, A=80)
    , algorithm="port"
    )

person MYaseen208    schedule 06.03.2014    source источник


Ответы (1)


Я думаю, что у него проблемы с вашей параметризацией. Мы можем воспользоваться преимуществами линейности, задав B значение i/A, .lin1 = w и .lin2 = i*w, и в этом случае .lin1 и .lin2 вводятся линейно, а при использовании alg=plinear только нелинейный параметр нуждается в начальном значении:

> fo <- Y ~ cbind(1, -D/(100*(1+B*D)))
> nls(fo, Data, start = list(B = 3/80), alg = "plinear")
Nonlinear regression model
  model: Y ~ cbind(1, -D/(100 * (1 + B * D)))
   data: Data
       B    .lin1    .lin2 
-0.02217  9.26808 13.61471 
 residual sum-of-squares: 15.76

Number of iterations to convergence: 9 
Achieved convergence tolerance: 4.236e-06

Из результата w = .lin1; i*w = .lin2 (поэтому i = .lin2 / .lin1) и B = i/A (поэтому A = i/B).

ПЕРЕДАЧА Улучшена формулировка.

person G. Grothendieck    schedule 06.03.2014
comment
Итак, вы думаете, что модель не идентифицирована или я неправильно ее запрограммировал. Та же модель отлично работает для других наборов данных. - person MYaseen208; 07.03.2014
comment
Проблема заключается в параметризации, а также можно использовать линейную, чтобы воспользоваться преимуществами линейности. Также обратите внимание, что я еще больше улучшил формулировку. - person G. Grothendieck; 07.03.2014
comment
Пожалуйста, посмотрите мой отредактированный вопрос и помогите мне. Спасибо - person MYaseen208; 08.03.2014
comment
Предоставленный ответ уже сходится для обоих ваших наборов данных. - person G. Grothendieck; 08.03.2014
comment
Есть ли связь между параметрами двух разных моделей? Не очевидно для меня. - person MYaseen208; 09.03.2014
comment
Ответ явно дает отношение. - person G. Grothendieck; 31.03.2014
comment
Можете ли вы объяснить более подробно? Пожалуйста - person MYaseen208; 31.03.2014
comment
Я уже привел точные уравнения. Что еще можно сказать, кроме точного соответствия? - person G. Grothendieck; 31.03.2014
comment
Спасибо @ Г. Гротендик за вашу помощь. Теперь возникает вопрос, как получить стандартные ошибки и значения P. - person MYaseen208; 31.03.2014
comment
summary(nls(...)) . Прочтите о дельта-методе для преобразованных параметров или попробуйте запустить модель с исходными параметрами, используя известное решение в качестве начального значения, и используйте для этого summary. - person G. Grothendieck; 31.03.2014
comment
например stackoverflow.com/questions/19316979/ ; - person Ben Bolker; 31.03.2014