在R语言中进行缺失值填充:估算缺失值

原文链接:http://tecdat.cn/?p=8287

介绍

缺失值被认为是预测建模的首要障碍。因此,掌握克服这些问题的方法很重要。

估算缺失值的方法的选择在很大程度上影响了模型的预测能力。在大多数统计分析方法中,删除是用于处理缺失值的默认方法。但是,它会导致信息丢失。

在本文中,我列出了5个R语言方法。

链式方程进行的多元插补

通过链式方程进行的多元插补是R用户常用的。与单个插补(例如均值)相比,创建多个插补可解决缺失值的不确定性。

MICE假定缺失数据是随机(MAR)缺失,这意味着,一个值缺失概率上观测值仅取决于并且可以使用它们来预测。通过为每个变量指定插补模型,可以按变量插补数据。

例如:假设我们有X1,X2….Xk变量。如果X1缺少值,那么它将在其他变量X2到Xk上回归。然后,将X1中的缺失值替换为获得的预测值。同样,如果X2缺少值,则X1,X3至Xk变量将在预测模型中用作自变量。稍后,缺失值将被替换为预测值。

默认情况下,线性回归用于预测连续缺失值。Logistic回归用于分类缺失值。一旦完成此循环,就会生成多个数据集。这些数据集仅在估算的缺失值上有所不同。通常,将这些数据集分别构建模型并组合其结果被认为是一个好习惯。

确切地说,使用的方法是:

  1. PMM(预测均值匹配)–用于数字变量

  2. logreg(逻辑回归)–对于二进制变量(具有2个级别)

  3. polyreg(贝叶斯多元回归)–用于因子变量(> = 2级)

  4. 比例模型(有序,\> = 2个级别)

现在让我们实际操作。


#读取数据
> data <- iris

#随机产生10%的缺失值
> summary(iris)

#随机产生10%的缺失值
> iris.mis <- prodNA(iris, noNA = 0.1)

#检查数据中引入的缺失值
> summary(iris.mis)

我删除了分类变量。让我们在这里关注连续值。要处理分类变量,只需对类level进行编码并按照以下步骤进行即可。

#删除类别变量
> iris.mis <- subset(iris.mis, select = -c(Species))

md.pattern返回数据集中每个变量中存在的缺失值的表格形式。

> pattern(iris.mis)

让我们了解一下这张表。有98个观测值,没有缺失值。Sepal.Length中有10个观测值缺失的观测值。同样,Sepal.Width等还有13个缺失值。

我们还可以创建代表缺失值的视觉效果。

> plot(iris.mis, col,
                    numbers=TRUE, sortVars=TRUE"))

让我们快速了解这一点。数据集中有67%的值,没有缺失值。在Petal.Length中缺少10%的值,在Petal.Width中缺少8%的值,依此类推。您还可以查看直方图,该直方图清楚地描述了变量中缺失值的影响。

现在,让我们估算缺失的值。

Multiply imputed data set
Call:
 Number of multiple imputations: 5
Missing cells per column:
Sepal.Length Sepal.Width Petal.Length Petal.Width 
13            14          16           15 
Imputation methods:
Sepal.Length Sepal.Width Petal.Length Petal.Width 
"pmm"        "pmm"        "pmm"       "pmm" 
VisitSequence:
Sepal.Length Sepal.Width Petal.Length Petal.Width 
1              2            3           4 
PredictorMatrix:
              Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length        0          1            1            1
Sepal.Width         1          0            1            1
Petal.Length        1          1            0            1
Petal.Width         1          1            1            0
Random generator seed value: 500

这是使用的参数的说明:

  1. m – 估算数据集

  2. maxit – 插补缺失值的迭代次数

  3. method –是指插补中使用的方法。我们使用了预测均值匹配。

由于有5个估算数据集,因此可以使用_complete()_函数选择任何数据集。

还可以合并来自这些模型的结果,并使用_pool()_命令获得合并的输出。

请注意,我仅出于演示目的使用了上面的命令。您可以在最后替换变量值并尝试。

多重插补

该程序包还执行多个插补(生成插补数据集)以处理缺失值。多重插补有助于减少偏差并提高效率。它可以通过基于bootstrap程序的EMB算法,从而可以更快速,更可靠地插入许多变量,包括横截面,时间序列数据等。此外,还可以使用多核CPU的并行插入。

它做出以下假设:

  1. 数据集中的所有变量均具有多元正态分布(MVN)。它使用均值和协方差汇总数据。

  2. 缺失数据本质上是随机的(随机缺失)

因此,当数据具有多变量正态分布时,最有效。如果没有,将进行转换以使数据接近正态分布。

唯一需要注意的是对变量进行分类。

 #访问估算的输出
> amelia_fit$imputations\[\[1\]\]

要检查数据集中的特定列,使用

> amelia_fit$imputations\[\[5\]\]$Sepal.Length

#将输出导出到csv文件

随机森林

顾名思义,missForest是一个实现随机森林算法。它适用于各种变量类型的非参数插补法。那么,什么是非参数方法?

非参数方法不会有关于函数形式明确的假设_˚F _。取而代之的是,它尝试估计_f_,使其可以与数据点尽可能接近。

它是如何工作的 ?简而言之,它为每个变量建立一个随机森林模型。然后,它使用模型在观测值的帮助下预测变量中的缺失值。

它产生OOB(袋外)估算误差估计。而且,它对插补过程提供了高水平的控制。它有选择分别返回OOB(每个变量),而不是聚集在整个数据矩阵。这有助于准确估算模型值。

NRMSE是归一化的均方误差。它用于表示从估算连续值得出的误差。PFC(错误分类的比例)用于表示从估算类别值得出的误差。

#比较实际数据准确性

>iris.err

NRMSE      PFC 
0.1535103 0.0625000

这表明类别变量的误差为6%,连续变量的误差为15%。这可以通过调整_mtry_和_ntree_参数的值来改善  。mtry是指在每个分支中随机采样的变量数。ntree是指在森林中生长的树木数量。

非参数回归方法

对多个插补中的每个插补使用不同的bootstrap程序重采样。然后,将 加性模型(非参数回归方法)拟合到从原始数据中进行替换得到的样本上,并使用非缺失值(独立变量)预测缺失值(充当独立变量)。

然后,它使用预测均值匹配(默认)来插补缺失值。预测均值匹配非常适合连续和分类(二进制和多级),而无需计算残差和最大似然拟合。

自动识别变量类型并对其进行相应处理。

> impute_arg

输出显示R²值作为预测的缺失值。该值越高,预测的值越好。使用以下命令检查估算值

#检查估算变量Sepal.Length
> impute_arg$imputed$Sepal.Length

带有诊断的多重插补

带有诊断的多重插补 提供了一些用于处理缺失值的方法。它也构建了多个插补模型来近似缺失值。并且,使用预测均值匹配方法。

虽然,我已经在上面解释了预测均值匹配(pmm)  :对于变量中缺失值的每个观察值,我们都会从可用值中找到最接近的观察值该变量的预测均值。然后将来自“匹配”的观察值用作推断值。

  1. 它可以对插补模型进行图形诊断,并可以实现插补过程的收敛。

  2. 它使用贝叶斯版本的回归模型来处理问题。

  3. 插补模型规范类似于R中的回归输出

  4. 它会自动检测数据中的不规则性,例如变量之间的高共线性。

  5. 而且,它在归算过程中增加了噪声,以解决加性约束的问题。

如图所示,它使用汇总统计信息来定义估算值。

尾注

在本文中,我说明使用5个方法进行缺失值估算。这种方法可以帮助您在建立预测模型时获得更高的准确性。


(0)

相关推荐

  • 临床大数据文献|缺失数据的单纯插补

    图片源自网络 欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO, SEER数据挖掘. 临床大数据研究系列文献分享第4篇,由浙江大学章仲 ...

  • Stata数据处理:缺失值与多重补漏分析(一)

    Stata数据处理:缺失值与多重补漏分析(一)

  • 数据分析过程中,发现数值缺失,怎么办?

    按照数据缺失机制,数据分析过程中,我们可以将其分为以下几类: (1)完全随机缺失(MCAR):所缺失的数据发生的概率既与已观察到的数据无关,也与未观察到的数据无关. (2)随机缺失(MAR):假设缺失 ...

  • 手把手带你入门数据插补(附代码)

    本文将为你介绍数据缺失时的处理办法. 1. Feature Imputation Feature Imputation是指数据中的数据缺失某些特征值的时候,用一定的方法来解决此问题的过程. 2. 缺失 ...

  • (二)异常值分析

    导读 异常值分析是检验数据是否有录入错误以及含有不合常理的数据: 异常值是指样本中的个别值,其数据明显偏离其余的观测值. 异常值也称为离群点,异常值的分析也称为离群点分析. 异常值通常被定义为小于Q1 ...

  • 对于分类变量的缺失值究竟该如何处理?

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO, SEER数据挖掘. 关于分类变量的缺失值究竟如何处理,我也咨询过很多人,包括统计方 ...

  • R语言中的偏最小二乘回归PLS-DA

    原文链接:http://tecdat.cn/?p=8890 主成分回归(PCR)的方法 本质上是使用第一个方法的普通最小二乘(OLS)拟合来自预测变量的主成分(PC).这带来许多优点: 预测变量的数量 ...

  • R语言中进行期权定价的Heston随机波动率模型

    原文链接:http://tecdat.cn/?p=12111 在本文中,我将向您展示如何模拟股票价格的Heston随机波动率模型. Heston模型是一种期权估值方法,它考虑到同一资产在给定时间交易的 ...

  • ggClusterNet:手写算法在R语言中实现Gephi布局之一

    写在前面 像不像Gephi出图,Gephi布局还是有很多人喜欢,R语言确实不好实现,这个算法需要大量的迭代,让模块化点之间连线最短,不断修正,很耗费时间,我将聚类算法和修改后的距离算法合并起来并结合节 ...

  • R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归

    原文链接:http://tecdat.cn/?p=20882 1导言 这篇文章探讨了为什么使用广义相加模型 是一个不错的选择.为此,我们首先需要看一下线性回归,看看为什么在某些情况下它可能不是最佳选择 ...

  • R语言中的隐马尔可夫HMM模型实例

    原文链接:http://tecdat.cn/?p=17592  最近,我们使用隐马尔可夫模型开发了一种解决方案,并被要求解释这个方案. HMM用于建模数据序列,无论是从连续概率分布还是从离散概率分布得 ...

  • R语言中回归和分类模型选择的性能指标

    原文链接:http://tecdat.cn/?p=11334 有多种性能指标来描述机器学习模型的质量.但是,问题是,对于问题正确的方法是什么?在这里,我讨论了选择回归模型和分类模型时最重要的性能指标. ...

  • R语言中使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据

    原文链接:http://tecdat.cn/?p=20828 本文使用lasso或非凸惩罚拟合线性回归,GLM和Cox回归模型的正则化,特别是_最小_最_大凹_度_惩罚_函数_(MCP)_和光滑切片绝 ...

  • R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

    原文链接:http://tecdat.cn/?p=22956 贝叶斯网络(BN)是一种基于有向无环图的概率模型,它描述了一组变量及其相互之间的条件依赖性.它是一个图形模型,我们可以很容易地检查变量的条 ...

  • R语言中生存分析模型的时间依赖性ROC曲线可视化

    原文链接:http://tecdat.cn/?p=20650 人们通常使用接收者操作特征曲线(ROC)进行二元结果逻辑回归.但是,流行病学研究中感兴趣的结果通常是事件发生时间.使用随时间变化的时间相关 ...