处理不完整数据集

  • 推理方法

例如调研性别时,发生很多的姓名是男性,那么当性别有缺失值,但是姓名是一样的,就可以将缺失值填补为男性,等等这种生活中靠数学或者关系逻辑来填补缺失值的方法

 

  • 行删除

a、只要包含一个或多个缺失值的行会被输出,这方法称为行删除法(listwise)、个案删除(case-wise)或剔除

b、 行删除法假定数据是MCAR(即完整的观测只是全数据的一个随机样本)(也就是说数据是MCAR,可使用行删除,因为后续样本量的减少对统计检验效力不会造成严重影响)

#以下两个语句的结果都是一样的:将缺失数据的行删除,然后结果保存到newdata中
newdata <- mydata[complete.cases(mydata),]
newdata <- na.omit(mydata)

案例

研究寿命和妊娠期对睡眠中做梦时长的影响,可应用行删除法的线性回归

> fit <- lm(Dream ~ Span + Gest,data = na.omit(sleep))  #行删除法时使用42个实例,注意代码cor(sleep,use="complete.obs")可生成同样的结果
> summary(fit)

Call:
lm(formula = Dream ~ Span + Gest, data = na.omit(sleep))

Residuals:
   Min     1Q Median     3Q    Max 
-2.333 -0.915 -0.221  0.382  4.183 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.480122   0.298476    8.31  3.7e-10 ***
Span        -0.000472   0.013130   -0.04    0.971    
Gest        -0.004394   0.002081   -2.11    0.041 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1 on 39 degrees of freedom
Multiple R-squared:  0.167,	Adjusted R-squared:  0.125 
F-statistic: 3.92 on 2 and 39 DF,  p-value: 0.0282
#动物妊娠期越短,做梦时长越长(控制寿命不变),而控制妊娠期不变时,寿命与做梦时长不相关


> fit1 <- lm(Dream ~ Span + Gest,data = sleep)   #不使用行删除法有 44个实例,和许多的R函数一样,lm()将使用有限的行删除
> summary(fit1)                                  #定义会用函数拟合、含缺失值的变量,本例(Dream、Span、Gest)对应的实例才会被删除

Call:
lm(formula = Dream ~ Span + Gest, data = sleep)

Residuals:
   Min     1Q Median     3Q    Max 
-2.313 -0.858 -0.218  0.408  4.184 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.478748   0.290662    8.53  1.3e-10 ***
Span        -0.000887   0.012310   -0.07    0.943    
Gest        -0.004319   0.001756   -2.46    0.018 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1 on 41 degrees of freedom
  (18 observations deleted due to missingness)
Multiple R-squared:  0.195,	Adjusted R-squared:  0.156 
F-statistic: 4.98 on 2 and 41 DF,  p-value: 0.0116

 

  • 多重插补法(MI)

多重插补(MI)是一种基于重复模拟的处理缺失值的方法,在面对复杂的缺失值问题是,常用该方法

a、它将从一个包含缺失值的数据集中生成一组完整的数据集(通常用3到10个)

b、每个模拟数据集中,缺失数据将用 蒙特卡洛方法来填补

c、此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。

R 中可利用 Amelia,mice和 mi 包来执行这些操作

 

基于mice包的分析通常符合以下过程

library(mice)
imp <- mice(data,m)
fit <- with(imp,analysis)
pooled <- pool(fit)
summary(pooled)

data:是一个包含缺失值的矩阵或者数据框

imp:是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认 m 为 5

analysis:是一个表达式对象,用来设定应用于 m 个插补数据集的统计分析方法。方法包括线性回归模型的lm() 函数、做广义线性模型的glm()函数、以及做负二项模型的 nbrm() 函数。表达式在函数的括号中,~ 的左边是响应变量,右边是预测变量(用 + 符号分隔开)

fit:是一个包含 m 个单独统计分析平均结果的列表对象

pooled:是一个包含这 m 个统计分析平均结果的列表对象

 

实现原理 P394

 

> library(mice)
> data(sleep,package = "VIM")
> imp <- mice(sleep,seed=1234)

 iter imp variable
  1   1  NonD  Dream  Sleep  Span  Gest
  1   2  NonD  Dream  Sleep  Span  Gest
#...结果过长,忽略不写...

> fit <- with(imp,lm(Dream~Span + Gest))
> pooled <- pool(fit)
> summary(pooled)
               est    se    t df Pr(>|t|)  lo 95  hi 95 nmis  fmi lambda
(Intercept)  2.546 0.255 10.0 52    1e-13  2.035  3.057   NA 0.09   0.05
Span        -0.005 0.012 -0.4 52    7e-01 -0.029  0.020    4 0.09   0.05
Gest        -0.004 0.001 -2.7 56    1e-02 -0.007 -0.001    4 0.05   0.02

可看到Span的回归系数不显著(p≈0.08),Gest的系数在p<0.01的水下很显著,若将结果与上述行删除的对比,会发现背离的结论相同,当控制寿命不变时,妊娠期与做梦时长有一个(统计)显著、负相关的关系

fmi:表示由于引入缺失数据而引起的变异所占整体不确定性的比例

  • 其他处理缺失值的方法
软件包描述
mvnmle对多元正态分布数据中缺失值的最大似然估计
cat对数线性模型中多元类别型变量的多重插补
arrryImpute、arrayMissPattern、SeqKnn处理伪阵列数据的使用函数
longitudinalData相关的函数列表,比如对时间序列缺失值进行插补的一系列函数
kmi处理生存分析缺失值的Kaplan-Meier多重插补
mix一般位置模型中混合类型和连续型数据的多重插补
pan多元面板数据或聚类数据的多重插补

 

  • 两种过时(或者说不提倡常用的方法、尽量只作为备选的方法)
  • 成对删除

对于成对删除,观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除

> cor(sleep,use = "pairwise.complete.obs")
         BodyWgt BrainWgt NonD Dream Sleep  Span Gest  Pred  Exp Danger
BodyWgt     1.00     0.93 -0.4  -0.1  -0.3  0.30  0.7  0.06  0.3   0.13
BrainWgt    0.93     1.00 -0.4  -0.1  -0.4  0.51  0.7  0.03  0.4   0.15
NonD       -0.38    -0.37  1.0   0.5   1.0 -0.38 -0.6 -0.32 -0.5  -0.48
Dream      -0.11    -0.11  0.5   1.0   0.7 -0.30 -0.5 -0.45 -0.5  -0.58
Sleep      -0.31    -0.36  1.0   0.7   1.0 -0.41 -0.6 -0.40 -0.6  -0.59
Span        0.30     0.51 -0.4  -0.3  -0.4  1.00  0.6 -0.10  0.4   0.06
Gest        0.65     0.75 -0.6  -0.5  -0.6  0.61  1.0  0.20  0.6   0.38
Pred        0.06     0.03 -0.3  -0.4  -0.4 -0.10  0.2  1.00  0.6   0.92
Exp         0.34     0.37 -0.5  -0.5  -0.6  0.36  0.6  0.62  1.0   0.79
Danger      0.13     0.15 -0.5  -0.6  -0.6  0.06  0.4  0.92  0.8   1.00

此例中,任何两个变量的相关系数只利用了仅这两个变量可用的观测(忽略其他变量),比如BodyWgt 和 BrainWgt 基于62种(所有变量下的动物数)动物的数据,而 BodyWgt 和 NonD基于42种动物的数据,每次计算只用了不同的数据子集,这将会导致一些扭曲的、难以解释的结果

  • 简单(非随机)插补

所谓简单插补,即用某个值(平均值、中位数、众数)来替换变量中的缺失值。注意这话总替换是非随机的,这意味着不会引入随机误差(与多重插补不同)

优点:不会减少样本量

缺点:对于非MCAR数据会产生有偏的结果,若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验 p值

 

R语言环境变量的设置 环境设置函数为options() - holy_black_cat - 博客园 

 

转载于:https://my.oschina.net/u/1785519/blog/1565313

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值