如何在R中模拟调查实验受访者中途退出对应的失访NA数据
R实现调查中途整体失访的模拟方法
核心逻辑是为每个受访者随机分配一个失访起始题序,将该题序及之后的所有题目作答全部替换为NA即可。
完整实现代码
基于你给出的原始模拟数据,失访模拟的代码如下:
# 原始数据生成代码 n <- 100 df <- data.frame( Q1 = sample(c(18:90), n, rep = TRUE), #年龄 Q2 = sample(c("m", "f"), n, rep = TRUE), #性别 Q3 = sample(c(0,1), n, rep = TRUE, prob = c(0.55, 0.45)), #其他干预前通用问题 Q4 = sample(c(0,1), n, rep = TRUE), Q5 = sample(c(0,1), n, rep = TRUE), #干预项 Q6 = sample(c(0,1), n, rep = TRUE), #干预后问题 Q7 = sample(c(0,1), n, rep = TRUE), Q8 = sample(c(0,1), n, rep = TRUE), Q9 = sample(c(0,1), n, rep = TRUE), Q10 = sample(c(0,1), n, rep = TRUE)) # -------------失访模拟部分------------- total_q <- ncol(df) # 总题数,本次为10道 # 1. 为每个受访者随机生成失访起始位置:取值范围2到total_q+1 # 取值为total_q+1代表受访者完成所有题目,无失访 # 可自定义prob参数调整不同位置的失访概率,以下示例为均匀分布 dropout_pos <- sample(x = 2:(total_q + 1), size = n, replace = TRUE) # 2. 逐行替换指定位置及之后的作答为NA for (i in 1:n) { if (dropout_pos[i] <= total_q) { df[i, dropout_pos[i]:total_q] <- NA } }
效果验证
运行后查看前几行数据即可看到符合需求的失访效果:
head(df)
输出示例和预期格式一致:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 1 42 m 1 0 NA NA NA NA NA NA 2 28 f 0 NA NA NA NA NA NA NA 3 67 m 1 0 1 1 NA NA NA NA 4 35 f 1 0 0 1 0 1 1 0
自定义调整说明
- 若需要调整不同题位的失访概率,比如希望受访者越到后期越容易退出,只需要修改
sample函数的prob参数即可,示例:
# 示例:题序越靠后,退出概率越高 dropout_pos <- sample(x = 2:(total_q + 1), size = n, replace = TRUE, prob = c(0.02, 0.03, 0.05, 0.08, 0.1, 0.12, 0.15, 0.18, 0.2, 0.05))
- 若允许受访者第一题就放弃作答,将
sample的x参数改为1:(total_q + 1)即可。
内容的提问来源于stack exchange,提问作者abc123
相关产品推荐
相关产品推荐

