Кривая подгонки к пользовательской функции - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь создать несколько пользовательских функций роста и приспособить функцию роста к данным.

Тестовые данные:

x_yrs<-c(2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 
 2015, 2016, 2017)
y<-c(1.89, 0.34, 0.47, 2.46, 2.13, 7.49, 47.24, 117.84, 202.8, 322.7, 
540.72, 744.22, 1148.7)

Первая пользовательская функция:

Мне пришлось разделить покупку, как я думал, с максимальным потенциалом (верхняя асимптота), чтобы эта функция работала.

fun1 <- function(a, x_yrs, b){
    result <-(1 / (1+exp(a*x_yrs +b)))
    return(result)
}
y <- y/110000
x_yrs <- x_yrs-2004
MaxPop<-110000
my_model <- nls(y ~ fun1(a, x_yrs, b),start=list(a=-0.005,b=-0.05))
plot(x_yrs,y*MaxPop,xlim = c(0, 40), ylim = c(0, MaxPop))
Years<-seq(2005, 2050, 1)-2004
alpha <- coef(my_model)
curve(fun1(alpha[1], x, alpha[2])*MaxPop, add = T, col = "blue") 

Следующая функция, которую я пробую, это:

gompertz_LimitSet <- function(t, beta, k) {
    alpha<-1#UpperLimit
    #' @param t time
    #' @param x size
    #' @param alpha upper asymptote
    #' @param beta growth displacement
    #' @param k growth rate 
    #' 
    result <- alpha * exp(-beta * exp(-k * t));
    return(result)
 }

 y <- y/110000
 x_yrs <- x_yrs-2004
 plot(x_yrs,y)
 my_model <- nls(y ~ gompertz_LimitSet(x_yrs, beta, k),start=list(t=1, beta=1, k=0.5))

Но при этой функции я получаю следующую ошибку.

Error in nlsModel(formula, mf, start, wts) : 
    singular gradient matrix at initial parameter estimates

Есть идеи, как мне решить эту проблему?или исправить это?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...