• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      R语言

      • 首页
      • 博客
      • R语言
      • 用mice包处理缺失值|R包

      用mice包处理缺失值|R包

      • 发布者 weinfoadmin
      • 分类 R语言
      • 日期 2016年8月1日
      测试开头

      1、数据准备

      1. > Z1=read.table('clipboard',header=T) #读入数据

      2. > head(Z1)                            #查看前六行

      3.   Age Gender Cholesterol SystolicBP  BMI Smoking Education

      4. 1 67.9 Female       236.4      129.8 26.4     Yes      High

      5. 2 54.8 Female       126.0      133.4 28.4      No    Medium

      6. 3 68.4   Male       198.7      158.5 24.1     Yes      High

      7. 4 67.9   Male       205.0      136.0 19.9      No       Low

      8. 5 60.9   Male       207.7      145.4 26.7      No    Medium

      9. 6 68.4 Female       222.5      130.6 30.6      No       Low

      10. > original <- Z1      #复制源数据,为了和之后做预测精确度对比

      从以上程序可以看出,源数据无缺失值,则为了之后进行数据处理为数据添加一些缺失值。

      1. > set.seed(10)  

      2. > Z1[sample(1:nrow(Z1), 20), "Cholesterol"] <- NA  #随机为变量添加缺失值

      3. > Z1[sample(1:nrow(Z1), 20), "Smoking"] <- NA

      4. > Z1[sample(1:nrow(Z1), 20), "Education"] <- NA

      5. > Z1[sample(1:nrow(Z1), 5), "Age"] <- NA

      6. > Z1[sample(1:nrow(Z1), 5), "BMI"] <- NA

      7. > sapply(Z1, function(x) sum(is.na(x)))   #对Z1按照sum函数统计

      8.        Age      Gender Cholesterol  SystolicBP         BMI

      9.          5           0          20           0           5

      10.    Smoking   Education

      11.         20          20

      12. > library(dplyr)

      13. > Z1 <- Z1 %>%

      14. +  mutate(Smoking = as.factor(Smoking)) %>% #对变量进行字符转换

      15. +   mutate(Education = as.factor(Education)) %>%

      16. +   mutate(Cholesterol = as.numeric(Cholesterol))

      17. > str(Z1)

      18. 'data.frame':    24 obs. of  7 variables:

      19. $ Age        : num  NA 54.8 NA 67.9 60.9 68.4 67.9 60.9 NA 62.9 ...

      20. $ Gender     : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 1 1 1 2 2 ...

      21. $ Cholesterol: num  NA NA NA NA NA ...

      22. $ SystolicBP : num  130 133 158 136 145 ...

      23. $ BMI        : num  26.4 NA 24.1 19.9 NA 30.6 26.4 28.4 24.1 NA ...

      24. $ Smoking    : Factor w/ 2 levels "No","Yes": 2 NA NA 1 NA NA NA NA NA NA ...

      25. $ Education  : Factor w/ 3 levels "High","Low","Medium": NA NA NA NA NA NA NA NA NA 2 ...

      2、mice包运算

      我们传统中处理缺失值大多使用中位数或平均数的方法就行插补。 mice包处理缺失值的方法是利用所给出数据中的其他变量,通过迭代和预设矩阵构造模型拟合出一个缺,利用多重插补对缺失值进行处理这种方法所给出的缺失值精确度较高。

      1. > library(mice)

      2. > library(Rcpp)

      3. > init = mice(Z1, maxit=0)

      4. > init

      5. Multiply imputed data set

      6. Call:

      7. mice(data = Z1, maxit = 0)  #输出mice包处理缺失值各变量的方法,预设矩阵等

      8. Number of multiple imputations:  5  #默认迭代5次

      9. Missing cells per column:

      10.        Age      Gender Cholesterol  SystolicBP         BMI

      11.          5           0          20           0           5

      12.    Smoking   Education

      13.         20          20

      14. Imputation methods:

      15.        Age      Gender Cholesterol  SystolicBP         BMI

      16.      "pmm"          ""       "pmm"          ""       "pmm"

      17.    Smoking   Education

      18.   "logreg"   "polyreg"

      19. VisitSequence:

      20.        Age Cholesterol         BMI   Education

      21.          1           3           5           7

      22. PredictorMatrix:#输出的变量矩阵,用于预测缺失值

      23.      Age Gender Cholesterol SystolicBP BMI Smoking Education

      24. Age     0      1           1          1   1       0         1

      25. Gender  0      0           0          0   0       0         0

      26. Cholesterol   1      1     0          1   1       0         1

      27. SystolicBP    0      0     0          0   0       0         0

      28. BMI           1      1     1          1   0       0         1

      29. Smoking       0      0     0          0   0       0         0

      30. Education     1      1     1          1   1       0         0

      31. PredictorMatrix:  

      32.             Age Gender Cholesterol SystolicBP BMI Smoking Education

      33. Age     0      1           1          1   1       0         1

      34. Gender  0      0           0          0   0       0         0

      35. Cholesterol 1     1        0          1   1       0        1

      36. SystolicBP 0      0        0          0   0       0         0

      37. BMI        1      1        1          1   0       0         1

      38. Smoking    0      0        0         0   0      0         0

      39. Education  1      1        1          1   1       0         0

      40. Random generator seed value:  NA

      41. > meth = init$method        

      42. > predM = init$predictorMatrix

      43. > predM[, c("BMI")]=0  更改BP列的矩阵向量全为0

      44. > meth[c("Age")]="" 不填补Age列

      45. > predM

      46.            Age Gender Cholesterol SystolicBP BMI Smoking Education

      47. Age           0      1       1        1   0       0         1

      48. Gender        0      0       0        0   0       0         0

      49. Cholesterol   1      1       0        1   0       0         1

      50. SystolicBP    0      0       0        0   0       0         0

      51. BMI           1      1       1        1   0       0         1

      52. Smoking       0      0       0        0   0       0         0

      53. Education     1      1       1        1   0       0         0

      54. > meth

      55.    Age      Gender Cholesterol  SystolicBP         BMI

      56.     ""          ""       "pmm"          ""       "pmm"

      57.    Smoking   Education

      58.   "logreg"   "polyreg"

      59. > meth[c("Cholesterol")]="norm"

      60. > meth[c("Smoking")]="logreg"

      61. > meth[c("Education")]="polyreg"

      1. > set.seed(103)

      2. > imputed = mice(Z1, method=meth, predictorMatrix=predM, m=5

      3. > imputed <- complete(imputed)#迭代后成创建一个数据集

      4. >head(imputed)

      5.    Age Gender Cholesterol SystolicBP  BMI Smoking Education

      6. 1    NA Female    225.7175      129.8 26.4     Yes    Medium

      7. 2  54.8 Female    205.3551      133.4 30.6      No    Medium

      8. 3    NA   Male    130.8879      158.5 24.1      No    Medium

      9. 4  67.9   Male    266.9956      136.0 19.9      No      Low

      10. 5  60.9   Male    208.1604      145.4 19.9      No      Low

      11. 6  68.4 Female    222.5000      130.6 30.6      No      Low

      12. > sapply(imputed, function(x) sum(is.na(x)))  观察填补缺失值之后的情况

      13.        Age      Gender Cholesterol  SystolicBP         BMI

      14.          5           0           0           0           0

      15.    Smoking   Education

      16.          0           0

      17. > # Cholesterol

      18. > actual <- original$Cholesterol[is.na(Z1$Cholesterol)]

      19. > predicted <- imputed$Cholesterol[is.na(Z1$Cholesterol)]

      20. > mean(actual)#原缺失值的真实值平均

      21. [1] 216.665

      22. > mean(predicted)#预测缺失值的平均

      23. [1] 211.977

      24. # smoking

      25. > actual <- original$Smoking[is.na(Z1$Smoking)]

      26. > predicted <- imputed$Smoking[is.na(Z1$Smoking)]

      27. > table(actual)

      28. actual#原缺失值的真实值情况

      29. No Yes

      30. 13   7

      31. > table(predicted)#预测值的真实值情况

      32. predicted

      33. No Yes

      34. 19   1

      原文链接:http://datascienceplus.com/handling-missing-data-with-mice-package-a-simple-approach/

      严禁修改,可以转载,请注明作者和出自数据人网和原文链接。


      公众号推荐:脚印英语JoyEnglish,分享英语口语干货。

      用mice包处理缺失值|R包
      数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习。
      平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。
      您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)其它与数据相关的干货。
      我们努力坚持做原创,分享和传播数据知识干货!
      我们都是数据人,数据是有价值的,坚定不移地利用数据价值创造价值!
      数据资料、数据课程、数据圈子、数据工作和数据项目服务,请加微信:
      luqin360

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      招聘数据分析师|数据人工作
      2016年8月1日

      下一篇文章

      什么是专业?|陆勤思考
      2016年8月6日

      你可能也喜欢

      3-1665801675
      R语言学习:重读《R数据科学(中文版)》书籍
      28 9月, 2022
      6-1652833487
      经典铁死亡,再出新思路
      16 5月, 2022
      1-1651501980
      R语言学习:阅读《R For Everyone 》(第二版)
      1 5月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?