Почему разница между ростом производства R и логистикой c и другой? - PullRequest
2 голосов
/ 26 марта 2020
df <- data.frame(
  time = c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17),
  var = c(12.69,16.35,20.29,25.08,30.81,38.75,45,49.16,55.15,62.852,68.63,76.64,82.47,85.68,89.14,91.86,95.28,98.17)
)

logisticmodel <- nls(var ~ SSlogis(time, phi1, phi2, phi3), data = df)
summary(logisticmodel)
coef(logisticmodel)
#predict(logisticmodel, data.frame(time = 18))

Выходные данные R следующие:

      phi1       phi2       phi3 
105.737368   7.432555   3.852865

Но веб-сайт дает нам:

enter image description here

Я знаю, что некоторые языки имеют разные выходы. Это нормально, но мне интересно, что ты думаешь?

Заранее спасибо.

1 Ответ

4 голосов
/ 26 марта 2020

Проблема в том, что подходят разные модели.

nls с функцией автозапуска SSlogis подходит для модели (см. help('SSlogis'))

Asym/(1+exp((xmid-input)/scal))

или, используя вашу запись,

phi1/(1 + exp((phi2 - input)/phi3))

Pen и документ показывает, что следующие преобразования дают результаты на веб-странице.

fit <- nls(var ~ SSlogis(time, phi1, phi2, phi3), data = df)

kappa <- coef(fit)[1]
alpha <- exp(coef(fit)[2]/coef(fit)[3])
beta <- 1/coef(fit)[3]
c(kappa = unname(kappa), alpha = unname(alpha), beta = unname(beta))
#      kappa       alpha        beta 
#105.7373679   6.8832991   0.2595471 

Итак, чтобы автоматизировать это, напишите простую функцию.

transf <- function(x){
  kappa <- coef(x)[1]
  alpha <- exp(coef(x)[2]/coef(x)[3])
  beta <- 1/coef(x)[3]
  c(kappa = unname(kappa), alpha = unname(alpha), beta = unname(beta))
}

transf(fit)
...