从mice到missForest:常用数据插值方法优缺点

一、引言

数据插值方法在数据处理和分析中扮演着至关重要的角色。它们可以帮助我们处理缺失数据,使得数据分析更加准确和可靠。数据插值方法被广泛应用于金融、医疗、社会科学等领域,以及工程和环境监测等实际应用中。

在本文中,我们将探讨三种常用的数据插值方法:MICE(多重插补技术)、MissForest(随机森林插补技术)等。通过对这两种方法的比较和分析,我们旨在帮助读者更好地理解它们的优缺点,以便在实际应用中做出明智的选择。

数据插值方法的选择直接影响到数据分析结果的准确性和可靠性,因此对不同插值方法的深入了解具有重要意义。通过本文的阐述,我们可以更好地理解MICE和MissForest的适用范围和局限性,为实际问题的数据处理提供更科学、更可靠的参考。

总之,本文将对MICE和MissForest等三种常用的数据插值方法进行深入剖析,旨在为读者提供在实际应用中正确选择合适插值方法的依据。通过对它们的优缺点进行全面的比较,可以更好地指导数据分析工作,并为相关研究提供有益的借鉴。

二、R内置的简单值插补

2.1 任意常数插补

任意常数插补是一种简单的数据插补方法,它用一个任意选择的常数(如0)或其他已知的数据来填补缺失值。

「优点」:任意常数插补的优点在于它非常简单和直接。它不需要对数据进行复杂的计算或推断,只需要将缺失值替换为指定的常数即可。此外,该方法对于某些类型的数据(如分类变量)可能是合理且有效的选择。

「缺点」:任意常数插补的缺点在于它忽略了真实数据的分布特性和相关性。由于使用相同的常数来填补所有的缺失值,可能会导致插补后的数据集失去原本的变异性和相关性。这可能会影响后续数据分析的准确性和可靠性。

2.2 均数插补

均数插补是一种常见的数据插补方法,它用变量的均值来填补缺失值。对于每个缺失值,均数插补将变量的所有观察值的均值作为插补值。

「优点」:均数插补的优点在于它简单易行,计算方便。均数作为插补值可以保持数据的整体平均水平,并且不会引入额外的变异性。此外,均数插补可以在保持样本总体均值不变的情况下填补缺失值,从而减少对整体结构的影响。

「缺点」:均数插补的缺点在于它忽略了其他变量之间的相关性。如果一个变量的缺失值与其他变量有关联,使用均值插补可能会导致结果的偏差。此外,均数插补也无法解决缺失模式的问题,可能会引入偏差。

2.3 中位数插补

中位数插补是一种常见的数据插补方法,它用变量的中位数来填补缺失值。对于每个缺失值,中位数插补将变量的所有观察值的中位数作为插补值。

「优点」:中位数插补的优点在于它对于异常值的鲁棒性较好。由于使用中位数作为插补值,它不受异常值的影响,可以更好地保持数据的整体趋势和分布形态。

「缺点」:中位数插补的缺点在于它同样忽略了其他变量之间的相关性。如果一个变量的缺失值与其他变量有关联,使用中位数插补可能会引入偏差。此外,中位数插补也无法解决缺失模式的问题,可能会导致插补结果的不准确性。

2.4 示例展示

  • 「数据集简介」
library(ggplot2)
library(titanic)
library(dplyr)
library(cowplot)

summary(titanic_train)

结果展示:

  PassengerId       Survived          Pclass          Name          
 Min.   :  1.0   Min.   :0.0000   Min.   :1.000   Length:891        
 1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000   Class :character  
 Median :446.0   Median :0.0000   Median :3.000   Mode  :character  
 Mean   :446.0   Mean   :0.3838   Mean   :2.309                     
 3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000                     
 Max.   :891.0   Max.   :1.0000   Max.   :3.000                     
                                                                    
     Sex                 Age            SibSp           Parch       
 Length:891         Min.   : 0.42   Min.   :0.000   Min.   :0.0000  
 Class :character   1st Qu.:20.12   1st Qu.:0.000   1st Qu.:0.0000  
 Mode  :character   Median :28.00   Median :0.000   Median :0.0000  
                    Mean   :29.70   Mean   :0.523   Mean   :0.3816  
                    3rd Qu.:38.00   3rd Qu.:1.000   3rd Qu.:0.0000  
                    Max.   :80.00   Max.   :8.000   Max.   :6.0000  
                    NA's   :177                                     
    Ticket               Fare           Cabin             Embarked        
 Length:891         Min.   :  0.00   Length:891         Length:891        
 Class :character   1st Qu.:  7.91   Class :character   Class :character  
 Mode  :character   Median : 14.45   Mode  :character   Mode  :character  
                    Mean   : 32.20                                        
                    3rd Qu.: 31.00                                        
                    Max.   :512.33                       

从上面可以看出Age变量存在很多的缺失值,查看数据分布。

ggplot(titanic_train, aes(Age)) +
  geom_histogram(color = "#000000", fill = "#2E9FDF") +
  ggtitle("Variable Age distribution") +
  theme_classic() +
  theme(plot.title = element_text(size = 18))
  • 「数据插补」
value_completed <- data.frame(
  original = titanic_train$Age,
  completed_zero = replace(titanic_train$Age, is.na(titanic_train$Age), 0),
  completed_mean = replace(titanic_train$Age, is.na(titanic_train$Age), mean(titanic_train$Age, na.rm = TRUE)),
  completed_median = replace(titanic_train$Age, is.na(titanic_train$Age), median(titanic_train$Age, na.rm = TRUE))
)
head(value_completed)

结果展示:

> head(value_completed)
  original completed_zero completed_mean completed_median
1       22             22       22.00000               22
2       38             38       38.00000               38
3       26             26       26.00000               26
4       35             35       35.00000               35
5       35             35       35.00000               35
6       NA              0       29.69912               28

接着我们通过图例来展示数据的分布是否有变化。

h1 <- ggplot(value_completed, aes(x = original)) +
   geom_histogram(fill = "#ad1538", color = "#000000", position = "identity") +
   ggtitle("Original distribution") +
   theme_classic()
 h2 <- ggplot(value_completed, aes(x = completed_zero)) +
   geom_histogram(fill = "#15ad4f", color = "#000000", position = "identity") +
   ggtitle("Zero-imputed distribution") +
   theme_classic()
 h3 <- ggplot(value_completed, aes(x = completed_mean)) +
  geom_histogram(fill = "#1543ad", color = "#000000", position = "identity") +
  ggtitle("Mean-imputed distribution") +
  theme_classic()
h4 <- ggplot(value_completed, aes(x = completed_median)) +
  geom_histogram(fill = "#ad8415", color = "#000000", position = "identity") +
  ggtitle("Median-imputed distribution") +
  theme_classic()

plot_grid(h1, h2, h3, h4, nrow = 2, ncol = 2)

从上图可以看出三种填补方法对原数据分布产生严重的影响,可能会导致插补后的数据集失去原本的变异性和相关性。这可能会影响后续数据分析的准确性和可靠性。

三、MICE(多重插补技术)

3.1 MICE的基本原理和工作流程

MICE(Multiple Imputation by Chained Equations)是一种基于贝叶斯思想的多重插补技术,用于处理缺失数据。它的基本原理是通过多次迭代,根据已有数据的信息来估计缺失值,并且不断更新估计模型。具体地,MICE将变量分为两类:需要插值的目标变量和其他辅助变量。然后,对于每个目标变量,MICE利用其他辅助变量的信息来进行插值,并不断迭代,直到收敛为止。

  • 「pmm:预测均值匹配」

PMM是一种基于模型的数据插补方法,它通过建立预测模型来预测缺失值,并根据预测结果从已有的观察值中选择一个最接近的均值进行匹配。

「优点」:PMM的优点在于它能够考虑其他变量之间的相关性。通过建立预测模型,PMM可以利用其他变量的信息来对缺失值进行预测,从而更准确地插补缺失值。此外,PMM还可以保持数据的分布特性和变异性,使得插补后的数据更接近真实情况。

「缺点」:PMM的缺点在于它对于模型选择和建立的要求较高。为了进行预测,需要选择合适的模型,并且需要考虑模型的拟合度和预测精度。如果选择的模型不准确或者样本量较小,可能会导致插补结果的不可靠性。另外,PMM对于缺失模式也比较敏感,如果缺失模式与其他变量相关,则插补结果可能会引入偏差。

  • 「cart:分类和回归树」

CART是一种基于决策树的数据插补方法,它通过构建分类或回归树模型来预测缺失值,并将预测结果作为插补值。

「优点」:CART的优点在于它对于非线性关系和交互效应的建模能力较强。决策树可以自动选择重要的变量,并且可以处理离散和连续型变量。此外,CART还可以提供可解释的结果,可以清晰地展示出变量之间的关系和重要性。

「缺点」:CART的缺点在于它容易产生过拟合问题。决策树往往倾向于过度拟合训练数据,导致在新数据上的预测性能下降。为了避免过拟合,需要采用剪枝等技术进行调整。此外,CART对于缺失模式也比较敏感,如果缺失模式与其他变量相关,则插补结果可能会引入偏差。

  • 「laso.norm:Lasso线性回归」

Lasso.norm是一种基于稀疏线性回归的数据插补方法,它通过最小化目标函数来选择具有稀疏性的线性模型,并利用线性模型进行缺失值的插补。

「优点」:Lasso.norm的优点在于它能够进行变量选择和建模,同时具有稀疏性。Lasso.norm可以自动选择重要的变量,并将不重要的变量的系数置为零,从而简化了模型并提高了解释性。此外,Lasso.norm还可以处理高维数据和多重共线性问题。

「缺点」:Lasso.norm的缺点在于它对于模型选择和参数调整的要求较高。Lasso.norm需要选择适当的正则化参数,并考虑模型的拟合度和预测精度。如果选择的参数不合适或者样本量较小,可能会导致插补结果的不可靠性。另外,Lasso.norm对于缺失模式也比较敏感,如果缺失模式与其他变量相关,则插补结果可能会引入偏差。

3.2 MICE的优点

MICE的优点在于它能够适用于多变量数据,并且可以保留数据间的相关性。相比于其他插值方法,MICE可以提供更准确的结果,并且能够使用更多的信息来插值。此外,MICE还可以处理非正态分布的数据,可以用于分类和回归问题。

3.3 MICE的缺点

MICE的主要缺点在于对于高维数据的计算复杂性。由于需要对每个变量进行插值,因此随着变量数增加,计算量也会大大增加。此外,MICE对于缺失模式的假设比较严格,如果缺失数据的模式与假设不符,可能会导致插值结果不准确。

3.4 示例展示

library(mice)
titanic_num <- titanic_train %>%
  select(Survived, Pclass, SibSp, Parch, Age, Fare)
#缺失数据可视化
md.pattern(titanic_num) 
mice_completed <- data.frame(
  original = titanic_train$Age,
  completed_pmm = complete(mice(titanic_num, method = "pmm"))$Age,
  completed_cart = complete(mice(titanic_num, method = "cart"))$Age,
  completed_lasso = complete(mice(titanic_num, method = "lasso.norm"))$Age
)
head(mice_completed)

h1 <- ggplot(mice_completed, aes(x = original)) +
   geom_histogram(fill = "#ad1538", color = "#000000", position = "identity") +
   ggtitle("Original distribution") +
   theme_classic()
h2 <- ggplot(mice_completed, aes(x = completed_pmm)) +
   geom_histogram(fill = "#15ad4f", color = "#000000", position = "identity") +
   ggtitle("pmm-imputed distribution") +
   theme_classic()
h3 <- ggplot(mice_completed, aes(x = completed_cart)) +
   geom_histogram(fill = "#1543ad", color = "#000000", position = "identity") +
   ggtitle("cart-imputed distribution") +
   theme_classic()
h4 <- ggplot(mice_completed, aes(x = completed_lasso)) +
   geom_histogram(fill = "#ad8415", color = "#000000", position = "identity") +
   ggtitle("lasso-imputed distribution") +
   theme_classic()
plot_grid(h1, h2, h3, h4, nrow = 2, ncol = 2)

结果展示:

> head(mice_completed)
  original completed_pmm completed_cart completed_lasso
1       22            22             22        22.00000
2       38            38             38        38.00000
3       26            26             26        26.00000
4       35            35             35        35.00000
5       35            35             35        35.00000
6       NA            28             24        37.65023

和内置插补方法相比,mice插补后的数据更接近原始分布。优点需要注意的是,laso.norm的插补方法存在小于0的情况,和现实情况冲突,因此如果您选择这种插补技术,则需要取其绝对值。

四、MissForest(随机森林插补)

4.1 MissForest基本原理和工作流程

MissForest是一种基于随机森林的数据插补方法,它通过利用多棵决策树来预测缺失值,并不断迭代更新预测结果,直到收敛为止。

其工作流程如下:

  1. 对于含有缺失值的数据集,首先对每个含有缺失值的变量,将缺失值视为响应变量,其他完整的变量视为特征变量,构建随机森林模型。
  2. 利用已有的非缺失值作为训练集,预测缺失值。
  3. 将预测得到的值作为缺失值的估计,并更新数据集。
  4. 不断重复步骤2和步骤3,直到达到收敛标准或者预设的迭代次数。

4.2 MissForest的优点

  1. 非线性关系适应性:MissForest基于随机森林的模型能够捕捉非线性关系,对于非线性关系的数据具有较好的适应性。
  2. 对异常值的鲁棒性:由于随机森林模型对异常值具有一定的鲁棒性,MissForest在处理含有异常值的数据时表现良好,不易受到异常值的影响。

4.3 MissForest的缺点

  1. 计算时间较长:对于较大的数据集,MissForest需要构建多棵决策树并进行迭代更新,因此在计算时间上可能会比较耗时。
  2. 对缺失模式的敏感性:MissForest对于缺失模式较为敏感,如果缺失模式与其他变量相关,则可能会导致插补结果的偏差,需要谨慎处理数据中的缺失模式。

4.4 示例展示

library(missForest)
missForest_completed <- data.frame(
  original = titanic_num$Age,
  completed_missForest = missForest(titanic_num)$ximp$Age
)
head(missForest_completed)

h1 <- ggplot(missForest_completed, aes(x = original)) +
   geom_histogram(fill = "#ad1538", color = "#000000", position = "identity") +
   ggtitle("Original distribution") +
   theme_classic()
h2 <- ggplot(missForest_completed, aes(x = completed_missForest)) +
   geom_histogram(fill = "#15ad4f", color = "#000000", position = "identity") +
   ggtitle("missForest-imputed distribution") +
   theme_classic()

plot_grid(h1, h2, nrow = 1, ncol = 2)

结果展示:

> head(missForest_completed)
  original completed_missForest
1       22             22.00000
2       38             38.00000
3       26             26.00000
4       35             35.00000
5       35             35.00000
6       NA             27.72037

MissForest 插补后与原来的数据分布还是优点差距,大部分值都在 20-40这个区间,可能不是数据集插补最好的插补技术。

五、总结

「MICE、MissForest以及其他常用数据插值方法的优缺」

  1. MICE:具有灵活性,能够根据数据集的特点进行模型选择和参数调整,同时对于缺失模式的敏感性较低。但在处理非线性关系和大规模数据集时表现一般。
  2. MissForest:具有对非线性关系的适应性和对异常值的鲁棒性等优点,但在处理较大数据集时可能会面临计算时间较长的问题,同时对缺失模式较为敏感。
  3. 其他常用数据插值方法,如KNN、PMM、CART、Lasso.norm等,各有优缺点,需要根据具体应用场景进行选择。

不同的数据插值方法具有不同的优点和局限性,根据具体应用场景选择合适的方法可以更好地保证插值结果的准确性和可靠性。例如,在处理非线性关系较强的数据集时,可以优先考虑使用基于决策树或随机森林的方法;而在处理缺失率较高的大规模数据集时,则需要考虑方法的计算效率和可扩展性等因素。

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

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

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

相关文章

P4 音频知识点——PCM音频原始数据

目录 前言 01 PCM音频原始数据 1.1 频率 1.2 振幅&#xff1a; 1.3 比特率 1.4 采样 1.5 量化 1.6 编码 02. PCM数据有以下重要的参数&#xff1a; 采样率&#xff1a; 采集深度 通道数 ​​​​​​​ PCM比特率 ​​​​​​​ PCM文件大小计算&#xff1a; ​…

堆与二叉树(下)

接着上次的&#xff0c;这里主要介绍的是堆排序&#xff0c;二叉树的遍历&#xff0c;以及之前讲题时答应过的简单二叉树问题求解 堆排序 给一组数据&#xff0c;升序&#xff08;降序&#xff09;排列 思路 思考&#xff1a;如果排列升序&#xff0c;我们应该建什么堆&#x…

DLLNotFoundException:xxx tolua... 错误打印

DLLNotFoundException:xxx tolua... 错误打印 一、DLLNotFoundException介绍二、Plugins文件夹文件目录结构如下&#xff1a; 三、Plugins中的Android文件夹四、Plugins中的IOS文件夹这里不说了没测试过不过原理应该也是选择对应的平台即可五、Plugins中的x86和X86_64文件夹 一…

【贪心】买卖股票的最佳时机含手续费

/** 贪心&#xff1a;每次选取更低的价格买入&#xff0c;遇到高于买入的价格就出售(此时不一定是最大收益)。* 使用buy表示买入股票的价格和手续费的和。遍历数组&#xff0c;如果后面的股票价格加上手续费* 小于buy&#xff0c;说明有更低的买入价格更新buy。如…

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

在新一轮科技革命和产业变革的推动下&#xff0c;制造业正面临绿色化、智能化、服务化和定制化发展趋势。为顺应新技术革命及工业发展模式变化趋势&#xff0c;传统工业化理论需要进行修正和创新。其中&#xff0c;对工业化水平的判断标准从以三次产业比重标准为主回归到工业技…

Qt制作定时关机小程序

文章目录 完成效果图ui界面ui样图 main函数窗口文件头文件cpp文件 引言 一般定时关机采用命令行模式&#xff0c;还需要我们计算在多久后关机&#xff0c;我们可以做一个小程序来定时关机 完成效果图 ui界面 <?xml version"1.0" encoding"UTF-8"?>…

EA常见画图(类图、包图、构件图、状态图、顺序图、活动图)

EA常见活动图&#xff0c;状态图画法 类图:111&#xff08;1&#xff09;给关系添加注释&#xff08;2&#xff09;设置关系线样式 包图&#xff1a;&#xff08;1&#xff09;创建包图&#xff08;2&#xff09;在包中添加子包&#xff1a;&#xff08;3&#xff09;在包中添加…

微前端——无界wujie

B站课程视频 课程视频 课程课件笔记&#xff1a; 1.微前端 2.无界 现有的微前端框架&#xff1a;iframe、qiankun、Micro-app&#xff08;京东&#xff09;、EMP&#xff08;百度&#xff09;、无届 前置 初始化 新建一个文件夹 1.通过npm i typescript -g安装ts 2.然后可…

IDEA控制台乱码

报错情况&#xff1a; 报错原因&#xff1a;Idea的vm用的编码格式不一致&#xff1a;需要修改为UTF-8 你看Tomcat我之前下在后修改果&#xff0c;就没有报错&#xff0c;新人刚下载也有乱码问题 问题解决&#xff1a; 按我步骤来一定对 下面这俩文件打开输入&#xff1a; -D…

CSS-SVG-环形进度条

线上代码地址 <div class"circular-progress-bar"><svg><circle class"circle-bg" /><circle class"circle-progress" style"stroke-dasharray: calc(2 * 3.1415 * var(--r) * (var(--percent) / 100)), 1000" …

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片&#xff0c;如果想要透明效果&#xff0c;那么选择 输出格式C array&#xff0c;点击Convert进行转换。 下载.c文件放置到工程下使用即可。

Java开发框架和中间件面试题(1)

1.什么是Spring框架&#xff1f; Spring是一种轻量级框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合&#xff0c;使用这些模块可以很方便的协助我们进行开发。这些模块是核心容器、数据访…

3.[BUUCTF HCTF 2018]WarmUp1

1.看题目提示分析题目内容 盲猜一波~ &#xff1a; 是关于PHP代码审计的 2.打开链接&#xff0c;分析题目 给你提示了我们访问source.php来看一下 大boss出现&#xff0c;开始详细手撕~ 3.手撕PHP代码&#xff08;代码审计&#xff09; 本人是小白&#xff0c;所以第一步&…

解读SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC

SPP与SPPF 一、SPP的应用的背景 在卷积神经网络中我们经常看到固定输入的设计&#xff0c;但是如果我们输入的不能是固定尺寸的该怎么办呢&#xff1f; 通常来说&#xff0c;我们有以下几种方法&#xff1a; &#xff08;1&#xff09;对输入进行resize操作&#xff0c;让他们…

案例144:基于微信小程序的自修室预约系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Unity手机移动设备重力感应

Unity手机移动设备重力感应 一、引入二、介绍三、测试成果X Y轴Z轴横屏的手机&#xff0c;如下图竖屏的手机&#xff0c;如下图 一、引入 大家对重力感应应该都不陌生&#xff0c;之前玩过的王者荣耀的资源更新界面就是使用了重力感应的概念&#xff0c;根据手机的晃动来给实体…

Latex生成的PDF中加入书签/Navigation/导航

本文参考&#xff1a;【Latex学习】在生成pdf中加入书签/目录/提纲_latex 书签-CSDN博客 &#xff08;这篇文章写的真的太棒了&#xff01;非常推荐&#xff09; 题外话&#xff0c;我的碎碎念&#xff0c;这也是我如何提高搜索能力的办法&#xff1a;想在Latex生成的PDF中加入…

2023美团机器人研究院学术年会成功举办

2023年12月19日&#xff0c;深圳市美团机器人研究院学术年会在清华大学深圳国际研究生院成功落下帷幕。会议回顾了研究院成立一年来的进展和成果&#xff0c;并邀请了各界专家共同讨论机器人技术的未来发展趋势。此外&#xff0c;年会期间还举办了首届低空经济智能飞行管理挑战…

【网络安全/CTF】unseping 江苏工匠杯

该题考察序列化反序列化及Linux命令执行相关知识。 题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($thi…

安洵杯 re + 其他部分题解

第11&#xff0c;比较小丑&#xff0c;差了一步队伍wp应该会发吧&#xff0c;不知道&#xff0c;我先放点跟我有关系的 Re mobilego so的check看了一会比较南崩&#xff0c;但是看flag的密文形式很像简单位置替换所以直接输编码表&#xff0c;jeb动调然后得到替换表解密就行…