无需Stan,如何用R包拟合5变量多变量常微分方程组模型?
5变量多变量ODE模型R语言拟合方案解答
关于你提到的brms方案适用性说明
首先明确:brms拟合多元ODE的方案底层依赖Stan执行贝叶斯推断,如果你要求完全不借助Stan接口,该方案不符合你的需求。如果你只是不想手动编写Stan代码,那该方案完全适配你的5变量扩展SEIR类ODE模型,只需将你的方程组按照brms自定义ODE的格式封装即可调用。
其他纯R可实现的拟合方案
频率学派经典拟合方案(上手门槛最低)
采用deSolve+FME包组合,是R生态中最常用的非贝叶斯ODE拟合工具链,完全不需要依赖Stan。
操作步骤:- 用
deSolve包的ode()函数封装你的微分方程组,示例代码如下:
library(deSolve) # 自定义ODE函数 svir_ode <- function(t, state, pars) { with(as.list(c(state, pars)), { N <- S + V + E + I + R dS <- delta1*R - kappa1*S - beta1*S*I/N dV <- kappa1*S - beta1*sigma1*V*I/N dE <- beta1*S*I/N + beta1*V*sigma1*I/N - gamma1*E dI <- gamma1*E - I*alpha1 dR <- alpha1*I - delta1*R return(list(c(dS, dV, dE, dI, dR))) }) }- 用
FME包的modCost()定义多变量观测的损失函数,再调用modFit()即可完成带参数约束的最小二乘/最大似然估计,还支持后续的参数灵敏度分析、置信区间计算。
- 用
纯R实现的贝叶斯拟合方案
可使用POMP(部分观测马尔可夫过程)包,该包内置的推断算法完全基于R原生生态和内置C代码实现,不需要调用Stan,支持粒子滤波、MCMC等多种贝叶斯推断方法,非常适配传染病动态模型这类ODE系统的参数估计需求。大规模数据梯度下降拟合方案
如果你的观测数据量较大,可使用R接口的torch或tensorflow框架,将ODE求解过程封装为可微计算图,通过梯度下降算法优化参数,收敛速度远高于传统启发式优化方法,也不需要依赖Stan。
内容的提问来源于stack exchange,提问作者Manal
相关产品推荐
相关产品推荐

