链式插补 (MICE):弥合不完整数据分析的差距

导 读

数据缺失可能会扭曲结果,降低统计功效,并且在某些情况下,导致估计有偏差,从而破坏从数据中得出的结论的可靠性。

处理缺失数据的传统方法(例如剔除或均值插补)通常会引入自己的偏差或无法充分利用数据集中的可用信息。

链式方程插补 (MICE) 的出现为解决这一普遍问题提供了一种更复杂、更灵活的方法,为研究人员提供了一种可以处理现实世界数据固有的复杂性和不确定性的工具。

数据缺失的存在类似于在隐藏地形的地图上导航。链式方程插补 (MICE) 方法充当指南针,引导研究人员穿过这些模糊的路径,确保所采取的每一步都是最佳的,得出的每一个结论都尽可能准确。

有需要的朋友关注公众号【小Z的科研日常】,获取更多内容

01、MCIE

链式方程插补 (MICE) 是一种用于处理数据集中缺失数据的统计技术。这是一种多功能方法,可以以灵活而稳健的方式处理缺失值,使其在社会科学到生物统计学等领域广受欢迎。以下是详细概述:

1.1 关键原则

① 多重插补:与使用单个估计值填充缺失值的单一插补方法不同,MICE 会生成多重插补。这种方法通过创建几个不同的合理数据集来填充缺失值,从而承认缺失数据真实值的不确定性。

② 链式方程:MICE 通过使用一系列回归模型在逐个变量的过程中估算缺失数据来进行操作。

每个缺失数据的变量都会有条件地估算到数据集中的其他变量。该过程是“链式的”,因为它迭代地循环变量,根据上一步的更新数据更新每一步的插补。

1.2 MICE如何运作?

① 初始化:缺失值最初用占位符值填充,通常是该变量观测值的平均值或中位数。

② 迭代:对于每个缺失数据的变量,使用其他变量作为预测变量,对观测值拟合回归模型。然后根据该模型估算缺失值。依次对每个变量重复此步骤,循环遍历变量进行多次迭代。

③ 收敛:经过指定次数的迭代后,假定该过程已收敛,这意味着进一步循环变量不会显着改变插补。

通常,前几次迭代作为“老化”期被丢弃,并且通过从随后的迭代中采样来创建多个估算数据集。

1.3 MICE优点

  • 灵活性:MICE 可以处理不同类型的变量(连续、二元、分类)和不同的缺失数据机制。

  • 稳健性:通过生成多重插补,MICE 提供了一种量化由于缺失数据而导致的不确定性的方法,而这种不确定性在单一插补方法中经常被忽视。

  • 效率:链式方程方法允许根据最适合其分布和与其他变量关系的模型来估算每个变量。

1.4 MICE局限性

  • 假设:MICE 假设数据随机丢失 (MAR),但情况可能并非总是如此。如果数据不是随机丢失 (MNAR),则插补可能会有偏差。

  • 复杂性:迭代过程以及生成和分析多个数据集的需要可能是计算密集型的,并且需要更复杂的统计分析。

1.5 应用领域

MICE广泛应用于各个领域,在处理不完整数据集时进行数据分析。它在纵向研究、临床试验和调查中特别有用,因为丢失数据是一个常见问题。

通过提供稳健的缺失值输入方法,MICE 帮助研究人员和分析师充分利用他们的数据,从而得出更准确、更可靠的结论。

1.6 MCIE的起源

MICE 源于更广泛的多重插补框架,这是鲁宾于 1987 年提出的一个概念,旨在通过创建多个插补数据集、单独分析每个数据集,然后组合结果来解决因缺失数据而造成的不确定性。

MICE 在此基础上构建,通过在链式迭代过程中采用一系列回归模型来生成这些多重插补。这种方法创新使得能够以更大的灵活性和准确性解决从健康科学到经济学等不同领域的各种缺失数据问题。

1.7 MCIE的机制

MICE 的核心是通过迭代过程进行操作,其中每个缺失数据的变量都按顺序进行估算,并使用其他变量作为预测变量。

该过程从初步插补阶段开始,其中缺失值由初始估计值填充,例如观测值的平均值或中位数。在连续迭代中,对于每个缺失数据的变量,将回归模型拟合到观察到的数据,同时考虑所有其他变量的当前插补。

然后根据该模型的预测分布估算缺失值。这个循环在一系列迭代中重复,使得插补随着模型调整到反馈循环中的插补值而演变。

1.8 MCIE的优势与创新

与传统插补方法相比,MICE 方法具有多种优势。

首先也是最重要的是它的灵活性:通过为每个变量选择适当的模型,MICE 可以容纳从连续到分类的不同类型和分布的变量。如果数据随机丢失 (MAR) 的假设成立,这种适应性可以扩展到处理各种丢失模式和机制。

此外,通过生成多重插补,MICE 承认并量化插补过程中固有的不确定性,从而实现更稳健的统计推断。

02、代码

为了演示在 Python 中使用链式方程插补 (MICE),我们将创建一个包含缺失值的合成数据集,应用 MICE 插补这些值,然后使用指标和图评估插补质量。

我们将使用该pandas库来处理数据、numpy生成缺失值、sklearn创建合成数据集和评估指标以及matplotlib绘图seaborn

我们还将使用IterativeImputerfrom,sklearn.impute因为它实现了类似 MICE 的方法。

import numpy as np
import pandas as pd
from sklearn.datasets import make_regression
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
import seaborn as sns

# 生成合成数据集
X, y = make_regression(n_samples=1000, n_features=10, noise=0.1, random_state=42)

# 转换为 DataFrame,以便于操作
df = pd.DataFrame(X, columns=[f'Feature_{i}' for i in range(X.shape[1])])
df['Target'] = y

# 显示前几行
df.head()

# I引入缺失值
np.random.seed(42)
df_missing = df.mask(np.random.random(df.shape) < 0.1)

# 显示前几行以验证缺失值
df_missing.head()

# 初始化 MICE 计算器
mice_imputer = IterativeImputer(max_iter=10, random_state=42)

# 拟合和转换数据集以填补缺失值
df_imputed = mice_imputer.fit_transform(df_missing)

# 将拟合数据转换回 pandas DataFrame
df_imputed = pd.DataFrame(df_imputed, columns=df.columns)
df_imputed.head()

# 计算每个特征的 RMSE
rmse = np.sqrt(mean_squared_error(df, df_imputed, multioutput='raw_values'))

# 打印每个特征的均方根误差
print(f'RMSE for each feature: {rmse}')

# 选择要绘制的特征
feature_to_plot = 'Feature_0'

# 绘制原始分布图和处理后的分布图
plt.figure(figsize=(10, 6))
sns.kdeplot(df[feature_to_plot], label='Original', color='green', linestyle="--")
sns.kdeplot(df_imputed[feature_to_plot], label='Imputed', color='red', linestyle="-")
plt.legend()
plt.title(f'Distribution of Original vs. Imputed Values for {feature_to_plot}')
plt.xlabel('Value')
plt.ylabel('Density')
plt.show()

输出:

RMSE for each feature: [ 0.24095716  0.22593846  0.21704334  0.15838514  0.25103187  0.29992605
  0.1432319   0.22131897  0.27775888  0.16266519 15.56987127]

此代码片段提供了从创建具有缺失值的合成数据集到使用 MICE 估算这些值并评估结果的完整演练。

它提供了一个在 Python 中处理缺失数据的实际示例,展示了 MICE 在保留数据集的统计属性方面的实用性。

03、总结

链式方程插补代表了缺失数据处理方面的重大进步,为研究人员和分析师提供了灵活、强大且复杂的工具包。

虽然 MICE 具有一定的复杂性和假设,但它解决了统计分析中的基本挑战,能够对不完整的数据进行更明智、更细致的解释。

随着数据集规模和复杂性的增长,MICE 等先进插补技术的作用只会变得更加重要,这凸显了统计科学中持续方法创新和教育的必要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424045.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网页版图像处理软件开发服务:助您项目在市场竞争中脱颖而出

在当今数字化时代&#xff0c;图像处理在各个行业中扮演着重要的角色&#xff0c;虎克专注于提供定制化的网页版图像处理软件开发服务&#xff0c;为您的项目保驾护航。 1.网页版图像处理软件的定制化需求 1.1行业特定功能 针对不同的业务需求&#xff0c;深入了解行业特点&…

前端打包部署(黑马学习笔记)

我们的前端工程开发好了&#xff0c;但是我们需要发布&#xff0c;那么如何发布呢&#xff1f;主要分为2步&#xff1a; 1.前端工程打包 2.通过nginx服务器发布前端工程 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的build按钮来完…

微信小程序云开发教程——墨刀原型工具入门(添加交互事件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

13 双口 RAM IP 核

双口 RAM IP 核简介 双口 RAM IP 核有两个端口&#xff0c;它又分为伪双端口 RAM 和真双端口 RAM&#xff0c;伪双端口 RAM 一个端口只能读&#xff0c;另一个端口只能 写&#xff0c;真双端口 RAM 两个端口都可以进行读写操作。同时对存储器进行读写操作时就会用到双端口 RAM…

LeetCode受限条件下可到达节点的数目

题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restr…

决策树实验分析(分类和回归任务,剪枝,数据对决策树影响)

目录 1. 前言 2. 实验分析 2.1 导入包 2.2 决策树模型构建及树模型的可视化展示 2.3 概率估计 2.4 绘制决策边界 2.5 决策树的正则化&#xff08;剪枝&#xff09; 2.6 对数据敏感 2.7 回归任务 2.8 对比树的深度对结果的影响 2.9 剪枝 1. 前言 本文主要分析了决策树的分类和回…

matplotlib——散点图和条形图(python)

散点图 需求 我们获得北京2016年三月和十月每天白天最高气温&#xff0c;我们现在需要找出气温随时间变化的某种规律。 代码 # 导入库 from matplotlib import pyplot as plt import random# 解决中文乱码 import matplotlib matplotlib.rc("font",family"F…

详细讲解Docker架构的原理、功能以及如何使用

一、简介 1、了解docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化&#xff0c;以便隔离进程和资源&#xff0c;而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中&…

如何解决线程安全问题(synchronized、原子性、产生线程不安全的原因,锁的特性,加锁的方式等等干货)

文章目录 &#x1f490;线程不安全的示例&#x1f490;锁的特性&#x1f490;产生线程不安全的原因&#xff1a;&#x1f490;加锁的三种方式 &#x1f490;线程不安全的示例 对于线程安全问题&#xff0c;这里用一个例子进行讲解&#x1f447;&#xff1a; 我现在定义一个变…

Image Fusion via Vision-Language Model【文献阅读】

阅读目录 文献阅读AbstractIntroduction3. Method3.1. Problem Overview3.2. Fusion via Vision-Language Model 4. Vision-Language Fusion Datasets5. Experiment5.1Infrared and Visible Image Fusion 6. Conclusion个人总结 文献阅读 原文下载&#xff1a;https://arxiv.or…

串及BF朴素查找算法(学习整理):

关于串的相关定义&#xff1a; 串&#xff1a;用‘ ’表示的字符序列空串&#xff1a;包含零个字符的串子串&#xff1a;包含传本身和空串的子串 eg: abc(,a,b,c,ab,bc,ac,abc)共7个&#xff1a;串的长度的阶乘1&#xff08;空串&#xff09;真子串&#xff1a;不包含自身的所…

Java进阶-IO(3)

话接上回&#xff0c;继续java IO的学习。上一次说完了字符流的读写数据&#xff0c;这次将基础部分剩余的一点内容看完。 一、流按功能分类 1、系统流 1.1 概述 系统流的类为 java.lang.System。Sytem 类封装了 Java 程序运行时的 3 个系统流。 System.in&#xff1a;标…

腾讯云幻兽帕鲁服务器中,如何检查并确保所有必要的配置文件(如PalWorldSettings.ini和WorldOption.sav)正确配置?

腾讯云幻兽帕鲁服务器中&#xff0c;如何检查并确保所有必要的配置文件&#xff08;如PalWorldSettings.ini和WorldOption.sav&#xff09;正确配置&#xff1f; 登录腾讯云控制台&#xff1a;登录轻量云控制台&#xff0c;找到部署了幻兽帕鲁的服务器&#xff0c;单击实例卡片…

基于BP-Adaboost的预测与分类,附MATLAB代码免费获取

今天为大家带来一期基于BP-Adaboost的预测与分类。代码中的BP可以替换为任意的机器学习算法。 原理详解 BP-AdaBoos模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。关于更多的原…

关于编写测试用例的一些思考

测试用例是QA同学的基本功&#xff0c;每个人都有一套编写测试用例的体系&#xff0c;本文是作者结合自身的工作经验以及阅读一些测试相关的书籍后的一些看法&#xff0c;欢迎大家一起讨论学习。 测试设计 测试用例格式 面试中一些常见的问题 1.APP测试与服务端测试的区别&am…

计算机设计大赛 深度学习火车票识别系统

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

StarRocks实战——首汽约车实时数仓实践

目录 前言 一、引入背景 二、OLAP引擎选型 三、架构演进 四、实时数仓构建 五、业务实践价值未来规划 原文大佬的这篇首汽约车实时数仓实践有借鉴意义&#xff0c;这里摘抄下来用作学习和知识沉淀。 前言 首汽约车&#xff08;以下简称“首约”&#xff09;是首汽集团打造…

滑动窗口问题

日升时奋斗&#xff0c;日落时自省 目录 一、长度最小的子数组 二、无重复字符的最长子串 三、最大连续1的个数III 四、将x减到0的最小操作数 五、水果成篮 六、找到字符串中所有字母异位词 七、串联所有单词的⼦串 八、最小覆盖子串 注&#xff1a;滑动窗口其实很类似…

图片按照宽度进行居中裁剪,缩放大小

要求 文件存放在img_folder_path中 裁剪要求&#xff1a; 图片大小以高度为基准。居中裁剪 缩放要求&#xff1a; 图片缩放到512大小 图片另存到save_file_path路径中 代码 import numpy as np import cv2 import os from tqdm import tqdm#原图片存放位置 img_folder_p…

操作系统原理与实验——实验三优先级进程调度

实验指南 运行环境&#xff1a; Dev c 算法思想&#xff1a; 本实验是模拟进程调度中的优先级算法&#xff0c;在先来先服务算法的基础上&#xff0c;只需对就绪队列到达时间进行一次排序。第一个到达的进程首先进入CPU&#xff0c;将其从就绪队列中出队后。若此后队首的进程的…