美文网首页简书付费文章
R语言高级方法进行缺失数据多重插补案例演示

R语言高级方法进行缺失数据多重插补案例演示

作者: 医科研 | 来源:发表于2020-03-19 07:28 被阅读0次

    当我们在数据集中缺少值时,重要的是考虑为什么它们会丢失以及它们对分析的影响。有时忽略丢失的数据会降低功耗,但更重要的是,有时它会使答案有偏差,并有可能误导错误的结论。因此,重要的是要考虑丢失的数据机制是什么,以便对其进行处理。 Rubin(1976)区分了三种类型的误报机制:

    • 完全随机缺失(MCAR)Missing completely at random:当可以将缺少值的案件视为所有案件的随机样本时;在实践中很少发生MCAR
    • 随机丢失(MAR)Missing at random :以我们拥有的所有数据为条件时,任何剩余的丢失都是完全随机的;也就是说,它不依赖于某些缺少的变量。因此,可以使用观察到的数据对缺失进行建模。然后,我们可以对可用数据使用专门的缺失数据分析方法,以纠正缺失的影响。
    • 非随机丢失(MNAR)Missing not at random:当数据既不是MCAR也不是MAR时。这种情况通常很难处理,因为它将需要对缺失模式进行强有力的假设。

    缺失数据的常见处理方法

    • 人们尝试处理丢失数据的一种常见方法是删除所有缺少值的情况。这种方法称为完整案例分析(CC:Complete cases)。但是,CC仅在数据为MCAR时有效。
    • 另一种方法是多重插补(MI:multiple imputation),这是一种 (monte carlo) 蒙特卡洛方法,它模拟多个值以插补(填充)每个缺失值,然后分别分析每个插补数据集,最后将结果汇总在一起。我们多次估算缺失的数据,以解决我们对缺失数据的真实(未知)值的不确定性。
    • 在处理示例数据集时,我们对多重插补更加满意。从理论上讲,多重插补可以处理所有三种类型的缺失。但是,执行多重插补通常不适合MNAR情况。MNAR类型的数据的数据分析更加复杂,这里我们假设数据是属于 MAR 数据。

    实际数据操作

    # required libraries
    library(mice)
    
    ## Warning: package 'mice' was built under R version 3.6.3
    
    ## 
    ## Attaching package: 'mice'
    
    ## The following objects are masked from 'package:base':
    ## 
    ##     cbind, rbind
    
    library(VIM)
    
    ## Warning: package 'VIM' was built under R version 3.6.3
    
    ## Loading required package: colorspace
    
    ## Loading required package: grid
    
    ## Loading required package: data.table
    
    ## VIM is ready to use. 
    ##  Since version 4.0.0 the GUI is in its own package VIMGUI.
    ## 
    ##           Please use the package to use the new (and old) GUI.
    
    ## Suggestions and bug-reports can be submitted at: https://github.com/alexkowa/VIM/issues
    
    ## 
    ## Attaching package: 'VIM'
    
    ## The following object is masked from 'package:datasets':
    ## 
    ##     sleep
    
    library(lattice)
    

    载入数据

    • 这是一个25行四列的数据
    • A data frame with 25 observations on the following 4 variables.
    • age:Age group (1=20-39, 2=40-59, 3=60+)
    • bmi:Body mass index (kg/m**2)
    • hyp:Hypertensive (1=no,2=yes)
    • chl:Total serum cholesterol (mg/dL)
    # load data
    data(nhanes2)
    dim(nhanes2)
    
    ## [1] 25  4
    
    head(nhanes2)
    
    ##     age  bmi  hyp chl
    ## 1 20-39   NA <NA>  NA
    ## 2 40-59 22.7   no 187
    ## 3 20-39   NA   no 187
    ## 4 60-99   NA <NA>  NA
    ## 5 20-39 20.4   no 113
    ## 6 60-99   NA <NA> 184
    

    md.pattern可视化缺失模式

    md.pattern(nhanes2) 
    
    image.png
    ##    age hyp bmi chl   
    ## 13   1   1   1   1  0
    ## 3    1   1   1   0  1
    ## 1    1   1   0   1  1
    ## 1    1   0   0   1  2
    ## 7    1   0   0   0  3
    ##      0   8   9  10 27
    

    VIM包对缺失数据可视化

    • aggr函数可视化
    library(VIM)
    nhanes2_aggr = aggr(nhanes2,
                        col=mdc(1:2), # 颜色设置
                        numbers=TRUE, 
                        sortVars=TRUE, 
                        labels=names(nhanes2), 
                        cex.axis=.7, gap=3, 
                        ylab=c("Proportion of missingness","Missingness Pattern"))
    
    image.png

    相关文章

      网友评论

        本文标题:R语言高级方法进行缺失数据多重插补案例演示

        本文链接:https://www.haomeiwen.com/subject/sezbehtx.html