我复制了一个描述药物注射的单室模型从"求解R中的微分方程"(见下面的代码).

我不清楚的是,在发生事件的情况下,如何判断质量平衡为0.有什么建议吗?

library(deSolve)
b <- 0.6 
yini <- c(blood = 0)

pharmaco2 <- function(t, blood, p) { 
  dblood <-- b * blood 
  list(dblood) }

injectevents <- data.frame(var = "blood", time = 0:20, value = 40, method = "add")

times <- seq(from = 0, to = 10, by = 1/24) 

out2 <- ode(func = pharmaco2, 
            times = times, 
            y = yini, 
            parms = NULL, 
            method = "impAdams", 
            events = list(data = injectevents))

plot(out2, lwd = 2, xlab="days")

推荐答案

判断质量平衡需要close the system.这可以通过添加源和汇的显式状态变量来实现,其中source代表药物的存量,sink代表通过分解或排泄离开血液的累积量.源变量可以设置为零以判断质量平衡,或者设置为任何正值以表示库存中可用的药物数量.

然后在模型中加入相应的过程,即分解/排泄作为状态方程,以及在事件中注入过程中从原料中移除.然后,该模型的内容如下:

library(deSolve)
b <- 0.6
yini <- c(source=0, blood = 0, sink=0)

pharmaco2 <- function(t, yini, p) {
  blood   <-  yini[2]
  dsource <-  0
  dblood  <- -b * blood
  dsink   <- +b * blood
  list(c(dsource, dblood, dsink))
}

injectevents <- data.frame(var = rep(c("blood", "source"), 21),
                           time = rep(0:20, each = 2),
                           value =  rep(c(40, -40), 21),
                           method = "add")

times <- seq(from = 0, to = 10, by = 1/24)

out2 <- ode(func = pharmaco2,
            times = times,
            y = yini,
            parms = NULL,
            method = "lsoda",
            events = list(data = injectevents))

plot(out2, lwd = 2, xlab="days", mfrow=c(1,3))

summary(rowSums(out2[,-1])) # sum of all columns, except time

质量平衡判断可以通过添加所有列的值来完成,时间除外.如果初始值source被设置为零,则余额也应该为零,直到数字四舍五入误差:

      Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
-1.990e-13 -4.974e-14 -2.309e-14 -2.541e-14  2.132e-14  9.948e-14 

另请注意,我使用默认的lsoda作为求解器.求解器adamsbdf也可以工作,impAdams也可以,但我不建议在这种情况下使用后者.

Output of the ODE with the three state variables

R相关问答推荐

如何根据包含相同值的某些列获取总额

使用sensemakr和fixest feols模型(R)

R形式的一维数字线/箱形图样式图表

单击 map 后,将坐标复制到剪贴板

在R中查找每个组不同时间段的总天数

在垂直轴中包含多个ggplot2图中的平均值

过滤器数据.基于两列的帧行和R中的外部向量

Ggplot2中的重复注记

将文件保存到新文件夹时,切换r设置以不必创建目录

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

如何基于两个条件从一列中提取行

Data.table';S GForce-将多个函数应用于多列(带可选参数)

使用R中的dist()迭代ID匹配的欧几里德距离

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

如何将EC50值绘制在R中的剂量-react 曲线上?

生存时间序列的逻辑检验

根据排名的顶点属性调整曲线图布局(&Q)

重写时间间隔模糊连接以减少内存消耗

真实世界坐标的逆st_变换