从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.mfbz.cn/a/268072.html

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

相关文章

【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)

作品展示&#xff1a; 0-5&#xff1a; 21题&#xff0c;正确21题&#xff0c;错误21题42题 。小于44格子&#xff0c;都写上&#xff0c;哪怕输入2:8&#xff0c;实际也是5:5 0-10 66题&#xff0c;正确66题&#xff0c;错误66题132题 大于44格子&#xff0c;正确66题抽取44*…

php反序列化漏洞原理、利用方法、危害

文章目录 PHP反序列化漏洞1. 什么是PHP反序列化漏洞&#xff1f;2. PHP反序列化如何工作&#xff1f;3. PHP反序列化漏洞是如何利用的&#xff1f;4. PHP反序列化漏洞的危害是什么&#xff1f;5. 如何防止PHP反序列化漏洞&#xff1f;6. PHP反序列化漏洞示例常见例子利用方法PH…

DaVinci各版本安装指南

链接: https://pan.baidu.com/s/1g1kaXZxcw-etsJENiW2IUQ?pwd0531 ​ #2024版 1.鼠标右击【DaVinci_Resolve_Studio_18.5(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 DaVinci_Resolve_Studio_18.5(64bit)】。 2.打开解压后的文…

插入排序之C++实现

描述 插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分&#xff0c;每次从未排序序列中取出一个元素&#xff0c;然后将它插入到已排序序列的适当位置&#xff0c;直到所有元素都插入完毕&#xff0c;即完成排序。 实现思路…

【c++】string类的使用

目录 一、标准库中的string类 1、简单介绍string类 2、string类的常用接口注意事项 2.1、string类对象的常用构造 2.2、string类对象的容量操作 2.3、string类对象的访问及遍历操作 2.4、string类对象的修改操作 二、string类的模拟实现 一、标准库中的string类 1、简…

jQuery: 整理3---操作元素的内容

1.html("内容") ->设置元素的内容&#xff0c;包含html标签&#xff08;非表单元素&#xff09; <div id"html1"></div><div id"html2"></div>$("#html1").html("<h2>上海</h2>") …

【期末考试】计算机网络、网络及其计算 考试重点

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 计算机网络及其计算 期末考点 &#x1f680;数…

Flink 客户端操作命令及可视化工具

Flink提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、Scala Shell、SQL Client、Restful API和 Web五个方面进行整理。 在Flink安装目录的bin目录下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;这些都是客户…

面向船舶结构健康监测的数据采集与处理系统(一)系统架构

世界贸易快速发展起始于航海时代&#xff0c;而船舶作为重要的水上交通工具&#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…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(三)

钓鱼邮件 当攻击者制作了钓鱼网站、木马程序后&#xff0c;便会想法设法将其传给受害者&#xff0c;而常见的传播方式便是钓鱼网站了。安全意识较差的用户在收到钓鱼邮件后点击邮件中的钓鱼链接、下载附件中的木马程序&#xff0c;便可能遭受攻击&#xff01; 工具简介 Swak…

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

&#x1f3e1;《专栏目录》 目录 1&#xff0c;概述2&#xff0c;复用方法一视频演示2.1&#xff0c;创建工程2.2&#xff0c;复用设计文件 3&#xff0c;复用方法二视频演示4&#xff0c;总结 欢迎点击浏览更多高清视频演示 1&#xff0c;概述 本文简述使用AD软件复用设计文件…

Adobe Photoshop Lightroom各版本安装指南

下载链接​ https://pan.baidu.com/s/1FiqQUcMJu3TrLRWFpaaX3A?pwd0531 #2024版 1.鼠标右击【Lrc2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 Lrc2024(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Setup】选择…

2024-AI人工智能学习-安装了pip install pydot但是还是报错

2024-AI人工智能学习-安装了pip install pydot但是还是报错 出现这样子的错误&#xff1a; /usr/local/bin/python3.11 /Users/wangyang/PycharmProjects/studyPython/tf_model.py 2023-12-24 22:59:02.238366: I tensorflow/core/platform/cpu_feature_guard.cc:182] This …

基于YOLOv7算法的高精度实时海洋生物检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时海洋生物目标检测系统可用于日常生活中检测与定位海胆、海参、扇贝和海星&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目…

嵌入式开发——DMA外设到内存

学习目标 加强理解DMA数据传输过程加强掌握DMA的初始化流程掌握DMA数据表查询理解源和目标的配置理解数据传输特点能够动态配置源数据学习内容 需求 uint8_t data; 串口接收(&data);data有数据了 实现串口的数据接收,要求采用dma的方式。 数据交互流程 CPU配置好DMA外…

jvm对象探究

hostpot虚拟机对象探究 jvm虚拟机创建对象的流程 ava虚拟机&#xff08;JVM&#xff09;创建对象的过程包括以下步骤&#xff1a; 类加载&#xff1a; 首先&#xff0c;JVM会检查对象的类是否已经被加载。如果该类还没有被加载&#xff0c;JVM会通过类加载器加载该类的字节码…

实在没货,简历(软件测试)咋写?

简历咋写&#xff0c;这是很多没有【软件测试实际工作经验】的同学们非常头疼的事情。 简历咋写&#xff1f;首先你要知道简历的作用。 简历的作用是啥呢&#xff1f; 一句话就是&#xff1a;让HR小姐姐约你。 如何让HR看你一眼&#xff0c;便相中你的简历&#xff0c;实现在众…

50 个具有挑战性的概率问题 [01/50]:袜子抽屉

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff08;Fifty Challenge Problems in Probability with Solutions&#xff09;一书。我认为…
最新文章