Я пытаюсь создать несколько пользовательских функций роста и приспособить функцию роста к данным.
Тестовые данные:
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
Есть идеи, как мне решить эту проблему?или исправить это?
Спасибо