Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
利用R_R - Fatal编程技术网

利用R

利用R,r,R,我尝试使用下面的编码对流行病学SEIR模型进行随机模拟 library(GillespieSSA) parms <- c(beta=0.591,sigma=1/8,gamma=1/7) x0 <- c(S=50,E=0,I=1,R=0) a <- c("beta*S*I","sigma*E","gamma*I") nu <- matrix(c(-1,0,0, 1,-1,0, 0,1,-1, 0,0,

我尝试使用下面的编码对流行病学SEIR模型进行随机模拟

library(GillespieSSA)
parms <- c(beta=0.591,sigma=1/8,gamma=1/7)
x0 <- c(S=50,E=0,I=1,R=0)
a <- c("beta*S*I","sigma*E","gamma*I") 
nu <- matrix(c(-1,0,0,
            1,-1,0,
            0,1,-1,
            0,0,1),nrow=4,byrow=TRUE)

set.seed(12345)
out <- lapply(X=1:10,FUN=function(x) ssa(x0,a,nu,parms,tf=50)$data)
out
库(GillespieSSA)

parms假设数据如下所示:

df <- data.frame(t=seq(0.4,4.5,0.03), x=1:137)

##       t   x
## 1   0.40   1
## 2   0.43   2
## 3   0.46   3
## 4   0.49   4
## 5   0.52   5

我自己进行试验后,一个问题似乎是许多时间戳与整数结果相差甚远

要查看这些余数,请选中:
out[[1]][,1]%1

好消息是,您可以使用此函数的输出以及一个调优参数来选择所需的内容。为此,您需要找到距离1的距离,然后控制可接受的间距

按如下操作并保存结果(以及一堆
TRUE
FALSE
结果)


时间值为0.02、0.003等的模拟数据应从数据中删除。只应提取接近0,1,2的时间值,如0.00,0.98.1.9。是否要向下采样?你能发布一个可复制的例子吗?显示如何从向量A转到向量B。@e4e5f4。你好谢谢你的回复。假设我将这些编码添加到上面的编码中:是的,这就是我想要的!非常感谢。但是,我可以知道这个编码是如何工作的吗?“idx从内到外读取很容易。
天花
将创建一个类似
1,1,…,2,2,…,3,3,…
的序列。取
diff
将在值发生变化的地方给出
1
s。检查
==1
将在这些点产生逻辑向量
TRUE
,而
FALSE
则返回e、 我试着在我的编码中做到这一点。我确实得到了输出,但在它从16开始取值之后,…然后它直接给出23以后的值。我如何在我的编码中改变它以获得每个时间间隔?编码如下:库(Gillespiesa)parms在您的数据中缺少一些值(不是真正连续的!).try:
idx是的,缺少一些。由于这是一个随机模拟,我不知道如何获得从0-1,1-2到50的每个间隔的输出。但是,无论如何,这确实有很大帮助。还有一个问题,既然间隔20-21及以上没有值,是否有任何编码可以让我在自己的内部添加值?因为,如果没有re对于该时间间隔,这意味着读数在下一个时间间隔之前是相同的。非常感谢您的及时回复。我非常感谢您。当我运行您所述的编码时,我确实得到了输出,但对于0.9时间值,我有四个读数。我只需要在该时间间隔内读取一个。就像在0.0的一个读数中,0.9的一个读数,0.9的一个读数1.9因为所有这些数字都接近于0、1、2等等。对不起,也许我没有说清楚。那么您需要的是最接近每个整数的单个值?
idx <- diff(ceiling(df$t)) == 1
df[idx,]

##        t   x
## 21  1.00  21
## 54  1.99  54
## 87  2.98  87
## 121 4.00 121
selection <- abs((out[[1]][,1] %% 1) - 1) < 0.1
out[[1]][selection,]