You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅插补时间序列数据中的间断缺失值(intermittent missing),保留单调缺失值?

问题描述

我有一个时间有序的数据集,缺失值分为两类:

  • 单调缺失值(monotone missing):连续缺失序列且包含最终值
  • 间断缺失值(intermittent missing):与最终值之间至少有一个非缺失值隔开的缺失值

我需要通过多重插补生成多个数据集版本,仅对间断缺失值进行插补,单调缺失值保持缺失状态,后续再用其他策略处理。但使用mice包运行代码后,只有第二行的间断缺失被插补,第一、三行标记的间断缺失未被处理。

复现代码
library(dplyr)
library(mice)

set.seed(2024)

df <- tribble(
  ~v1,  ~v2,  ~v3,  ~v4,  ~v5,
  5,    NA,   3,    9,    NA,
  6,    6,    NA,   1,    1,
  2,    NA,   2,    NA,   NA,
  4,    8,    7,    NA,   NA,
  7,    4,    2,    5,    4
)

mask <- tribble(
  ~v1,      ~v2,    ~v3,      ~v4,      ~v5,
  FALSE,    TRUE,   FALSE,    FALSE,    FALSE,
  FALSE,    FALSE,  TRUE,     FALSE,    FALSE,
  FALSE,    TRUE,   FALSE,    FALSE,    FALSE,
  FALSE,    FALSE,  FALSE,    FALSE,    FALSE,
  FALSE,    FALSE,  FALSE,    FALSE,    FALSE
)

mi <- mice(data = df,
           where = mask)

complete(mi, action = "long")
当前输出
.imp .id v1 v2 v3 v4 v5
1     1   1  5 NA  3  9 NA
2     1   2  6  6  3  1  1
3     1   3  2 NA  2 NA NA
4     1   4  4  8  7 NA NA
5     1   5  7  4  2  5  4
6     2   1  5 NA  3  9 NA
7     2   2  6  6  3  1  1
8     2   3  2 NA  2 NA NA
9     2   4  4  8  7 NA NA
10    2   5  7  4  2  5  4
预期输出
.imp .id v1 v2 v3 v4 v5
1     1   1  5  2  3  9 NA
2     1   2  6  6  3  1  1
3     1   3  2  4  2 NA NA
4     1   4  4  8  7 NA NA
5     1   5  7  4  2  5  4
6     2   1  5  5  3  9 NA
7     2   2  6  6  3  1  1
8     2   3  2  7  2 NA NA
9     2   4  4  8  7 NA NA
10    2   5  7  4  2  5  4
解决方案

问题根源是mice默认的自动插补逻辑会跳过存在其他缺失值的行中目标位置的插补。需要明确指定插补方法,确保标记的间断缺失值被处理:

library(dplyr)
library(mice)

set.seed(2024)

df <- tribble(
  ~v1,  ~v2,  ~v3,  ~v4,  ~v5,
  5,    NA,   3,    9,    NA,
  6,    6,    NA,   1,    1,
  2,    NA,   2,    NA,   NA,
  4,    8,    7,    NA,   NA,
  7,    4,    2,    5,    4
)

mask <- tribble(
  ~v1,      ~v2,    ~v3,      ~v4,      ~v5,
  FALSE,    TRUE,   FALSE,    FALSE,    FALSE,
  FALSE,    FALSE,  TRUE,     FALSE,    FALSE,
  FALSE,    TRUE,   FALSE,    FALSE,    FALSE,
  FALSE,    FALSE,  FALSE,    FALSE,    FALSE,
  FALSE,    FALSE,  FALSE,    FALSE,    FALSE
)

# 仅对需要插补的v2、v3指定pmm插补方法,其余变量设为空字符串表示不插补
method <- c("", "pmm", "pmm", "", "")

mi <- mice(data = df,
           where = mask,
           method = method,
           m = 2) # 指定生成2个插补数据集

complete(mi, action = "long")

关键调整说明

  1. method参数:明确指定哪些变量需要插补,避免mice自动判断时跳过有其他缺失值的行
  2. where掩码:精准定位需要插补的单元格,确保仅处理标记的间断缺失值
  3. m参数:指定生成的插补数据集数量,这里设为2匹配预期输出

运行上述代码后,第一行v2、第三行v2的间断缺失值会被正常插补,而单调缺失值(如第一行v5、第三行v4/v5)保持缺失,符合预期需求。


内容的提问来源于stack exchange,提问作者Esben Mølgaard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:10:53