如何使用R生成与真实调研问卷结构一致的模拟数据集?
问卷匹配模拟数据集生成实现思路
完全可以生成和你问卷结构、变量完全匹配的模拟数据集,也可以基于10-20份小样本答卷拟合对应分布,生成更贴近真实回收特征的模拟数据,具体可按以下步骤实现:
1. 先完成问卷结构的元数据映射
不管有没有拿到首批小样本,先把问卷所有题型、变量规则拆成结构化的元数据配置,不同题型对应配置项如下:
- 单选题:记录每个选项的编码、选项含义,后续拿到小样本后可补充统计各选项的出现频率
- 多选题:记录选项编码、是否有最多/最少选择限制,后续拿到小样本后可补充各选项的选中概率、选项共现关联规则
- 数组题(量表题):记录量表的分值范围、是否允许反向计分,后续拿到小样本后可补充分值的均值、标准差、不同量表题之间的相关系数
- 开放题:可提前预设几个和调研主题相关的高频短文本模板,后续拿到小样本后可提取样本中的关键词做随机拼接生成,也可以直接填充占位符方便分析脚本提前占位
2. 小样本分布拟合与扩展
拿到10-20份首批有效答卷后,按变量类型做分布拟合,生成符合真实特征的大样本模拟数据:
- 分类变量(单选、多选):直接统计小样本中的频率分布作为抽样权重,比如单选题A选项出现3次、B出现7次,就按30%/70%的概率随机抽样生成更大样本的对应题项结果;如果问卷有逻辑跳转规则(比如选A的用户才会显示第5题),需要把跳转规则也加入生成逻辑,和真实回收数据的缺失规则保持一致
- 连续/有序变量(量表得分):用小样本的均值、标准差拟合正态分布,也可以直接用小样本的经验分布做有放回抽样;如果需要还原不同题项之间的相关性,可以用Copula方法拟合小样本的相关结构,生成的模拟数据会保留变量间的关联特征
- 多选题特殊处理:除了单个选项的选中概率,还可以统计小样本中的选项共现频率,比如选了选项1的用户有80%同时选了选项3,生成时要保留这类关联逻辑,避免出现不符合真实情况的选项组合
3. 代码实现参考
用Python即可快速实现,核心依赖numpy做随机抽样、pandas做数据结构化存储,核心代码示例:
import pandas as pd import numpy as np # 1. 单选题生成:q1选项为['男','女'],小样本统计频率为40%/60% q1 = np.random.choice(['男','女'], size=1000, p=[0.4, 0.6]) # 2. 5分量表题生成:小样本均值3.2,标准差0.8,限制分值范围1-5 q2 = np.clip(np.random.normal(loc=3.2, scale=0.8, size=1000), 1, 5).astype(int) # 3. 多选题生成:共3个选项,各选项选中概率0.6、0.3、0.5,要求最少选1个、最多选2个 def gen_multi_choice(): options = [] while len(options) < 1 or len(options) > 2: options = [i+1 for i, p in enumerate([0.6, 0.3, 0.5]) if np.random.rand() < p] return options q3 = [gen_multi_choice() for _ in range(1000)] # 合并为结构化模拟数据集 sim_data = pd.DataFrame({'q1_gender': q1, 'q2_satisfaction': q2, 'q3_demand': q3})
4. 模拟数据合理性校验
生成后可做简单校验,确保和真实数据特征一致:
- 对比小样本和模拟样本的各题频率分布、均值标准差差异,误差控制在可接受范围即可
- 校验逻辑跳转规则是否生效,不符合跳转条件的用户对应题项的值和真实回收数据的填充/缺失规则一致
- 多选题的选中数量符合问卷设置的最多、最少选择限制
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

