第 23 课:数据清洗
🎯 核心实操目标
学习目标:掌握定量问卷数据进入统计分析前的标准清洗流程——剔除无效样本、处理缺失值、识别异常值(outlier)、反向题反向计分(reverse scoring)、计算量表均分(合成变量)。本课以课程主数据集 Case A(原始 N=540)逐步走完整套流程,最终得到 N=500 的可分析样本,并理解每一步“为什么这样做、漏做会怎样”。本模块的红线在本课同样适用:AI 只负责把你已经算出的结果翻译成学术语言,绝不替你计算或编造任何统计量。
📋 课前准备(5 分钟自检)
工具/账号
- [ ] Jamovi 2.5+ 或 SPSS 29+(推荐 Jamovi,免费 + 操作直观)
- [ ] Excel / WPS(辅助手动检查)
数据/素材
- [ ] Case A 数据集:case_A_questionnaire.csv(540 行 × 33 列)
- [ ] Case A 数据字典:case_A_data_dictionary.md(载明 3 道反向题的位置与反转公式,清洗前务必先读字典)
应急通道
- Jamovi 安装失败 → 用 SPSS 或 JASP 替代(同源、结果一致)
- 数据量大卡顿 → 先按
Duration_Min排序,剔除明显异常后再做后续步骤 - 不确定哪几道是反向题 → 一律回到数据字典核对,不要凭题面语气自行猜测
场景导入:清洗不当,后续分析全部失真
在论文的数据分析阶段,一类反复出现的情况是:问卷如期回收、样本量看似充足,分析结果却异常——信度系数偏低、本应显著的关系不显著、或描述统计里出现不合常理的均值。回到原始数据复查,根源往往不在统计方法,而在进入分析之前的数据没有清洗干净。
其中最高频的三类隐患是:
- 反向题未反向计分。量表中措辞相反的题目若不先反转,会与同维度其他题方向相悖,直接拉低信度系数 Cronbach's α,并扭曲变量的真实方向。
- 缺失值未声明就参与计算。若用
99之类的数字编码缺失,而未在软件中声明为“缺失”,统计软件会把99当作真实分值计入均值,污染整列结果。- 无效问卷未剔除。极短作答时间、连续同一选项等“无心作答”样本会引入随机噪声,抬高方差、稀释相关系数,使真实关系被淹没。
这三类问题有一个共同特征:它们不报错——软件照常出结果,错误却悄然进入了每一个统计量。本课要建立的,正是一套在分析之前系统排除这些隐患的标准流程,把 540 行原始数据整理为 500 行可信、可复现的分析样本。
原理:为什么必须先清洗——“垃圾进,垃圾出”
在套用任何清洗步骤之前,先理解一条贯穿全部数据分析的基本事实:统计方法本身不会判断数据的真假,它只会忠实地计算你喂给它的一切。 这就是计算领域常说的“垃圾进,垃圾出(garbage in, garbage out, GIGO)”——输入若含错误,输出必然含错误,而且错误会被统计运算放大并“洗白”成一串看似精确的数字。数据清洗的全部意义,就是在数据进入运算之前,把已知的错误尽量清除。
可以从三个角度理解“为什么不能跳过清洗”:
- 统计量是“全样本聚合”的,单点污染会扩散到整列。 均值、方差、相关、回归系数都是对整列数据的汇总。一个未声明的
99、一道未反转的反向题、几份乱填问卷,污染的不是一个格子,而是它参与的每一个统计量。错误一旦进入聚合,事后极难从结果里反推剔除。 - 错误“不报错”,因而最危险。 缺失值未声明、反向题未反转,软件都会照常给出结果——它无从知道
99是“缺失”还是“99 分”,也无从知道某道题措辞是相反的。正因为没有红色警告,这类错误最容易被带进正文、骗过自己也骗过读者,直到盲审追问才暴露。 - 可复现性要求清洗有据可查。 规范研究要求他人能依你的步骤复现结果。哪些样本被删、为何删、反向题如何处理,都必须记录在案(本课最后的“清洗日志”即为此而设)。清洗不是“顺手删几行”,而是研究链条中可追溯的一环。
📐 大模型在数据清洗里“帮得上”与“替不了”的边界
清洗阶段,大模型能帮的是流程与操作:解释某一步为什么要做、给出 Jamovi/SPSS 的具体菜单路径、把你的清洗日志整理成规范文字、提示你“别忘了反向题”。这些都属于“把已知规则翻译成操作”。
但它替不了两件事:① 它看不到你本地的原始数据,无法替你判断“这一行到底该不该删”——那要你对照作答时长、规律性应答等证据亲自裁定;② 严守本模块红线——反转后的分值、清洗后的样本量、各变量的均值,必须由你在软件里真实跑出来,绝不能让模型“估一个”或“帮你算”。模型一旦开始报具体数字,几乎一定是在编造(hallucination)。清洗的判断权与计算权,都在你手里。
📘 关键术语(首次出现,先对齐定义)
- 数据清洗(data cleaning):在统计分析之前,系统地检测并处理原始数据中的无效样本、缺失值、异常值与编码错误,使数据达到可分析、可复现状态的过程。
- 缺失值(missing value):某个观测在某变量上没有有效取值(未作答、跳答、记录丢失等)。须在软件中显式声明为缺失,否则其占位编码(如
99、空格)可能被当作真实数值计入运算。 - 异常值 / 离群值(outlier):在数值上明显偏离其余观测的取值。可能是录入错误(须修正或删除),也可能是真实但极端的个案(须谨慎判断是否保留)。异常 ≠ 错误,识别出来不等于必须删除。
- 反向计分 / 反向题(reverse scoring / reverse-coded item):量表中措辞与该维度方向相反的题目。例如焦虑量表里“我能掌控 AI 工具”一题,得分越高反而代表越不焦虑。计分前须按公式
反转值 = (量表最大值 + 最小值) − 原始值重新编码(5 点量表即6 − x),使其方向与同维度其他题一致。 - 列表删除 / 成列删除(listwise deletion):只要某样本在所参与的任一变量上有缺失,就整行删除该样本。当缺失量小且近似随机时,是最简洁稳健的处理方式。
- 合成变量 / 量表得分(composite score):把同一维度的多道题加总或求均值得到的变量(如
Anxiety_Mean),用于代表该构念的总体水平,是后续相关、回归、中介分析的输入。
🗺️ 数据清洗五步法:流程总览
Worked Example:用 Case A 走完整套清洗(Step 1–5)
下面以 Case A 心理问卷数据集 为对象,逐步演示标准五步。该数据集原始 N=540,含 6 个人口统计变量与三个量表(Anxiety_1..12 / Strategy_1..8 / Efficacy_1..7,5 点李克特量表),其中 3 道反向题。每一步都给出 Jamovi 操作路径与“预期看到什么”,请在自己机器上跑出结果再核对——本课的数字应由你亲手得到。
Step 1:剔除无效样本
打开 Jamovi → 导入 case_A_questionnaire.csv(应为 540 行)。无效样本指作答质量不可信、保留会引入噪声的问卷,常见判据有三类:
- 作答时间过短:
Duration_Min < 3分钟(共 27 道题,3 分钟内难以认真读完作答)。 - 规律性应答(straight-lining):连续 10 题以上选同一选项,提示未逐题阅读。
- 反向题与正向题同向:理论上应相反的题作答方向一致,提示敷衍作答。
Jamovi 操作:
- Data 标签 → Filters → 新增过滤器:
Duration_Min >= 3 - 在 Case A 中,
Duration_Min < 3的样本共 35 份,过滤后剩余 505 行。
💡 判据要写进日志,且“先标记、后删除”更稳妥
三类判据各删了多少,应逐条记入清洗日志。规律性应答与反向题同向的判定,建议先生成标记变量、人工抽看若干份确认,再决定是否剔除——避免误删真实但风格特殊的作答。本课为简洁起见,以 Duration_Min 为主判据演示。
Step 2:处理缺失值
缺失值处理没有“唯一正确答案”,取决于缺失比例和缺失机制(是否随机)。常用策略按缺失量从小到大排列:
| 策略 | 适用情形 | 操作要点 |
|---|---|---|
| 列表删除 listwise(首选) | 缺失比例小(约 < 5%)且近似随机(MCAR) | 整行删除在任一所需变量上缺失的样本,简洁稳健 |
| 均值填补 mean imputation | 缺失约 5–10% 且近似随机 | 用该变量均值替换缺失格;会人为压低方差,须谨慎 |
| 多重插补 MICE | 缺失约 10–20% 且非完全随机 | 用 R/Python 的 mice 包多次插补再合并,保留不确定性 |
| 整行删除该样本 | 单个样本缺失过多(如某行缺失率 > 20%) | 该样本信息量过低,保留意义不大 |
🔧 第一步永远是“声明缺失”,否则一切处理无从谈起
若数据用 99、-1 或空格等占位编码标记缺失,必须先在软件里把它声明为缺失值,否则均值会被污染。Jamovi 操作:Data 标签 → 双击变量名进入 Setup → 在 “Missing values” 中填入占位编码(如 99)。声明之后,该值才会被排除在均值、相关等运算之外。
Case A 的实际处理(紧扣真实数据)
按数据字典与原始文件核对,Case A 在 35 份过短问卷之外,另有 5 行存在零星缺失(受访者编号 ID = 328、393、449、457、473),每行在 2–4 个量表题上空缺(例如 ID 457 缺 Anxiety_5 / Strategy_7 / Efficacy_1 / Efficacy_7)。这 5 行不在前述 35 份短作答之列,是另一批样本。
整体缺失比例很低(约 1%)且分布零散、近似随机,因此首选列表删除:直接删去这 5 行。删除后样本量为 505 − 5 = 500。
💡 为什么这里用列表删除而非均值填补
缺失量这么小、又近似随机时,列表删除损失的信息可忽略,却能避免均值填补“人为压低方差、虚增一致性”的副作用。数据字典里也给出了更一般的阈值(缺失 < 5% 可填补、单行 > 20% 删样本)作为其他情形的参考——策略随缺失量与机制而变,不是死规则。
Step 3:识别异常值
异常值(outlier)是数值上明显偏离其余观测的取值。识别它的目的,首先是“看见”而非“删除”——异常可能是录入错误(应修正或删除),也可能是真实但极端的个案(往往应保留)。两者要分开判断。
单变量异常(Z 分数法):把每个取值标准化为它偏离均值多少个标准差,
Z = (X − 该变量均值) / 该变量标准差
经验判据:|Z| > 3 视为候选异常值Jamovi 操作:Exploration → Descriptives → 选入待查变量 → 勾选 “Z scores” / “Standardized” → 查看是否有 |Z| > 3 的样本。
多变量异常(马氏距离 Mahalanobis distance):单看每一题都正常、但题项组合模式异常的样本(如各题作答彼此矛盾),需用马氏距离在回归分析前检测。Jamovi 可在 Regression 模块的 Assumption Checks 中输出。
Case A 的处理:标记,但不删除
在 Case A 这样的 5 点李克特量表上,取值被限制在 1–5,单题的 |Z| 一般不超过约 2,因此几乎不会出现 |Z| > 3 的单变量异常值。这恰恰提醒我们:|Z| > 3 是针对连续、近似无界变量的经验阈值,有界量表不宜机械套用——更稳妥的做法是看直方图的分布形态(是否有孤立的远端柱),或在多变量层面用马氏距离(Mahalanobis distance)识别异常作答模式。若某受访者全程选 1 或全程选 5,多是真实的强烈态度而非录入错误,应只标记、不删除,保留它们参与后续分析,并在日志中注明。
🚫 异常值不可“为了好看”而删
删除异常值会改变样本构成、影响结论的外推,属于需要交代理由的操作。除非确认是录入/设备错误,否则不应仅因为它“拉低了显著性”或“不好看”就删——那已越过数据清洗,滑向操纵数据。
Step 4:反向题反向计分(本课重点)
这是本课最高频的踩坑点,单独展开。
⚠️ 反向题处理错误会让后续所有分析失真
- 漏反转:反向题与同维度其他题方向相悖,信度系数 Cronbach's α 大幅下降(量级上可从约 .85 跌至 .4 一带),并扭曲变量方向,使本应负向的关系看起来变弱甚至变号。
- 反转两次:等于没反转再被倒置,结果同样错误。
- 结论:每道反向题有且仅反转一次,且要在计分前完成。
为什么是 6 − x:反向计分的通用公式是 反转值 = (量表最大值 + 最小值) − 原始值。Case A 是 5 点量表(最小 1、最大 5),故 5 + 1 = 6,公式即 6 − x。它把 1↔5、2↔4 对称翻转,3 不变,从而让“高分=更焦虑/策略更好/效能更高”的方向在全维度内统一。
Case A 的反向题(3 道,须核对数据字典)
| 反向题 | 所在量表 / 维度 | 题面含义(为何是反向) | 反转公式 |
|---|---|---|---|
Anxiety_4 | AI 焦虑 / 认知焦虑 | “我相信我能掌控 AI 工具”——得分越高越不焦虑 | Anxiety_4_R = 6 − Anxiety_4 |
Strategy_8 | 学习策略(单维) | “遇到困难我倾向于放弃”——得分越高策略越差 | Strategy_8_R = 6 − Strategy_8 |
Efficacy_7 | 学业自我效能(单维) | “我经常怀疑自己的学习能力”——得分越高效能越低 | Efficacy_7_R = 6 − Efficacy_7 |
🔍 哪几道是反向题,以数据字典为准,不要凭语气猜
反向题由量表设计决定,必须查数据字典核对,不能靠读题面语气自行判断——有些反向题措辞隐蔽,漏判或误判都会破坏整列。Case A 恰好 3 道,分别在三个量表中各一道。
Jamovi 操作(新建变量,而非覆盖原列):
Data 标签 → Compute(计算新变量)→ 新变量名:Anxiety_4_R
Formula(公式):6 - Anxiety_4
对 Strategy_8、Efficacy_7 重复,分别生成 Strategy_8_R、Efficacy_7_R建议生成
_R新列而非直接改写原列:保留原始值便于核对、出错可回退,也符合“原始数据只读、清洗在副本上做”的规范。
反转后逐值自检(5 点量表):
原值 1 → 5 原值 2 → 4 原值 3 → 3 原值 4 → 2 原值 5 → 1验证方法:反转正确的话,Anxiety_4_R 与同维度其他认知焦虑题(Anxiety_1/2/3)应呈正相关(约 +.3 以上)。若反转后仍与同维度题负相关,说明这一步出了错——这是判断反向题是否处理对的最直接证据。
Step 5:计算量表均分(合成变量)
把同一维度的题项求均值(或加总),得到代表该构念的合成变量。关键:参与计算的必须是反转后的版本——焦虑用 Anxiety_4_R、策略用 Strategy_8_R、效能用 Efficacy_7_R,绝不能再混入未反转的原列。
Anxiety_Mean = (Anxiety_1 + Anxiety_2 + Anxiety_3 + Anxiety_4_R +
Anxiety_5 + … + Anxiety_12) / 12 # 用 4_R,不用 4
Strategy_Mean = (Strategy_1 + … + Strategy_7 + Strategy_8_R) / 8 # 用 8_R
Efficacy_Mean = (Efficacy_1 + … + Efficacy_6 + Efficacy_7_R) / 7 # 用 7_R这三个合成变量(Anxiety_Mean 为中介路径的 X、Strategy_Mean 为中介 M、Efficacy_Mean 为因变量 Y)正是后续相关、回归、中介分析的直接输入。
💡 用总分还是均分?
- 总分(sum):便于与采用总分报告的文献直接对照。
- 均分(mean):保持原量表的 1–5 取值范围,量纲直观、跨研究可比性强;缺答时按有效题求均值也更稳健。
- 本课推荐均分——报告时形如“某量表均分 M=3.2、SD=0.7”(落在 1–5 区间)比“总分 38.5”更易解读、也更便于跨研究比较;具体数值以你自己跑出的为准。均分与总分只是线性变换,统计推断结论一致。
AI 辅助:让模型当“清洗操作向导”,而非“代算员”
数据清洗里,大模型的恰当用法是指导操作流程:把每一步翻译成具体菜单路径、提醒易漏环节、说明“预期看到什么”。但要在提示词里明确划清红线——只要操作指导,绝不要它给出任何具体数字结果(样本量、均值、反转后的值都必须你自己跑)。下面这段提示词正是按此约束写成,可一键复制:
【Role】资深 Jamovi 数据清洗专家。
【任务】我刚导入 case_A_questionnaire.csv (540 行 × 33 列)。
请逐步指导我完成完整数据清洗,每步给出 Jamovi 具体菜单路径和参数:
1. 剔除 Duration_Min < 3 的样本
2. 列表删除任何核心量表题缺失的行
3. 用 Z-score 识别 |Z|>3 的异常值,标记但暂不删除
4. 反转 Anxiety_4 / Strategy_8 / Efficacy_7 三个反向题(生成 _R 列)
(公式: 新列 _R = 6 - 原值)
5. 计算三个量表的均分:Anxiety_Mean / Strategy_Mean / Efficacy_Mean
6. 给出最终清洗后样本量和各变量描述统计
【约束】
- 严禁直接给我数字结果(我要自己跑出来验证)
- 严禁让我跳过任何步骤
- 每步操作完后告诉我"预期看到什么"以便我验证清洗日志(必做,是可复现性的凭据)
每次清洗都要留一份完整日志:哪一步、删/改了多少、剩余多少、为什么。它既方便日后复现,也是应对盲审“你的样本是怎么从 540 变成 500 的”这类追问的直接证据。Case A 的日志如下:
| 步骤 | 操作 | 删除/修改数 | 剩余 N | 备注 |
|---|---|---|---|---|
| 初始 | 导入原始数据 | — | 540 | 原始样本 |
| Step 1 | 剔除 Duration_Min < 3 | −35 | 505 | 35 份过短作答 |
| Step 2 | 列表删除含缺失的行 | −5 | 500 | ID 328/393/449/457/473,与上一步不重叠 |
| Step 3 | 异常值识别 | 0(标记不删) | 500 | 有界量表 |Z|>3 基本不出现,改看分布形态/马氏距离,未触发删除 |
| Step 4 | 反向题反转 | —(新增 3 列) | 500 | 生成 Anxiety_4_R / Strategy_8_R / Efficacy_7_R |
| Step 5 | 计算量表均分 | —(新增 3 列) | 500 | Anxiety_Mean / Strategy_Mean / Efficacy_Mean |
| 终态 | — | 共删 40 行 | 500 | 可进入统计分析 |
注意 Step 1 与 Step 2 删除的是两批互不重叠的样本(35 份短作答 + 5 行零星缺失),故
540 − 35 − 5 = 500,加减得清清楚楚——日志里这种可对账的明细,正是盲审看重的。
逐环节对照:清洗“做对 vs 做砸”
清洗每一步都有“看起来做了、其实做砸了”的常见走样。下表把五步逐一拆开并排对照,帮你判断自己每一步是真做到位,还是只走了形式。
| 环节 | 做砸 ❌ | 做对 ✅ | 为什么 |
|---|---|---|---|
| 无效样本 | 一行不删,“样本越多越好” | 按作答时长、规律性应答等判据剔除并记录每条删了多少 | 无心作答是随机噪声,留着会稀释真实关系,而非增加信息 |
| 缺失值 | 把 99/空格直接计入均值 | 先声明缺失,再按比例与机制选列表删除/填补 | 未声明的占位编码会被当真实分值,污染整列统计量 |
| 异常值 | 凡 |Z|>3 一律删,把不显著的极端值删到“变显著” | 标记后判断是录入错误还是真实极端,无错误证据则保留 | 异常≠错误;为结果好看而删属于操纵数据 |
| 反向题 | 漏反转,或对原列反转两次,或凭语气猜哪道是反向题 | 查字典确认 3 道、各 6−x 反转一次、生成 _R 新列并验证正相关 | 反向题处理错会直接拉低 α、扭曲方向,是本课最致命的一步 |
| 合成变量 | 求均分时仍混入未反转的原列 | 用 _R 列与正向题一起求均分,量纲统一 | 混入原列等于反转白做,合成分数方向被污染 |
💡 一句话判据
判断清洗是否到位,对每一步只问三件事:删改有没有依据?依据有没有记进日志?反向题与缺失值有没有先处理再计算? 三者齐备,数据才算干净。
跨案例迁移:把同一套清洗逻辑用到 Case B 经管面板
清洗五步不是问卷数据专属。换一个完全不同的学科与数据结构,“先识别错误、再决定处理、全程留痕” 的逻辑依然适用,只是每一步的具体判据随数据类型而变。下面用 Case B 经管面板数据 演示迁移。
Case B 是省级面板:30 省 × 10 年(2014—2023)= 300 个观测,列含数字经济指数 DigEcon_Index、每万人专科以上人力资本 HumanCap_per10k、创新指数 Innovation_Index、第三产业占比 IndustryStr_Tertiary。它没有反向题,但有面板数据特有的清洗关注点:
| 清洗环节 | 问卷数据(Case A)怎么做 | 面板数据(Case B)怎么做 | 共同逻辑 |
|---|---|---|---|
| 无效/异常单元 | 删过短、规律性应答问卷 | 查某省某年是否有录入错误、口径突变(如指数突然跳零) | 先识别明显不可信的观测 |
| 缺失值 | 5 行零星缺失,列表删除 | 面板缺失更敏感:整行删会破坏“省×年”平衡,常按变量插值或保留非平衡面板 | 处理前先判断缺失机制与对结构的影响 |
| 方向/编码统一 | 反向题 6−x 反转 | 无反向题;但需统一量纲与口径(如人均化、价格平减),并检查强相关变量 | 让变量含义在全数据内一致、可比 |
| 多重共线性预检 | 量表内题项高相关是正常的 | DigEcon↔HumanCap 相关高达 r≈0.86,须在回归前查 方差膨胀因子 VIF | 进分析前体检自变量之间的关系 |
🔍 Case B 的清洗重点:在回归前预检多重共线性
多重共线性(multicollinearity) 指自变量之间高度相关,会让回归系数的估计不稳、标准误虚高、符号易反常。Case B 中 DigEcon_Index 与 HumanCap_per10k 的相关高达 r≈0.86,对应的方差膨胀因子 VIF(HumanCap)≈8、VIF(DigEcon)≈5.5——按常见经验线(VIF>10 为严重、>5 需关注),这里需关注但尚未到严重档。这意味着把两者同时放进回归要谨慎解释系数,或考虑只保留其一、做稳健性检验。这一步属于“清洗后、建模前”的体检,与问卷数据的反向题处理同属“别带着隐患进分析”。
迁移要点:从 Case A 到 Case B,清洗的目标没变(让进入分析的数据干净、可信、可复现),变的只是判据——问卷重在反向题与无效作答,面板重在缺失对结构的影响与共线性预检。把“判据”换成你学科数据的特征即可。
常见误区与纠正
清洗阶段的错误高度集中在少数几类,且多半“不报错”。下表照着对号入座即可:
| 常见误区 | 症状 | 纠正方法 |
|---|---|---|
| 反向题漏反转 / 反转两次 | 信度 α 异常偏低;本应负向的关系变弱或变号 | 查字典确认反向题清单,各 6−x 反转一次、生成 _R 列,验证与同维度题正相关 |
| 缺失值未声明 | 均值/方差被 99、空格污染,数值离谱 | 先在软件里把占位编码声明为缺失,再做删除或填补 |
| 为显著性删异常值 | 删了几个极端值后 p 值“变好看” | 异常值只在确认是错误时删;真实极端值标记保留,删除须写明理由 |
| 求均分混入原列 | 反转白做,合成变量方向被污染 | 计算时一律用 _R 列替换对应原列 |
| 凭题面语气猜反向题 | 漏判或误判反向题,破坏整列 | 反向题以数据字典/量表说明为准,不靠主观语感 |
| 不留清洗日志 | 样本量来历说不清,盲审无法复现 | 每步记录删改数、剩余 N 与原因,做到可对账 |
| 直接改写原始数据 | 出错无法回退,原始值丢失 | 原始数据只读,清洗在副本上做,新增 _R/均分列而非覆盖 |
输出/结果不理想?如何排查与迭代
清洗后若发现信度异常、描述统计离谱或下一步分析“怎么都不对”,先别怀疑统计方法,按下面顺序回溯——问题几乎都出在清洗某一步:
- 信度 α 异常低(如 < .5)→ 第一嫌疑是反向题。回到 Step 4,核对 3 道反向题是否都反转了、是否误反转了正向题、求均分时是否用了
_R列。这是最高频的单一病因。 - 某变量均值离谱(如远超 5 或为负)→ 查缺失值声明。回到 Step 2,确认
99/空格已声明为缺失,没有被当作真实分值计入。 - 样本量对不上 / 盲审问起→ 查日志。把删除明细逐行对账(如 Case A 的
540 − 35 − 5 = 500),确认每一步删了哪批、有无重复计数。 - 回归系数符号反常、标准误异常大(多为面板/多自变量)→ 查共线性。如 Case B,回到建模前的 VIF 预检,考虑剔除高度相关的自变量之一。
- 让 AI 帮忙定位,但只让它“读你给的结果”。可以把你跑出的信度表、描述统计粘给模型请它解读异常成因,但仍不能让它替你重算——它没有你的原始数据,给出的任何数字都是编造。
一句话
结果不对,先回清洗、再怀疑方法。反向题 → 缺失声明 → 日志对账 → 共线性,四个回溯点覆盖了绝大多数“清洗后翻车”。
边界与局限:清洗能解决什么、不能解决什么
数据清洗是把已知错误清除干净的工序,但它有明确边界,越界使用反而有害。
| 边界 / 失效场景 | 为什么会这样 | 你应该怎么做 |
|---|---|---|
| 清洗修不了“数据本身的烂” | 样本有偏、测量工具差、问卷设计缺陷,清洗都救不回——它只能删错误,造不出有效信息。 | 清洗前把好抽样与量表质量关;垃圾数据再清洗也是垃圾。 |
| 删样本会改变样本构成 | 大量剔除(尤其按某变量取值删)可能引入选择偏差,损害结论外推。 | 删除须有据、留痕、适度;交代删除对样本代表性的影响。 |
| 均值填补会“制造”确定性 | 用均值补缺会人为压低方差、虚增一致性,让标准误偏小、显著性虚高。 | 缺失小用列表删除;非随机缺失用多重插补保留不确定性,慎用单一均值填补。 |
| 异常值判据是经验而非真理 | |Z|>3 只是约定,有界量表、偏态分布下并不可靠。 | 结合分布形态与实质判断,区分“录入错误”与“真实极端”。 |
| AI 不能替你做清洗判断与计算 | 模型看不到你的原始数据,对“删不删某行”“反转后是几分”只能猜或编(hallucination)。 | AI 只用于解释步骤、整理日志;删样本的裁定与所有统计量由你在软件里完成。 |
🚧 守住本模块红线
清洗的两项核心责任——“这一行/这个值该不该处理”的判断,与“反转后的分值、清洗后的样本量、各变量均值”的计算——都必须由研究者亲自完成。AI 可以告诉你“反向题要 6−x”,但反转后到底是几分、α 是多少、N 还剩几个,只能你在软件里跑出来。一旦模型开始报具体统计量,几乎一定在编造。
📦 本课交付物
按本节实操任务完成并提交以下内容(提交 AI 初审),按 Module_Rubrics.md 对应维度评分:
- [ ] 清洗日志:完整 5 步操作的删除/修改数、各步剩余样本量与原因(可对账)
- [ ] 反向题反转验证:截图证明
Anxiety_4_R与其他认知焦虑题正相关 - [ ] 清洗后描述统计:3 个均分变量(
Anxiety_Mean/Strategy_Mean/Efficacy_Mean)的均值/SD/最小值/最大值 - [ ] AI 协作日志:清洗向导提示词的“指令 → AI 操作指导 → 你跑出的真实结果”记录(注意 AI 不得给数字)
- [ ] 保存清洗后数据:导出为
case_A_cleaned.csv用于下一课,原始数据保留只读备份
🏁 本章小结
把本课凝练成可据以复习的几条要点:
- 核心理念:统计方法只忠实计算你喂给它的数据——“垃圾进,垃圾出(GIGO)”。清洗的意义,是在数据进入运算前清除已知错误,因为错误一旦进入聚合统计量就极难剔除,且这类错误通常不报错,最危险。
- 标准五步:剔除无效样本 → 处理缺失值 → 识别异常值 → 反向题反向计分 → 计算量表均分。Case A 由此从 540 行清洗为 500 行(
540 − 35 − 5 = 500)。 - 本课重点(反向题):反向题须查数据字典确认,按
(最大值+最小值)−原始值(5 点量表即6−x)只反转一次,生成_R新列,并用“与同维度题正相关”验证。漏转或转两次都会大幅拉低 Cronbach's α 并扭曲方向。 - 缺失与异常的分寸:缺失先声明再处理,小且随机用列表删除;异常值先标记、不轻删,异常≠错误,为显著性删值属操纵数据。
- 全程留痕:清洗日志记录每步删改数、剩余 N 与原因,是可复现性与盲审应答的凭据。
- 可迁移:同一套“识别错误→决定处理→留痕”的逻辑适用于面板等其他数据,只是判据改变(如 Case B 在建模前需预检多重共线性 VIF)。
- 红线:AI 只解释步骤、整理日志;删样本的判断与所有统计量(反转值、样本量、均值、α)必须由你在软件里亲自跑出,模型报具体数字即为编造。
自测清单(可保留逐项打勾)
- [ ] 我能用“垃圾进垃圾出”说清为什么必须先清洗,并指出这类错误“不报错”的危险性。
- [ ] 我执行了完整 5 步清洗流程,Case A 剩余样本为 500 行,且能说清
540 − 35 − 5的来历。 - [ ] 反向题反转正确执行:对
Anxiety_4 / Strategy_8 / Efficacy_7各做了一次6−x反转、生成_R列,并验证了与同维度题正相关。 - [ ] 我能解释反向题漏转 / 转两次为何会拉低 α 并扭曲方向。
- [ ] 我对缺失值先声明再处理,理解列表删除与均值填补各自的适用与代价。
- [ ] 我把异常值“标记不轻删”,能区分录入错误与真实极端值。
- [ ] 我用均分而非总分汇报,且参与计算的是
_R列。 - [ ] 我的清洗日志可对账,清洗后数据已另存(如
case_A_cleaned.csv),原始数据保留只读备份。
✍️ 思考与练习
下列练习用于把本节概念用起来(区别于“本课交付物”里的任务),建议写在你的本地笔记中。
练习 1(概念辨析)。 用“垃圾进,垃圾出(GIGO)”解释:为什么“反向题漏反转”比“代码写错语法”更危险?(提示:从“是否报错”和“错误进入哪一层”两个角度作答。)
好答案要点:语法错会立刻报错、逼你修;反向题漏转不报错,软件照常出结果,错误已混入信度、相关、回归等每一个聚合统计量,事后从结果里几乎无法反推剔除;因此“沉默的错误”比“吵闹的错误”更危险。
练习 2(反向题实操,紧扣 Case A)。 取 Case A,对反向题 Anxiety_4(题面“我相信我能掌控 AI 工具”)写出反转公式与逐值对照(1→? … 5→?),说明为什么用 6−x 而非别的常数,并给出一个反转正确的验证方法。
好答案要点:公式
Anxiety_4_R = 6 − Anxiety_4,因 5 点量表最大5+最小1=6;1↔5、2↔4、3 不变;验证方法是检查Anxiety_4_R与同维度Anxiety_1/2/3是否转为正相关(约 +.3 以上),若仍负相关则反转出错。
练习 3(缺失与样本量,紧扣 Case A)。 Case A 原始 540 行,其中 35 份 Duration_Min < 3、另有 5 行(ID 328/393/449/457/473)存在零星缺失且与前 35 份不重叠。请写出清洗后样本量的算式,说明这 5 行为何选列表删除而非均值填补,并指出若它们恰好也在那 35 份里、算式会有何不同。
好答案要点:
540 − 35 − 5 = 500;缺失量极小(约 1%)且近似随机时列表删除损失可忽略,又能避免均值填补压低方差;若 5 行与 35 份重叠,则不能简单再减 5(会重复计数),需按并集去重计算剩余样本。
练习 4(边界识别,紧扣红线)。 你把清洗后的 Case A 描述统计发给 AI,请它“顺便帮我把反向题反转后的 Cronbach's α 也算出来”。它很快回了一个“α = 0.86”。请指出这踩中了本课哪条边界,你会怎么处理。
好答案要点:AI 看不到你的原始数据,任何具体统计量都是编造(hallucination),违反“AI 只翻译已算出的结果、绝不代算”的红线;正确做法是自己在 Jamovi/SPSS 里跑出 α,再把真实结果交给 AI 翻译成学术语言,而非采信它“算”的数字。
