lsoda中的错误(y、times、func、parms…):在执行任何集成步骤之前检测到非法输入-请参阅书面消息

lsoda中的错误(y、times、func、parms…):在执行任何集成步骤之前检测到非法输入-请参阅书面消息,r,optimization,ode,R,Optimization,Ode,我使用来自的代码来估计和优化SIR和SEIR模型中的参数 对于SIR模型,我没有遇到任何问题,但是当我将其更改为SEIR模型时,我遇到了一些问题 对于数据,可以使用R中的流感数据。我的数据是这样的 Date NewPositive NotPrevPos PosPct PrevPos Tested Tested_kumulativ 157 157 12 17516 0.1 99 17615 1.082.400 158 158

我使用来自的代码来估计和优化SIR和SEIR模型中的参数

对于SIR模型,我没有遇到任何问题,但是当我将其更改为SEIR模型时,我遇到了一些问题

对于数据,可以使用R中的流感数据。我的数据是这样的

    Date NewPositive NotPrevPos PosPct PrevPos Tested Tested_kumulativ
157  157          12      17516    0.1      99  17615        1.082.400
158  158          15      15294    0.1      67  15361        1.097.761
159  159          19      14254    0.1      67  14321        1.112.082
160  160          13       9574    0.1      50   9624        1.121.706
161  161          11       9700    0.1      37   9737        1.131.443
162  162           9      17759    0.1      82  17841        1.149.284
我使用“日期”和“新阳性”列,这与流感数据相似

我使用的特定代码是

seir <- function(beta, lambda, gamma, S0, E0, I0, R0, times) {
  require(deSolve) # for the "ode" function
  
  # the differential equations:
  sir_equations <- function(time, variables, parameters) {
    with(as.list(c(variables, parameters)), {
      dS <- -beta * I * S
      dE <- beta * I * S - lambda * E
      dI <- lambda * E - gamma * I
      dR <- gamma * I
      return(list(c(dS, dE, dI, dR)))
    })
  }
  
  # the parameters values:
  parameters_values <- c(beta = beta ,lambda = lambda, gamma = gamma)
  
  # the initial values of variables:
  initial_values <- c(S = S0, E = E0, I = I0, R = R0)
  
  # solving
  out <- ode(initial_values, times, sir_equations, parameters_values)
  
  # returning the output:
  as.data.frame(out)
}



   # sum of squares function, i.e. the function we wanna optimize
ss <- function(beta, lambda, gamma, data = Infected, N = PopulationOfDenmark) {
  I0 <- 1
  times <- data$Date
  predictions <- seir(beta = beta, lambda = lambda, gamma = gamma,   # parameters
                      S0 = N - I0, E0 = 0, I0 = I0, R0 = 0, # variables' intial values
                      times = times)                # time points
  sum((predictions$I[-1] - data$NewPositive[-1])^2)
}



ss2 <- function(x) {  # Function around this ss() that will have an input interface that fits 
                       # the requirement of the optim() function
  ss(beta = x[1], lambda = x[2], gamma = x[3])
}



starting_param_val <- c(0.0002, 0.000005, 0.01)
ss_optim <- optim(starting_param_val, ss2)
ss_optim
哪个有回溯

7. lsoda(y, times, func, parms, ...) 
6. ode(initial_values, times, sir_equations, parameters_values) 
5. seir(beta = beta, lambda = lambda, gamma = gamma, S0 = N - I0, 
     E0 = 0, I0 = I0, R0 = 0, times = times) 
4. ss(beta = x[1], lambda = x[2], gamma = x[3]) 
3. fn(par, ...) 
2. (function (par) 
   fn(par, ...))(c(-0.000355555555555555, -0.000661666666666667, 
   0.0111111111111111)) 
1. optim(starting_param_val, ss2) 
我从
optim()
得到的输出是负参数

我还得到了一个类似这样的错误,这个错误还在继续

DLSODA-  Warning..Internal T (=R1) and H (=R2) are
      such that in the machine, T + H = T on the next step  
     (H = step size). Solver will continue anyway.
In above message, R1 = 165.348, R2 = 1.3052e-14
.
.
.
这对我来说没什么意义

我试图解决这个问题的方法是更改我输入的参数
optim()
。 我还尝试使用例如
alpha=log(gamma)
,然后在
ss
ss2
函数中使用
alpha
,在
seir
函数中使用
exp(alpha)
,在
optim()
中使用
log(gamma参数)
代替
gamma


我对Stack非常陌生,所以请告诉我,如果这个问题的形式不正确,我可以做得更好。

系统是非线性的。如果它离开有界行为区域,即所有参数为正,所有变量为正,则二次正反馈会在积分区间内爆炸到无穷大。在这种奇点下,步长控制算法将进一步减小步长,直到报告的错误发生,步长更新不再提前积分时间


在一个类似的情况下,我通过强制参数的正性获得了部分成功,或者通过让它们是平方,
beta=rt_beta^2
,或者是指数,
beta=exp(ln_beta)
等,这样就可以不受限制了。这通常可以保证优化返回结果,但不能保证结果在任何方面都有意义。

本文讨论了拟合SIR模型的一些数值困难。他还表示,“新冠病毒-19”是一种“数据流行病”。这也是我停止使用它的原因,但是您仍然可以在我的github repo中找到一些模型、链接和链接列表@tpetzoldt:更糟糕的是,制药游说团和国家媒体收集的数据甚至都不是数据,因为它们的构造背后没有共同(或)科学标准。检测没有按照金标准进行验证,没有检测可以实际证明病毒感染,即使在PCR行业内部,检测的应用也是欺诈性的(Ct 40或55,当25以上的所有内容都没有意义时),就连世界卫生组织和福西也在《罕见的真相时刻》中承认,我绝对不会把它称为“欺诈性的”@Lutz Lehmann,但我完全同意数据中存在相当大的不确定性。我想我们双方都同意,对新冠病毒和流感数据进行建模是相当困难的,所以我想知道为什么这么多人会尝试;-)所有这些不确定性都已在2020年4月讨论过。当时我对自己很好奇,想知道发生了什么,所以我联系了一些流行病学建模者和流行病学家,但我还有其他事情要做,有足够多的人处理这个话题。
DLSODA-  Warning..Internal T (=R1) and H (=R2) are
      such that in the machine, T + H = T on the next step  
     (H = step size). Solver will continue anyway.
In above message, R1 = 165.348, R2 = 1.3052e-14
.
.
.