基于遗传算法的Bass模型的R实现

问题描述 投票:3回答:1

我试图估计Bass Curves来分析不同群体的创新扩散。到目前为止,我使用nlsLM()包的minpack.lm来估计曲线的参数/以适应曲线。我循环使用不同的起始值来估计使用此命令对不同起始值的最佳拟合:

Bass.nls <- nlsLM(cumulative_y~ M * (((P + Q)^2/P) * exp(-(P + Q) * time))/(1 + (Q/P) * exp(-(P + Q) * time))^2
                , start = list(M=m_start, P= p_start, Q=q_start)
                , trace = F
                , control = list(maxiter = 100, warnOnly = T) )

由于一些群体的数据点很少,许多群体并没有收敛。

Venkatesan and Kumar (2002)建议在数据稀缺时使用遗传算法方法进行低音模型估计(另见Venkatesan et al 2004)。我找到了一些在R中实现GA的包(比如GAgenalggafit)。但是,由于我是该领域的新手,我不知道使用哪个包以及如何在包装中使用低音配方。

  • 您是否会推荐这种估算方案?
  • 如果是,是否有一个例子来说明如何在包的代码中包含低音模型的公式?
r time-series curve-fitting genetic-algorithm forecasting
1个回答
1
投票

我希望下面的代码可以帮助你。我使用“GA”包来利用遗传算法。

x <- c(840,1470,2110,4000,7590,10950,10530,9470,
       7790,5890)

t<- 1:length(x)
Horiz <- length(x)




fit <- function(p,q,m) {

    res = x - (m*((exp((p+q)*t)*p*(p+q)^2) / (p*exp((p+q)*t)+q)^2))

        -(sum(res**2)/Horiz)

}



GA <- ga(type = "real-valued", 
         fitness = function(x) fit(x[1],x[2],x[3]),
         lower = c(0,0,0), upper = c(1,1,sum(x)*2), 
         popSize = 1000, maxiter = 1000 ,run = 500)


© www.soinside.com 2019 - 2024. All rights reserved.