链式插补 (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.299926050.1432319   0.22131897  0.27775888  0.16266519 15.56987127]

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

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

03、总结

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:模型选择和模型优化

进行数据处理之后&#xff0c;我们得到了x_train和y_train&#xff0c;我们就可以用来进行回归或分类模型训练啦~ 一、模型选择 我们这里可能使用的是回归模型&#xff08;Regression&#xff09;&#xff0c;值得注意的是&#xff0c;回归和分类不分家。分类是预测离散值&…

策略的更新、加载与同步

C语言的C库提供了策略的更新、加载与同步的方法&#xff0c;这里引入多线程&#xff0c;达到区分读写任务&#xff08;生产者——消费者 模型&#xff09;的目的。 示例&#xff1a; /*brief check strategy to update, reload, synchronized to read(stoped by SIGINT)author…

Mysql标量子查询

目录 子查询标量子查询数据准备 子查询 SQL语句中嵌套select语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查询外部的语句可以是insert / update / delete / select 的任何一个&…

git的安装、使用

文章目录 安装gitgit学习网站git初始配置具体配置信息 新建版本库&#xff08;仓库&#xff09;git的工作区域和文件状态工作区域文件状态git文件提交的基础指令 git基础指令1. 版本提交2. 分支创建3. 分支切换4. 分支合并(1) git merge(2) git rebase 5. 在git的提交树上移动(…

Ps:锐化工具

锐化工具 Sharpen Tool可用于增强图像局部区域的对比度&#xff0c;从而提高图像的清晰度和细节&#xff0c;特别适用于提升照片的边缘定义和纹理细节。 快捷键&#xff1a;无 ◆ ◆ ◆ 常用操作方法与技巧 1、如果直接在像素图像上使用锐化工具&#xff0c;可尝试使用“渐隐…

怎么优雅地访问ChatGPT

ChatGPT&#xff0c;这颗璀璨的智能结晶&#xff0c;在2022年岁末之际&#xff0c;由OpenAI实验室倾力铸就&#xff0c;犹如夜空中跃动的智慧星辰&#xff0c;点亮了人工智能领域的新纪元。犹如汪洋中的一座灯塔&#xff0c;ChatGPT以其独特的智慧光辉引人注目&#xff0c;然而…

Linux:kubernetes(k8s)node节点加入master主节点(3)

Linux&#xff1a;kubernetes&#xff08;k8s&#xff09;搭建mater节点&#xff08;kubeadm&#xff0c;kubectl&#xff0c;kubelet&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136415575?spm1001.2014.3001.5502 我在上一章部署好了主节点&…

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

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

从下一代车规MCU厘清存储器的发展(2)

目录 1.概述 2.MCU大厂的选择 2.1 瑞萨自研STT-MRAM 2.2 ST专注PCM 2.3 英飞凌和台积电联手RRAM 2.4 NXP如何计划eNVM 3.小结 1.概述 上篇文章&#xff0c;我们简述了当前主流的存储器技术&#xff0c;现在我们来讲讲各大MCU大厂的技术选择 2.MCU大厂的选择 瑞萨日…

redis的RDB和AOF

Redis是一种高性能的键值对存储系统&#xff0c;它支持多种类型的数据结构&#xff0c;如字符串、列表、集合、哈希表、有序集合等。Redis提供了两种不同的持久化机制来确保数据的安全性&#xff1a;RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only Fi…

Tomcat布署及优化二-----Mysql和虚拟机

1.Mysql搭Blog 1.1下载安装包 看一下tomcat状态 1.2放到指定目录 cp jpress-v3.2.1.war /usr/local/tomcat/webapps/ cd /usr/local/tomcat/webapps/ 1.3路径优化 ln -s jpress-v3.2.1 jpress 看jpress权限 1.4生成配置文件 cat >/etc/yum.repos.d/mysql.repo <<E…

掘根宝典之C语言指针详解

目录 什么是指针&#xff1f; 与指针相关的运算符 指针类型的意义 指针的大小 初始化 将指针直接指向一个已经存在的变量或内存地址&#xff1a; 使用malloc函数动态分配内存&#xff0c;并将指针指向新分配的内存&#xff1a; 使用calloc函数动态分配内存&#xff0c;并…

Javascript:常量与数据类型

一、前言 介绍完变量之后我们来对常量进行了解一番&#xff0c;关于常量我们需要知道些什么呢&#xff1f; 二、正文 1.常量的基本使用 使用const声明的变量称为常量&#xff0c;当某个变量的字面量无需改动的时候就能够用到常量。 //声明一个常量 const G 9.8 //输出这个常量…

您的计算机已被pings勒索病毒感染?恢复您的数据的方法在这里!

导言&#xff1a; 在数字时代&#xff0c;数据是企业和个人生活中不可或缺的一部分。然而&#xff0c;随着勒索病毒的不断进化和传播&#xff0c;我们的数据面临着前所未有的威胁。其中&#xff0c;.pings 勒索病毒是最新一轮威胁之一&#xff0c;它以其独特的加密算法和无情的…

leetcode-字符串中的单词数

434. 字符串中的单词数 题解&#xff1a; 这个问题可以通过遍历字符串&#xff0c;当遇到非空格字符时&#xff0c;判断其前一个字符是否为空格&#xff0c;如果是&#xff0c;则说明这是一个新的单词的开始&#xff0c;计数器加一。最后返回计数器的值即可。 class Solutio…

【Redis | 第一篇】快速了解Redis

文章目录 1.快速了解Redis1.1简介1.2与其他key-value存储的不同处1.3Redis安装——Windows环境1.3.1下载redis1.3.2启动redis1.3.3进入redis客户端1.3.4修改配置 1.4Redis安装——Linux环境1.4.1安装命令1.4.2启动redis1.4.3进入redis客户端 1.5配置修改1.6小结 1.快速了解Redi…

MyBatis 学习(七)之 缓存

目录 1 MyBatis 缓存介绍 2 一级缓存 3 二级缓存 3.1 二级缓存介绍 3.2 二级缓存配置 3.3 二级缓存测试 4 参考文档 1 MyBatis 缓存介绍 MyBatis 缓存是 MyBatis 中的一个重要特性&#xff0c;用于提高数据库查询的性能。MyBatis 提供了一级缓存和二级缓存两种类型的缓存…

Git与GitHub:解锁版本控制的魔法盒子

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

cetos7 Docker 安装 gitlab

一、gitlab 简单介绍和安装要求 官方文档&#xff1a;https://docs.gitlab.cn/jh/install/docker.html 1.1、gitlab 介绍 gitLab 是一个用于代码仓库管理系统的开源项目&#xff0c;使用git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务平台&#xff0c;通过该平…

(六)Dropout抑制过拟合与超参数的选择--九五小庞

过拟合 即模型在训练集上表现的很好&#xff0c;但是在测试集上效果却很差。也就是说&#xff0c;在已知的数据集合中非常好&#xff0c;再添加一些新数据进来效果就会差很多 欠拟合 即模型在训练集上表现的效果差&#xff0c;没有充分利用数据&#xff0c;预测准确率很低&a…