关于算法:拓端tecdat在R语言中进行缺失值填充估算缺失值

6次阅读

共计 4293 个字符,预计需要花费 11 分钟才能阅读完成。

原文链接: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 个级别)

当初让咱们 实际操作

> path <- "../Data/Tutorial"
> setwd(path)

#读取数据
> 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))
> summary(iris.mis)

 _md.pattern_返回数据集中每个变量中存在的缺失值的表格模式。

> md.pattern(iris.mis)

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

 咱们还能够创立代表缺失值的视觉效果。

> mice_plot <- aggr(iris.mis, col=c('navyblue','yellow'),
                    numbers=TRUE, sortVars=TRUE,
                    labels=names(iris.mis), cex.axis=.7,
                    gap=3, ylab=c("Missing data","Pattern"))

让咱们疾速理解这一点。数据集中有 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\[\[2\]\]
> amelia_fit$imputations\[\[3\]\]
> amelia_fit$imputations\[\[4\]\]
> amelia_fit$imputations\[\[5\]\]

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

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

#将输入导出到 csv 文件

> write.amelia(amelia\_fit, file.stem = "imputed\_data_set")

随机森林

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

非参数办法不会有对于函数模式明确的假如_˚F _。取而代之的是,它尝试预计_f_,使其能够与数据点尽可能 靠近

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

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

NRMSE 是归一化的均方误差。它用于示意从估算间断值得出的误差。PFC(谬误分类的比例)用于示意从估算类别值得出的 误差

#比拟理论数据准确性
> iris.err <- mixError(iris.imp$ximp, iris.mis, iris)
>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 个办法进行缺失值估算。这种办法能够帮忙您在建设预测模型时取得更高的准确性。


最受欢迎的见解

1.R 语言多元 Logistic 逻辑回归 利用案例

2. 面板平滑转移回归 (PSTR) 剖析案例实现

3.matlab 中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R 语言泊松 Poisson 回归模型剖析案例

5.R 语言回归中的 Hosmer-Lemeshow 拟合优度测验

6.r 语言中对 LASSO 回归,Ridge 岭回归和 Elastic Net 模型实现

7. 在 R 语言中实现 Logistic 逻辑回归

8.python 用线性回归预测股票价格

9.R 语言如何在生存剖析与 Cox 回归中计算 IDI,NRI 指标

正文完
 0