我正在尝试创建一些自定义增长函数,并将增长函数拟合到数据中。
测试数据:
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)
第一个自定义功能:
我不得不div购买我认为将使该功能正常工作的最大潜力(上渐近线)。
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
您知道如何解决此问题吗?或正确吗?
谢谢