一、导入后先对数
拿到 CSV 的第一件事不是跑分析,而是核对:行数、列数、ID 是否唯一、每个变量的取值范围、 分类变量的水平数。对数能在五分钟内发现大部分导出错误。
- 行数:原始 220 行,与发放记录是否一致?
- 列数:14 列,字段名是否和字典一致?有没有多出平台自带的序号列?
- ID:S001–S220 是否唯一、有没有重复或跳号?
- 取值范围:依赖与睡眠题项是否都在 1–5?有没有 0、99 或空字符串?
- 分类水平:性别是否只有 0/1,年级是否只有 1–4?
这一步可以用频数分析看分类变量,用描述性统计看连续变量的最小值、最大值和缺失数。
核对和清洗尽量用脚本完成,不要在 Excel 里手工改单元格。手工修改没有记录、无法复现, 也容易因为排序或筛选错行。把清洗步骤写成可重复运行的脚本,或至少按顺序记录每一步操作, 才能在换一批数据时重跑,也才能在答辩时回答“这一行到底是怎么处理的”。
二、缺失值:先看模式,再选方法
缺失处理没有统一答案,但有三条底线:不要默认填 0;要说明缺失比例和模式;要记录处理方法。 如果缺失与某个变量系统相关(例如高分学生更可能不填),整行删除会引入偏差。
| 方法 | 适用情形 | 注意 |
|---|---|---|
| 整行删除(listwise) | 缺失比例低、分散,且近似随机 | 样本量下降;非随机缺失会引入偏差 |
| 均值 / 中位数 / 众数填充 | 少量缺失,只需近似估计 | 会低估方差;不要用于关键结局 |
| 指定值 / 插值 | 有明确规则或时间序列 | 指定值必须有依据;插值要说明方法 |
| 多重插补 | 缺失比例较高、近似 MAR | 需外部工具;MNAR 下仍会有偏,需另做敏感性分析 |
站内数据处理支持整行删除、均值 / 中位数 / 众数 / 指定值 / 插值填充,并会给出处理前后的行数。 无论用哪种方法,都要在清洗日志里写清影响行数。
缺失比例的经验边界
三、异常值:先调查,再决定
异常值不一定是错误。它可能是录入错误,也可能是真实但少见的观测。正确顺序是: 检测 → 回查来源 → 判断保留或剔除 → 做敏感性分析。直接删除会掩盖问题,也会让结果看起来比实际更稳。
三种常见检测方法
- IQR 法:低于 Q1 − 1.5×IQR 或高于 Q3 + 1.5×IQR 记为轻度异常,超出 3×IQR 记为极端异常。
- Z-score 法:|z| 大于 2 或 3 作为提示,适合近似正态的变量。
- Grubbs 检验:检验“是否存在一个离群值”,适合单变量、近似正态的样本。
案例中的异常值
日均使用时长的 Q1 = 2.1,Q3 = 4.1,IQR = 2.0,IQR 法上下界为 -0.9 与 7.1 小时。
S088 报告 14.2 小时,属于极端异常;S041 报告 7.7 小时,属于轻度偏离。 回查后未发现录入错误,主分析保留两者。
敏感性分析剔除极端值后(n = 217), 依赖与睡眠的相关为 r = -0.694, 主分析为 r = -0.685; 分层回归的 ΔR² 从 0.533 变为 0.534。方向和量级都稳定,因此保留主分析。
四、变量处理:反向、编码、哑变量与变换
五、清洗日志与交付物
清洗结束,交付两份文件:清洗后的 CSV 和一份清洗日志。日志至少包含:处理的变量、 方法、影响行数、处理前后关键统计量的变化、做出该决定的理由;末尾注明生成日期和执行人。
| 步骤 | 处理 | 影响 | 理由 |
|---|---|---|---|
| 缺失 | 整行删除 | 220 → 218 行 | 缺失 0.9%,分散于睡眠题项 |
| 异常值 | 保留,另做敏感性分析 | 主分析 218 行;敏感性 217 行 | 回查无录入错误,结论稳定 |
| 量表 | 依赖 5 题合成均分 | 新增 dep 均分 | 按操作化定义;第 5 题后续复核 |