缺失值

缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类,分组,删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。

**缺失值的处理方法:**对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。对于主观数据,人将影响数据的真实性,存在缺失值的样本的其他属性的真实值不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观数据一般不推荐插补的方法。插补主要是针对客观数据,它的可靠性有保证。

删除含有缺失值的个案:主要有简单删除法和权重法。

  1. 简单删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。
  2. 当缺失值的类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过logistic或probit回归求得。如果解释变量中存在对权重估计起决定行因素的变量,那么这种方法可以有效减小偏差。如果解释变量和权重并不相关,它并不能减小偏差。另外对于存在多个属性缺失的情况不适用。

可能值插补缺失值:原理是以最可能的值来插补缺失值比全部删除不完全样本所产生的信息丢失要少。如果因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费,所以产生了以可能值对缺失值进行插补的思想与方法。常用的有如下几种方法。

  1. 均值插补:如果缺失值是数值型的,就以该属性存在值的平均值来插补缺失值;如果缺失值是类别型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值;
  2. 利用同类均值插补:同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。首先对信息完全的变量或其子集行聚类,然后按缺失个体所属类来插补不同类的均值;
  3. 极大似然估计(Max Likelihood)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。可以保证ML估计值是渐近无偏的并服从正态分布。但该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
  4. 多重插补(Multiple Imputation)。思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

缺失值检测
关于缺失值的检测应该包括:缺失值数量、缺失值比例、缺失值与完整值数据筛选

sum(is.na(data))                #查看data里缺失值个数
sum(is.na(data$DINNER_PRICE)    #查看data里维度DINNER_PRICE缺失值个数
data=data[!is.na(data$DINNER_PRICE),]     #删除DINNER_PRICE缺失样本
data=na.omit(data)              #去除有NA的行(方法1)
data[complete.cases(data),]     #去除有NA的行(方法2)
data[complete.cases(data[,5:6]),]    #只过滤第5列,第6列中含有NA的行

缺失值检测-整体

sum(complete.cases(data))   #不含缺失值记录
sum(!complete.cases(data))    #含缺失值记录
mean(!complete.cases(data))       #有缺失值记录比例
head(data[!complete.cases(data),])  #筛选出有缺失值的记录
sum(is.na(data))     #数据集中缺失值总计数量

缺失值检测-维度检测

sum(complete.cases(data$CHANNEL_GRADE))   #不含缺失值
sum(!complete.cases(data$CHANNEL_GRADE))    #含缺失值
mean(!complete.cases(data$CHANNEL_GRADE))       #有缺失值占比
head(data[!complete.cases(data$CHANNEL_GRADE),])    #筛选出CHANNEL_GRADE有缺失值的记录

把缺失值数据集、非缺失值数据集分开

sub <- which(is.na(data$CHANNEL_GRADE))  #识别CHANNEL_GRADE中缺失值所在行数
inputfile1 <- inputfile[-sub,]   #将数据集分成完整数据和缺失数据两部分
inputfile2 <- inputfile[sub,]

异常值(outlier)

指样本中的个别值,其数值明显偏离它(或他们)所属样本的其余观测值,也称异常数据,离群值。

目前人们对异常值的判别与剔除主要采用物理判别法和统计判别法两种方法。

  1. 物理判别法就是根据人们对客观事物已有的认识,判别由于外界干扰、人为误差等原因造成实测数据值偏离正常结果,在实验过程中随时判断,随时剔除;
  2. 统计判别法是给定一个置信概率,并确定一个置信限,凡超过此限的误差,就认为它不属于随机误差范围,将其视为异常值剔除。当物理识别不易判断时,一般采用统计识别法。

异常值检验

方法1:箱线图检验离群值

sp=boxplot(hon_01$CHARGE_T,boxwex=0.7)
title("异常值检测箱线图")
xi=1.1
sd.s=sd(hon_01[complete.cases(hon_01),]$CHARGE_T)
mn.s=mean(hon_01[complete.cases(hon_01),]$CHARGE_T)
points(xi,mn.s,col="red",pch=18)
arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1)
text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)],  sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red")

方法2:当前值在平均值的±3个标准差之外

a<-matrix(1:12,nrow=3)
list_mean<- apply(a,2,mean)        #按列求均值
list_sd<-apply(a,2,std)            #按列求标准差
max<-list_mean+3*(list_sd)         #按列求最大值
min<-list_mean-3*list_sd           #按列求最小值
apply(a,2,mean,na.rm=TRUE)         #如果有空值,可以加入na.rm=TRUE,忽略掉空值

方法3:
3.1、计算下四分位数、上四分位数和四分位距

QL <- quantile(value, probs = 0.25)
QU <- quantile(value, probs = 0.75)
QU_QL <- QU-QL

3.2、找出异常点

which(value > QU + 1.5*QU_QL)
value[which(value > QU + 1.5*QU_QL)]

异常值处理
盖帽法:整行替换数据框里99%以上和1%以下的点,将99%以上的点值=99%的点值;小于1%的点值=1%的点值

q1 <- quantile(hon_01$USER_AGE, 0.01)        #取得时1%时的变量值
q99 <- quantile(hon_01$USER_AGE, 0.99)       #取得时99%时的变量值
hon_01[hon_01$USER_AGE < q1,]$USER_AGE <- q1
hon_01[hon_01$USER_AGE > q99,]$USER_AGE < -q99
summary(hon_01$USER_AGE)      #盖帽法之后,查看数据情况

超详细:R语言缺失值及异常值处理相关推荐

  1. R语言缺失值判断与处理-2

    R语言-缺失值判断以及处理 上次说了关于某个固定值,异常值,缺失值等的固定位置,今天详细说下如果数据列中出现缺失值,该如何处理. 向量组中的不说了,一般实践都是数据框. 1.数据框缺失值判断 数据框类 ...

  2. r语言中检测异常值_R中的异常值检测

    r语言中检测异常值 介绍 (Introduction) An outlier is a value or an observation that is distant from other obser ...

  3. R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值

    R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值 目录 R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值

  4. R语言缺失值:is.na函数查看数据对象中是否包含缺失值NA、特定数据编码为编码为缺失值NA、na.rm=TRUE参数获得有效的计算结果、complete.cases函数筛选数据、na.omit函数

    R语言缺失值:is.na函数查看数据对象中是否包含缺失值NA.特定数据编码为编码为缺失值NA.na.rm=TRUE参数获得有效的计算结果.complete.cases函数筛选数据.na.omit函数 ...

  5. 超详细c语言简化tcp通信接口(多线程实现一个服务端处理多个客户端服务)

    超详细c语言tcp通信接口 1.可下载源码(客户端 || 服务端通信) 2.说明 3.接口代码 4.客户端通信main_client_demo.c 5.服务端通信main_server_demo.c ...

  6. R语言缺失值插补之simputation包

    获取更多R语言和生信知识,请欢迎关注公众号:医学和生信笔记 医学和生信笔记 公众号主要分享:1.医学小知识.肛肠科小知识:2.R语言和Python相关的数据分析.可视化.机器学习等:3.生物信息学学习 ...

  7. r library car_基础方法 | 用R语言完成量化论文全流程示例!附超详细R脚本

    基础方法 ♪ Method R语言的优点 对于有一定数据分析基础的朋友们来说,要入门R语言并不是十分困难的.但是这毕竟是一门专业性很强的技术,我们当然希望投入精力掌握R语言之后能够得到相应的回报. 在 ...

  8. R语言︱缺失值处理之多重插补——mice包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:缺失值是数据清洗过程中非常重要的问题 ...

  9. R语言回归分析-改进异常值

    R语言回归分析 回归分析可以说是统计学的核心,它其实是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量.效标变量或结果变量)的方法.通常,回归分析可以用来 ...

最新文章

  1. java两个线程循环打印_java循环打印 多线程
  2. centos下tomcat6.0.28配置
  3. Brian Kelly:比特币现金发展基金是大利好,现在正是买入时机
  4. php roadrunner,使用RoadRunner 加速 Laravel 应用
  5. 解析BW:数据源提取数据的原理
  6. 系列笔记 | 深度学习连载(6):卷积神经网络基础
  7. 【机器学习入门】机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...
  8. 线性代数(矩阵、高斯、线性基……)
  9. 计算机的iscsi配置,PC端的iSCSI参数设置方法
  10. Linux安装Jenkins
  11. system函数_自学C++基础教程【函数】
  12. Maximal Binary Matrix CodeForces - 803A (贪心+实现)
  13. java 多线程 异步调用
  14. Windows 下 tail 查看日志命令工具
  15. efi分区咋移动到c盘里_曲线解决——用原版镜像中的diskpart命令创建efi分区,分区类型为主分区的原因...
  16. java 正则表达式 compile_JAVA 正则表达式
  17. 【区块链】以太坊Solidity编程:智能合约实现之基本语法
  18. 一文简要了解词义消歧与实体消歧
  19. 【Task02】Pandas之基础
  20. c语言迷宫闯关游戏大全,C语言实现迷宫小游戏

热门文章

  1. 除硬件外计算机系统不可缺少的是,银河系重约多少个太阳质量?
  2. JS-实现上一题下一题切换功能
  3. 阿里网易面试送送送命题 —— 微服务架构
  4. RTSP视频边缘计算网关EasyNVR在5G时代有什么运用价值?
  5. 三菱PLC梯形图入门操作指令
  6. 大专学的计算机如何进国企,专科毕业生想进国企?这三大专业不要错过,成功率高达60%...
  7. gps+wifi+mobile 5的手机参数对比
  8. 现在开发人员都开始做测试了,是不是以后就没有软件测试人员了?
  9. Windows 8 经典主题
  10. 今日头条怎么刷文章阅读量_今日头条能刷阅读量吗?