You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:39:01