在R中为34例个体生成带个体间变异的NONMEM模拟采样时间
为NONMEM生成带个体间变异的采样时间(R实现)
当前代码仅生成一组固定的3个采样时间,重复34次后所有个体的采样时间完全一致,无法体现个体间变异。需要修改代码,让每个个体的3个采样时间分别在指定区间内独立随机生成,最终输出长度为102(3×34)的一维向量。
解决方案1:用replicate生成并展平
nsubjects <- 34 # 为每个个体独立生成3个采样时间,再合并为单个向量 times <- unlist(replicate(nsubjects, c( runif(1, 0.5, 1), # 第一个采样时间:0.5-1小时 runif(1, 12, 48), # 第二个采样时间:12-48小时 runif(1, 47, 49) # 第三个采样时间:47-49小时 )))
replicate(nsubjects, ...)循环执行34次括号内的代码,每次为一个个体生成符合要求的3个随机时间unlist()将34个长度为3的子向量展平为一个长度为102的一维向量,匹配NONMEM的数据格式需求
解决方案2:向量化生成后调整顺序
如果偏好更直接的向量化操作,可先分别生成每个区间的所有随机值,再调整为按个体连续排列的格式:
nsubjects <- 34 # 分别生成三个区间的随机数 time1 <- runif(nsubjects, 0.5, 1) time2 <- runif(nsubjects, 12, 48) time3 <- runif(nsubjects, 47, 49) # 合并并调整为个体顺序连续的向量 times <- c(rbind(time1, time2, time3))
rbind(time1, time2, time3)生成3行34列的矩阵,每行对应一个采样区间c()将矩阵按列展平,得到每个个体的三个采样时间连续排列的向量
验证结果
可通过以下代码确认输出符合要求:
# 检查向量长度是否为102 length(times) # 查看前6个值(前两个个体的采样时间) head(times, 6)
内容的提问来源于stack exchange,提问作者yipper8
相关产品推荐
相关产品推荐

