感谢任何帮助提高这个循环代码的效率。对不起!
我正在模拟“可变寿命调整显示”。更多细节在这里。
当应用于手术时,这是一个图表,作为预期死亡人数减去实际死亡人数 (e) 的连续统计。假设外科手术在 p=0.1 的人群中具有预期的死亡概率。一个手术单元的性能可以被认为是 0s 和 1s 的向量 (r_(1:n)),其中 0 表示成功,1 表示死亡。在开始 (r_0) 时,e_0 = 0。如果患者存活,则将 p 添加到运行分数中。如果患者死亡,则从运行分数中减去 1-p(例如,其中 r_1=0,e_1 = e_0 + p;其中 r_1=1,e_1 = e_0 - (1-p)。
可以(可能!)看到,如果给定的一组结果的总体死亡概率等于总体的死亡概率,则运行分数 (e) 应该在 0 附近波动。如果死亡率高于预期(更多1s),e的趋势为负。如果结果好于预期(更多的 0),则趋势为正。
# Simulate VLAD
# m=number of simulations, n=number of procedures, p1=expected mortality
# p2=actual mortality
vlad_sim <- function(m,n,p1,p2){
e<-matrix(nrow=n, ncol=m)
e[1,]<-0
r<-vector()
for (j in 1:m){
r<-rbinom(n,1, p2)
for (i in 2:n){
e[i, j] <- ifelse(r[i]==0, e[i-1,j] + p1, e[i-1,j] - (1-p1))
}
}
return(e)
}
# Test example using m=100, n=100, p1=0.1, p2=0.2
e <- vlad_sim(100, 100, 0.1, 0.2)
这段代码可以工作并且可以做我想要的。我可以用 ggplot2 制作可爱的情节。我想更改这两个 for 循环以应用函数,但不知道如何。首先,制作尺寸为 nxm 的结果矩阵可能更容易:
r<-matrix(rep(rbinom(n,1, p2),m), nrow=n, ncol=m)
然后我如何将我的函数应用于这个矩阵?谢谢!