这是一篇对R语言中处理缺失值的整理,主要思路搬运自Medium上面一篇Harshitha Mekala写的文章Dealing with Missing Data using R,是我目前搜到的最全的关于missing value处理package的整理,足足五个包。我自己读的时候做了一些其他资料的查阅作为补充。我用了一个上课的时候老师给的完整的dataset,其中的missing value是随机生成的,写到哪部分的时候我会同时po一些代码和截屏。分成三个部分:

一、check missing values in your dataset

二、缺失值处理的四种思路

三、五个package在R中的实现


一、了解缺失值

1)计数一下有多少缺失:sum(is.na(data frame$column name)

2)MICE包中的 md.pattern(df)

3)visualisation:VIM包/UpsetR

library(VIM)
mice_plot <- aggr(cm, col=c('navyblue','yellow'),numbers=TRUE, sortVars=TRUE,labels=names(cm), cex.axis=.7,gap=5, ylab=c("Missing data","Pattern"),)

VIM
library(UpSetR)
gg_miss_upset(cm)

UpsetR
missmap(iris.mis)

Amelia

二、处理缺失值四种思路

1.删掉(当缺失值所占的比重太大的时候考虑直接删列,删行的话,当对于所有样本来说missing的概率相同的时候probability of missing variable is same for all observations)分为两种方法:1)list wise deletion; 2)pair wise deletion.

2.Mean/ Mode/ Median Imputation: 最简单的一种插值方式,这里还可以分group去求这些统计量。但是问题是 全部的空缺都用一样的value会损坏分布,所以我们可以random imputed with existing values,这样考虑了补齐前后的分布相差太多的问题。还可以从分布里面random生成值取填补。但是不管用什么办法,首先把想要impute的column拎出来看一下分布,看一下缺失比例再选择合适的值。

3.用prediction model:每个想要填补的column都作为label 去建模做预测。它的问题在于,如果这些attributes之间没什么联系的话,prediction就不会太准。

4. KNN插值:找到与有缺失值的attributes最similar(基于distance)的样本,用它的值去填补。优点是:qualitative & quantitative特征都可用/不需要建model/可以同时处理一个样本的多个missing/考虑了整个数据集的内在联系。缺点是:耗时/找合适的K值很麻烦


三、五个package在R中的实现

1.MICE(Multivariate Imputation via Chained Equations) 链式方程多重插补,是被人们用的最多最熟知的一种,我有参考这两篇文章:https://zhuanlan.zhihu.com/p/21549898 https://jiangjun.link/post/r-missing-data/基本思想是对于一个具有缺失值的变量,用其他变量的数据对这个变量进行拟合,这样每个变量都有自己的插值模型,再用拟合的预测值对这个变量的缺失值进行填补。可以这么做的原因MICE有个假定:所有的missing都是Missing at Random (MAR):the probability that a value is missing depends only on observed value and can be predicted using them。

library(mice)
md.pattern(cm)
imputed = mice(cm, m=5, maxit = 50, method = 'pmm', seed = 500)
summary(imputed)
completeData <- complete(imputed,2)  #从5个里面选第二个

系数:

  • m — Refers to 5 imputed data sets
  • maxit — 迭代次数Refers to no. of iterations taken to impute missing values
  • method — Refers to method used in imputation.

四种填补方法:

  1. PMM (Predictive Mean Matching) — For numeric variables
  2. logreg(Logistic Regression) — For Binary Variables( with 2 levels)
  3. polyreg(Bayesian polytomous regression) — For Factor Variables (>= 2 levels)
  4. Proportional odds model (ordered, >= 2 levels)

看一下summary:这里面PredictorMatrix也是可以自己提前设定的,要哪个变量不要哪个变量

用imputed$imp$income查看5次填补值

可以选择一个imputed的结果,也可以combine5个在一起(pool() command我还没搞懂…)

附一个PMM的原理解释:

2.Amelia

It is enabled with bootstrap based EMB(期望最大化) algorithm which makes it faster and robust to impute many variables including cross sectional, time series data etc. Also, it is enabled with parallel imputation feature using multicore CPUs.

Amelia 这个名字来源于 Amelia Earhart,美国航空先驱、作家。她是世界上第一个独立飞行穿越大西洋的女飞行员。但在 1937 年一次环球飞行中,她在途径太平洋上空时神秘失踪(missing)了。所以这个专门用来处理 missing value 的包以 Amelia 命名。

Amelia 对缺失值假设为:

  • 缺失值随机(Missing at Random)
  • 数据中所有变量都满足多元正态分布(Multivariate Normal Distribution, MVN),可以使用均值和协方差来描述数据。

Amelia 利用 bootstrap(有放回抽样),同样也是生成多组填补值。但相比 MICE,MVN 还是有一些局限:

  1. MICE 对缺失值的模拟是一个一个变量进行的,而 MVN 依赖整体数据的多元正态分布
  2. MICE 可以处理多种类型数据的缺失值,而 MVN 只能处理正态分布或经转换后近似正态分布的变量
  3. MICE 能在数据子集的基础上处理缺失值,MVN 则不能

Amelia 适合用于符合多元正态分布的数据。如果数据不符合条件,可能需要事先将数据转换为近似正态分布。

3. missForest

顾名思义 它是random forest的一种应用。是一种非参数插值方法,不需要估计参数,它为每一个需要impute的变量建立随机森林。会返回OOB (out of bag) imputation error estimate for each variable.This helps to look more closely as to how accurately the model has imputed values for each variable. 说明它也用到bootstrap。

关于OOBerror:This can be improved by tuning the values of mtry and ntree parameter. mtry refers to the number of variables being randomly sampled at each split. ntree refers to number of trees to grow in the forest.

4.Hmisc

Hmisc是一个用途很多的包。(high — level graphics, imputing missing values, advanced table making, model fitting & diagnostics (linear regression, logistic regression & cox regression) etc.)

在实现impute功能的时候,它是假定线性关系的。常用的函数:impute()和aregImpute(). impute()function simply imputes missing value using user defined statistical method (mean, max, mean). It’s default is median. On the other hand,aregImpute()allows mean imputation using additive regression, bootstrapping, and predictive mean matching.

分三步:首先是bootstrap,然后用additive model进行缺失值预测,最后pmm来impute。

5.mi

mi (Multiple imputation with diagnostics)也用pmm

  • It allows graphical diagnostics (图形诊断)of imputation models and convergence of imputation process.
  • It uses bayesian version of regression models to handle issue of separation.
  • Imputation model specification is similar to regression output in R
  • It automatically detects irregularities in data such as high collinearity among variables.
  • Also, it adds noise to imputation process to solve the problem of additive constraints.

系数default:

  • rand.imp.method as “bootstrap”
  • n.imp (number of multiple imputations) as 3
  • n.iter ( number of iterations) as 30
library(mi)
mi_data <- mi(cm[1:11], seed = 335)
summary(mi_data)

以上。

graphpad7.04多组比较p值_R语言缺失值处理(MICE/Amelia/missForest/Hmisc/mi)相关推荐

  1. graphpad7.04多组比较p值_手把手教你用Graphpad做单因素方差分析

    0 2 首先打开Graphpad软件,输入数据,更改组名,更改Data1为Total distance 0 3 进行数据正态性检验:选中数据 – Analyze - Column analyses - ...

  2. graphpad7.04多组比较p值_同是折线图为何你却这么优秀,这才是多组数据作图应该有的样子...

    相信大家对Excel做折线图应该不陌生,在展示数据的时候,图表是一种最好的展示方法.但是经常会碰到一种尴尬的事情就是,当数据维多比较多的时候,做出的图表就会显得非常难看.今天我们就来学习一下,多组数据 ...

  3. graphpad7.04多组比较p值_GraphPad中国官网 - Prism 8 统计指南 - 对P值的更多错误解读...

    Kline(1)列出了普遍认为的P值谬误,我在这里总结如下: 谬论:p值是由于抽样误差而造成结果的概率 假设零假设为真,则计算P值.换言之,P值的计算是基于由于抽样误差而造成差异的假设.因此,P值无法 ...

  4. 多选取值_R语言缺失值的处理——回归预测法

    在进行数据分析的过程中,有时候拿到的数据并不完整,有很多确实数据.这就需要我们对这些缺失值进行处理.一般的处理办法包括删除缺失值较多的样本和变量.使用其他样本均值替代缺失值等方法.而利用回归模型进行缺 ...

  5. r 函数返回多个值_R语言:广义估计方程(GEE)

    01 解决何种问题 在临床研究中,经常会比较两种治疗方式对患者结局的影响,并且多次测量结局.例如为了研究两种降血糖药对血糖的控制结果是否存在差异,研究者会在两组人群服药后不同的时间点记录血糖值,然后评 ...

  6. python 分析两组数据的差异_R语言limma包差异基因分析(两组或两组以上)

    使用limma包进行差异基因分析时,做最多的是两分类的,例如control组和disease组,但也会碰到按照序列进行的分组.这时,如果逐一使用两两比较求差异基因则略显复杂.其实开发limma包的大神 ...

  7. r语言datarame删除行_R语言缺失值的处理:线性回归模型插补

    原文链接: 拓端数据科技 / Welcome to tecdat​tecdat.cn 在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1.这样就可以不删除变量或观测值. 视频 ...

  8. r语言查找是否存在空值_R语言-缺失值判断以及处理

    #####缺失值判断以及处理##### #举例1:向量类型判断缺失值is.na和缺失值的填补which (x is.na(x)  #返回一个逻辑向量,TRUE为缺失值,FALSE为非缺失值 table ...

  9. python代码大全p-基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码 # TTest.py # -*- coding: utf-8 -*- ''' # ...

最新文章

  1. 韩顺平循序渐进学java 第10.11讲 继承.重载.覆盖
  2. p7zip的解压和压缩
  3. 20155230 2016-2017-2 《Java程序设计》第十周学习总结
  4. DIY人脸跟踪电风扇送女朋友(2)
  5. Objective-C复制解析
  6. 提升访问github.com网址的速度
  7. snmpwalk 小工具
  8. Axure-----三级下拉菜单的具体实现过程
  9. scala Iterator类型入门初探
  10. 如何用excel批量生成word文档,并且命名?
  11. CCF-CSP历年真题大全附题解(202209已更)
  12. win10鼠标右键一直转圈怎么解决 鼠标右键一直转圈
  13. 【12c】12c RMAN新特性之recover table(表级别恢复)
  14. dom影像图形成数字地形图_数字正射影像图DOM
  15. python能爬取网站后台数据_如何利用Python爬取网站数据?
  16. hypervisor - qnx
  17. 喜讯丨zCloud 首批通过中国信通院数据库管理平台基础能力专项评测
  18. 服务器是由哪些硬件构成的?带你一探究竟!
  19. 网络:简述对家庭宽带和专线(企业宽带)的认识
  20. MacOS中afconvert的使用(音频格式转换)

热门文章

  1. 【转载】如何扎实的学好ABAP?我的个人经验
  2. 提交数据库访问性能一些简单措施
  3. Python稳基修炼之计算机等级考试易错概念题5(含答案)
  4. 1、数列求值 - 2019年第十届蓝桥杯大赛软件类省赛
  5. Python+pandas设置DataFrame显示样式
  6. Python判断一个集合族是否为σ代数
  7. Python读取安卓手机GPS信息
  8. 批量统计多个PPTX文件中幻灯片总数量
  9. Python教学与学习过程中应注意的九句话
  10. 在计算机中如何共享文件夹,如何打开计算机共享-在电脑里设置了共享文件在另在一台电脑里怎么 – 手机爱问...