超详细:R语言缺失值及异常值处理

您所在的位置:网站首页 r语言缺少参数也没有缺省值 超详细:R语言缺失值及异常值处理

超详细:R语言缺失值及异常值处理

2024-06-29 16:05| 来源: 网络整理| 查看: 265

缺失值

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

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

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

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

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

均值插补:如果缺失值是数值型的,就以该属性存在值的平均值来插补缺失值;如果缺失值是类别型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值;利用同类均值插补:同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。首先对信息完全的变量或其子集行聚类,然后按缺失个体所属类来插补不同类的均值;极大似然估计(Max Likelihood)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。可以保证ML估计值是渐近无偏的并服从正态分布。但该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。多重插补(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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3