直接删除
一、直观理解:缺了关键字段的问卷,整张作废还是只撕几栏?
直接删除(Complete-Case Analysis / Listwise Deletion,有时也包括按列删变量)是最朴素的缺失处理:凡是分析所需字段不完整的样本,整行不用;若某一变量缺失过于严重,也可以整列不用。
好比回收 200 份问卷,其中 12 份没填收入。若回归必须用到收入,这 12 份在该模型里无法贡献完整信息,于是“整张不作数”。规则透明、实现一行代码、不会引入任何填补出来的“假数据”,因此常常作为数模论文里的第一基线。
但作废问卷的代价同样真实:
- 有效样本量变少,标准误变大,检验更难显著;
- 若“不填收入”的人本身更有钱或更穷,删掉后样本结构被拧歪,估计量可能有偏;
- 时间序列删点会在时间轴上打洞,破坏滞后项与连续性;
- 多变量同时分析时,listwise 删除往往比某一列的缺失率看起来“更狠”——缺任何一个所需变量都整行出局。
因此,直接删除不是“懒政默认”,而是一种有明确适用边界的策略:缺失少、机制接近完全随机、且样本量仍充足时,它干净可靠;否则只适合当对照,而不是终局方案。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 缺失比例很低(经验上单变量 <5%,且 listwise 后仍充足);有证据或合理理由认为缺失近似 MCAR;需要可完全复现、无插补假设的基线模型;某变量缺失率极高且非关键,删列比乱填更安全;赛题时限紧,先给出可运行闭环再迭代。 |
| 核心优点 | 实现简单、无额外参数;不引入插补偏差与虚假精度;所有分析基于真实观测;便于与插补方法做前后对比。 |
| 局限与缺点 | 在 MAR / MNAR 下通常有偏;样本流失可远大于“平均缺失率”;降低功效;破坏纵向 / 空间邻接结构;多变量时信息浪费严重(只用完整行,部分观测被扔掉)。 |
使用直接删除前通常需要完成以下检查:
- 统计每个变量、每个样本的缺失率,画缺失模式图(哪些字段经常一起缺);
- 比较“完整样本”与“含缺失样本”在关键变量、标签上的分布差异;
- 判断更像 MCAR、MAR 还是 MNAR(至少做可观察的差异检验与业务推理);
- 预估 listwise 后的剩余 ,是否还支撑拟用模型;
- 对时间序列 / 面板数据,评估删点是否造成不规则间隔。
三、核心原理:完整案例与缺失机制
1. Listwise:按行保留完整样本
设分析用到的变量集合为 。定义指示
完整案例数据集为 。之后的均值、回归、PCA 等都只在该子集上计算。
2. Pairwise:按分析对保留
算相关矩阵时,每一对变量 使用“这两列都非缺失”的样本。两两样本量不同,矩阵可能非正定,后续 PCA / 求逆会出问题。竞赛里若无特殊理由,更推荐 listwise 或先插补。
3. 按列删除
若变量 缺失率极高,或缺失机制恶劣且该变量非核心,可直接不进入模型。这是变量选择问题,应结合信息量与业务必要性,而不是只看缺失百分比。
4. 三种缺失机制(决定删除是否安全)
- MCAR(Missing Completely At Random):缺失与任何观测或未观测值都无关。完整案例是原总体的随机子样,估计通常无偏,只是更不精确。
- MAR(Missing At Random):缺失可被其他已观测变量解释(如“年龄大的人更少填收入”),但与自身未观测值无关。直接删除常有偏;多重插补、基于模型的方法更合适。
- MNAR(Missing Not At Random):缺失依赖未观测的自身值(如收入越高越不愿填)。删除与简单插补都可能严重偏,需要更强假设或专门调查设计。
5. 偏差的直观来源
若高收入者更常缺收入字段,listwise 后样本收入均值偏低,用收入预测消费的斜率也会被扭曲。删除“看起来只是少了几行”,实质是重加权了总体。
四、关键决策 / 如何选参数
直接删除几乎没有连续超参数,但有一组必须写进论文的规则选择。
1. 删行、删列,还是两者结合
| 情况 | 常见策略 |
|---|---|
| 个别行缺很多字段 | 删这些行 |
| 个别列缺很多,且非关键 | 删这些列 |
| 关键列有中等缺失 | 不要轻易删列,考虑插补 |
| 行列都乱 | 先定分析变量集,再评估 listwise 剩余量 |
经验上可先删“缺失率 >50% 且非核心”的列,再对剩余矩阵做行删除或插补——但阈值应结合 与题目,不是铁律。
2. 可接受的流失比例
- 剩余样本仍满足模型最小样本需求(如回归 与 的经验比);
- 关键子群(某省份、某故障类)不能被删空;
- 删除前后,类别比例、时间覆盖、空间覆盖变化可控。
3. 分析变量集要先冻结
先做变量选择再 listwise。若把 30 个变量全塞进 ,缺失会“连环淘汰”样本;若模型实际只用 5 个变量,应按这 5 个定义完整案例。
4. 必须做的对照
至少报告:
- 删除前 、删除后 、流失率;
- 删除前后关键描述统计;
- 若可能,与简单插补或指示变量模型的结论差异。
5. 时间序列特殊规定
优先:只删无法修复的坏段、或改用能处理不规则时间的模型;避免在自回归特征已生成后再随意 rmmissing,否则滞后对齐错位。
五、MATLAB 示例
% 构造含缺失的小表:列 = 年龄、收入、消费
X = [
25, 5000, 2000;
31, NaN, 2800;
45, 12000, NaN;
29, 7000, 2500;
52, NaN, 4000;
36, 9000, 3200
];
varNames = ["年龄", "收入", "消费"];
% 缺失概览
missRateVar = mean(isnan(X), 1);
missRateRow = mean(isnan(X), 2);
fprintf("各变量缺失率:\n");
disp(array2table(missRateVar, "VariableNames", varNames));
fprintf("各样本缺失比例:\n");
disp(missRateRow');
% ----- Listwise:任意所需列缺失则整行删除 -----
X_listwise = rmmissing(X);
fprintf("Listwise: %d 行 -> %d 行\n", size(X, 1), size(X_listwise, 1));
% 仅基于部分变量定义完整案例(例如回归只用年龄与消费)
cols = [1, 3];
completeMask = all(~isnan(X(:, cols)), 2);
X_reg = X(completeMask, cols);
fprintf("仅年龄+消费完整: 保留 %d 行\n", size(X_reg, 1));
% ----- 按列:删除缺失率过高的变量 -----
maxMiss = 0.4;
keepCols = missRateVar <= maxMiss;
X_dropCol = X(:, keepCols);
fprintf("保留变量:\n");
disp(varNames(keepCols));
% ----- 比较完整案例与含缺失案例的年龄分布 -----
age_complete = X(all(~isnan(X), 2), 1);
age_incomplete = X(any(isnan(X), 2), 1);
fprintf("完整行年龄均值 = %.2f (n=%d)\n", mean(age_complete), numel(age_complete));
fprintf("含缺失行年龄均值 = %.2f (n=%d)\n", mean(age_incomplete), numel(age_incomplete));
% 可视化缺失模式(1=缺失)
figure;
imagesc(isnan(X));
colorbar;
xticks(1:numel(varNames));
xticklabels(varNames);
ylabel("样本编号");
title("缺失模式(黄/亮 = 缺失)");
% 删除前后描述统计
disp("删除前 mean(omitnan):");
disp(mean(X, 1, "omitnan"));
disp("Listwise 后 mean:");
disp(mean(X_listwise, 1));
若数据在 table 中:
T = array2table(X, "VariableNames", cellstr(varNames));
T2 = rmmissing(T); % 任意列缺失则删行
T3 = rmmissing(T, "DataVariables", ["年龄", "消费"]); % 只按指定列
六、如何解释结果
直接删除的“结果”主要不是新数值,而是样本定义发生了变化。解释时应回答:
- 谁被留下了?谁被排除了?
- 留下的人是否仍代表原问题关心的总体?
- 结论对“删除规则”是否敏感?
规范报告建议包含:
- 原始样本量、变量数;
- 各变量缺失率与主要缺失模式;
- 删除规则(listwise 的变量集 / 删列阈值);
- 删除后样本量与流失率;
- 删除前后关键变量分布、类别比例、时间跨度对比;
- 关于 MCAR / MAR / MNAR 的简要判断与依据;
- 最终模型是在哪个样本上拟合的;
- 若采用插补作为对照,结论是否一致。
若完整案例与含缺失案例在年龄、地区、标签率上显著不同,应在论文局限性中明确:直接删除可能引入选择偏差,结论外推需谨慎。
七、常见误区
1. 只报告“缺失率 3%”,不报告 listwise 后的流失
五个变量各缺 3% 且模式分散时,完整行可能少掉远不止 3%。
2. 缺失与结果相关却仍声称无偏
例如“设备故障后的传感器读数缺失”,删掉的恰是故障段,故障率会被低估。
3. 在时间序列里随意删点后仍当等间隔序列建模
自相关、差分、季节项都会错位。
4. 把 pairwise 相关矩阵直接送进需要正定矩阵的方法
可能出现负特征值,后续步骤莫名失败或结果不稳。
5. 没有基线就直接上复杂插补
应先给出直接删除(或简单插补)基线,再说明复杂方法带来的增量,避免“黑箱填补”不可比。
八、小结
直接删除只保留分析所需字段完整的样本(或丢掉不可救的变量),规则清晰、不捏造数据,是缺失处理的重要基线。
它的核心思想可以概括为:
与其编造看不到的值,不如老实承认:这份分析只建立在信息完整的那部分样本上——但必须证明“完整的那部分”没有系统性偏掉。
当缺失很少且近似 MCAR、剩余样本仍足够时,它往往是最干净的选择;一旦缺失与关键特征或结果相关,或时间结构重要,就应转向插补或专门模型,并把删除法保留为对照,而不是唯一答案。