Я пытаюсь скомпилировать следующий код. Это код для калибровки моделей системной динамики.
Это дает мне следующую ошибку.
Ошибка в modCost (obs = world_data, model = out): объект (list) не может быть приведен к типу 'double'
Проблема кажется emerge в функции modCost. . Пожалуйста помоги. Используйте следующий код.
Входной файл можно скачать отсюда - https://www.dropbox.com/s/7ubl5lm5wo8qngz/WorldPopulation.xlsx?dl=0
library(deSolve)
library(gdata)
library(FME)
library(readxl)
WorldPopulation <- read_excel("C:/Users/nikhi/Documents/WorldPopulation.xlsx")
world_data<-WorldPopulation
#simulation time
START<-1960; FINISH<- 2010;STEP<-0.1
simtime<-seq(START, FINISH, by = STEP)
WP_INIT <- 3026002942
#defining the model function (stock and flow equations)
model<-function(time, stocks, auxs){
with(as.list(c(stocks, auxs)),{
fPopulationAdded <- Population * aGrowthFraction
dP_dt <- fPopulationAdded
return(list(c(dP_dt)))
})
}
#calling it under a funrction to solve the equation
solveWP<- function(pars){
stocks<- c(Population = WP_INIT)
auxs<-c(aGrowthFraction = unname((pars["aGrowthFraction"])))
return(data.frame(ode(y=stocks, simtime, func = model, parms = auxs, method = "euler")))
}
#calculating cost (deviation from the actual data)
getCost<-function(p)
{
out<- solveWP(p)
cost <- modCost(obs = world_data, model = out)
return (cost)
}
#definining parametrs to be optimized
pars<-c(aGrowthFraction = 0.001)
lower<-c(0.0)
upper <- c(0.2)
#run optimizer
Fit<- modFit(p = pars, f= getCost, lower = lower, upper = upper) #Error appears here.
optPar <- c(Fit$par)