R реализация генетического алгоритма для басовой модели - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь оценить 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 ). Я нашел несколько пакетов, которые реализуют GA в R (например, GA, genalg, gafit). Однако, поскольку я новичок в этой области, я не знаю, какой пакет использовать и как использовать формулу баса в пакетах.

  • Есть ли пакет, который вы бы порекомендовали для такого рода оценки?
  • Если да, есть ли пример того, как включить формулу модели баса в код пакета?

1 Ответ

0 голосов
/ 12 марта 2019

Надеюсь, приведенный ниже код поможет вам. Я использовал пакет «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)


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