跳到主要内容

直接删除

一、直观理解:缺了关键字段的问卷,整张作废还是只撕几栏?​

直接删除(Complete-Case Analysis / Listwise Deletion,有时也包括按列删变量)是最朴素的缺失处理:凡是分析所需字段不完整的样本,整行不用;若某一变量缺失过于严重,也可以整列不用。

好比回收 200 份问卷,其中 12 份没填收入。若回归必须用到收入,这 12 份在该模型里无法贡献完整信息,于是“整张不作数”。规则透明、实现一行代码、不会引入任何填补出来的“假数据”,因此常常作为数模论文里的第一基线。

但作废问卷的代价同样真实:

  • 有效样本量变少,标准误变大,检验更难显著;
  • 若“不填收入”的人本身更有钱或更穷,删掉后样本结构被拧歪,估计量可能有偏;
  • 时间序列删点会在时间轴上打洞,破坏滞后项与连续性;
  • 多变量同时分析时,listwise 删除往往比某一列的缺失率看起来“更狠”——缺任何一个所需变量都整行出局。

因此,直接删除不是“懒政默认”,而是一种有明确适用边界的策略:缺失少、机制接近完全随机、且样本量仍充足时,它干净可靠;否则只适合当对照,而不是终局方案。

二、适用场景与优缺点​

类型说明
适用场景缺失比例很低(经验上单变量 <5%,且 listwise 后仍充足);有证据或合理理由认为缺失近似 MCAR;需要可完全复现、无插补假设的基线模型;某变量缺失率极高且非关键,删列比乱填更安全;赛题时限紧,先给出可运行闭环再迭代。
核心优点实现简单、无额外参数;不引入插补偏差与虚假精度;所有分析基于真实观测;便于与插补方法做前后对比。
局限与缺点在 MAR / MNAR 下通常有偏;样本流失可远大于“平均缺失率”;降低功效;破坏纵向 / 空间邻接结构;多变量时信息浪费严重(只用完整行,部分观测被扔掉)。

使用直接删除前通常需要完成以下检查:

  1. 统计每个变量、每个样本的缺失率,画缺失模式图(哪些字段经常一起缺);
  2. 比较“完整样本”与“含缺失样本”在关键变量、标签上的分布差异;
  3. 判断更像 MCAR、MAR 还是 MNAR(至少做可观察的差异检验与业务推理);
  4. 预估 listwise 后的剩余 nn,是否还支撑拟用模型;
  5. 对时间序列 / 面板数据,评估删点是否造成不规则间隔。

三、核心原理:完整案例与缺失机制​

1. Listwise:按行保留完整样本​

设分析用到的变量集合为 J\mathcal{J}。定义指示

Mi={1,对所有 j∈J,  xij 均被观测0,否则M_i= \begin{cases} 1, & \text{对所有 }j\in\mathcal{J},\; x_{ij}\text{ 均被观测}\\ 0, & \text{否则} \end{cases}

完整案例数据集为 {i:Mi=1}\{i:M_i=1\}。之后的均值、回归、PCA 等都只在该子集上计算。

2. Pairwise:按分析对保留​

算相关矩阵时,每一对变量 (j,k)(j,k) 使用“这两列都非缺失”的样本。两两样本量不同,矩阵可能非正定,后续 PCA / 求逆会出问题。竞赛里若无特殊理由,更推荐 listwise 或先插补。

3. 按列删除​

若变量 jj 缺失率极高,或缺失机制恶劣且该变量非核心,可直接不进入模型。这是变量选择问题,应结合信息量与业务必要性,而不是只看缺失百分比。

4. 三种缺失机制(决定删除是否安全)​

  • MCAR(Missing Completely At Random):缺失与任何观测或未观测值都无关。完整案例是原总体的随机子样,估计通常无偏,只是更不精确。
  • MAR(Missing At Random):缺失可被其他已观测变量解释(如“年龄大的人更少填收入”),但与自身未观测值无关。直接删除常有偏;多重插补、基于模型的方法更合适。
  • MNAR(Missing Not At Random):缺失依赖未观测的自身值(如收入越高越不愿填)。删除与简单插补都可能严重偏,需要更强假设或专门调查设计。

5. 偏差的直观来源​

若高收入者更常缺收入字段,listwise 后样本收入均值偏低,用收入预测消费的斜率也会被扭曲。删除“看起来只是少了几行”,实质是重加权了总体。

四、关键决策 / 如何选参数​

直接删除几乎没有连续超参数,但有一组必须写进论文的规则选择。

1. 删行、删列,还是两者结合​

情况常见策略
个别行缺很多字段删这些行
个别列缺很多,且非关键删这些列
关键列有中等缺失不要轻易删列,考虑插补
行列都乱先定分析变量集,再评估 listwise 剩余量

经验上可先删“缺失率 >50% 且非核心”的列,再对剩余矩阵做行删除或插补——但阈值应结合 n,pn,p 与题目,不是铁律。

2. 可接受的流失比例​

  • 剩余样本仍满足模型最小样本需求(如回归 nn 与 pp 的经验比);
  • 关键子群(某省份、某故障类)不能被删空;
  • 删除前后,类别比例、时间覆盖、空间覆盖变化可控。

3. 分析变量集要先冻结​

先做变量选择再 listwise。若把 30 个变量全塞进 J\mathcal{J},缺失会“连环淘汰”样本;若模型实际只用 5 个变量,应按这 5 个定义完整案例。

4. 必须做的对照​

至少报告:

  • 删除前 n0n_0、删除后 n1n_1、流失率;
  • 删除前后关键描述统计;
  • 若可能,与简单插补或指示变量模型的结论差异。

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", ["年龄", "消费"]); % 只按指定列

六、如何解释结果​

直接删除的“结果”主要不是新数值,而是样本定义发生了变化。解释时应回答:

  1. 谁被留下了?谁被排除了?
  2. 留下的人是否仍代表原问题关心的总体?
  3. 结论对“删除规则”是否敏感?

规范报告建议包含:

  1. 原始样本量、变量数;
  2. 各变量缺失率与主要缺失模式;
  3. 删除规则(listwise 的变量集 / 删列阈值);
  4. 删除后样本量与流失率;
  5. 删除前后关键变量分布、类别比例、时间跨度对比;
  6. 关于 MCAR / MAR / MNAR 的简要判断与依据;
  7. 最终模型是在哪个样本上拟合的;
  8. 若采用插补作为对照,结论是否一致。

若完整案例与含缺失案例在年龄、地区、标签率上显著不同,应在论文局限性中明确:直接删除可能引入选择偏差,结论外推需谨慎。

七、常见误区​

1. 只报告“缺失率 3%”,不报告 listwise 后的流失​

五个变量各缺 3% 且模式分散时,完整行可能少掉远不止 3%。

2. 缺失与结果相关却仍声称无偏​

例如“设备故障后的传感器读数缺失”,删掉的恰是故障段,故障率会被低估。

3. 在时间序列里随意删点后仍当等间隔序列建模​

自相关、差分、季节项都会错位。

4. 把 pairwise 相关矩阵直接送进需要正定矩阵的方法​

可能出现负特征值,后续步骤莫名失败或结果不稳。

5. 没有基线就直接上复杂插补​

应先给出直接删除(或简单插补)基线,再说明复杂方法带来的增量,避免“黑箱填补”不可比。

八、小结​

直接删除只保留分析所需字段完整的样本(或丢掉不可救的变量),规则清晰、不捏造数据,是缺失处理的重要基线。

它的核心思想可以概括为:

与其编造看不到的值,不如老实承认:这份分析只建立在信息完整的那部分样本上——但必须证明“完整的那部分”没有系统性偏掉。

当缺失很少且近似 MCAR、剩余样本仍足够时,它往往是最干净的选择;一旦缺失与关键特征或结果相关,或时间结构重要,就应转向插补或专门模型,并把删除法保留为对照,而不是唯一答案。