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

是否可基于变量现有取值占比填充缺失值?如何实现?是否合理?

实现方法

以下提供两种常用分析工具的实现代码:

Python(Pandas 环境)

import pandas as pd
import numpy as np

# 假设存储数据的DataFrame名为df,二分类变量列名为`side`
# 计算现有观测的取值占比
value_ratio = df['side'].value_counts(normalize=True)
# 定位缺失值位置
missing_pos = df['side'].isna()
# 按占比随机填充缺失值
df.loc[missing_pos, 'side'] = np.random.choice(
    value_ratio.index,
    size=missing_pos.sum(),
    p=value_ratio.values
)

如果需要严格控制填充的Left/Right数量,避免随机抽样的微小波动,可以手动计算填充量:

left_cnt = round(500 * (973/(973+897)))
right_cnt = 500 - left_cnt
fill_values = ['Left']*left_cnt + ['Right']*right_cnt
# 打乱顺序后填充
np.random.shuffle(fill_values)
df.loc[missing_pos, 'side'] = fill_values

R 语言

library(dplyr)

# 假设存储数据的data.frame名为df,二分类变量列名为`side`
# 计算现有观测占比
value_ratio <- prop.table(table(df$side))
missing_num <- sum(is.na(df$side))

# 填充缺失值
df <- df %>%
  mutate(side = ifelse(
    is.na(side),
    sample(names(value_ratio), n(), replace = T, prob = value_ratio),
    side
  ))

方案合理性评估

这种按现有观测比例随机填充的方式属于单变量随机比例插补,合理性完全取决于数据的缺失机制和后续的分析目的:

属于合理方案的场景

  • 数据满足完全随机缺失(MCAR):即取值缺失的概率和side本身的取值、数据集中其他变量都没有关联,仅属于采集过程中的随机漏记
  • 后续分析仅需要该变量的整体分布统计、或做简单的描述性分析,不需要探索该变量和其他变量的关联关系
  • 本次缺失占比约为21%(500/2370),属于较低缺失占比区间,插补误差可控

属于不合理方案的场景

  • 数据不是完全随机缺失:比如Left取值的记录更容易漏记、或者某类特征的样本更容易出现缺失,这种情况下按现有比例填充会直接扭曲变量的真实分布
  • 后续需要做回归分析、因果推断、相关性检验等关联类分析:单变量插补没有考虑该变量和其他协变量的关联,会低估变量方差,大概率导致分析结果出现偏差
  • 如果缺失占比超过30%,该插补方式的误差会被放大,输出结论的可靠性极低

优化建议

如果有其他可利用的协变量,更推荐使用多重插补(MICE)方法,会同时考虑变量间的关联生成多组插补结果,最终合并估计量降低偏差;如果缺失机制不明确,建议额外做缺失敏感性分析,对比保留缺失值、插补后的结果差异,验证结论的稳定性。


内容的提问来源于stack exchange,提问作者user15300490

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 23:18:01