楼主: danbaidong
18552 2

[问答] 【请教】R语言线性回归中对于数据缺失值(NA)的处理方法 [推广有奖]

  • 6关注
  • 7粉丝

副教授

22%

还不是VIP/贵宾

-

威望
0
论坛币
34753 个
通用积分
19.4537
学术水平
9 点
热心指数
26 点
信用等级
7 点
经验
67777 点
帖子
298
精华
0
在线时间
1058 小时
注册时间
2007-5-26
最后登录
2024-4-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
R语言线性回归函数lm()中关于缺失值的处理方式有一个参数:na.action,经查阅文献,得知其默认值与R自己的options()中的na.action一致,正常是na.omit,我理解就是忽略了数据中有缺失值的case。但是当我手动把没有NA值的cases筛出来做回归的时候,却发现跟用全部数据得到的回归方程不一样,请各位点拨一下是什么原因,回头给大家发奖励,谢谢先!
  1. #### 用的是VIM包中的函数sleep
  2. ### 不对数据做任何预处理,直接回归
  3. lm_res <- lm(BodyWgt~BrainWgt+NonD+Dream,data=sleep,na.action=na.omit)
  4. summary(lm_res)
复制代码
得到的结果如下:
  1. Call:
  2. lm(formula = BodyWgt ~ BrainWgt + NonD + Dream, data = sleep,
  3.     na.action = na.omit)

  4. Residuals:
  5.     Min      1Q  Median      3Q     Max
  6. -619.28   -3.23    8.17   19.86  242.61

  7. Coefficients:
  8.             Estimate Std. Error t value Pr(>|t|)   
  9. (Intercept) 12.45354   47.21972   0.264    0.793   
  10. BrainWgt     0.51703    0.02615  19.771   <2e-16 ***
  11. NonD        -3.92827    5.69966  -0.689    0.494   
  12. Dream        5.42715   13.49113   0.402    0.689   
  13. ---
  14. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

  15. Residual standard error: 113.6 on 44 degrees of freedom
  16.   (14 observations deleted due to missingness)
  17. Multiple R-squared:  0.9149,        Adjusted R-squared:  0.9091
  18. F-statistic: 157.8 on 3 and 44 DF,  p-value: < 2.2e-16
复制代码
然后先用complete.cases()筛出来没有数据缺失情况的cases,然后再用没有缺失的数据做线性回归,代码和结果分别如下:
  1. sleep_complete <- sleep
  2. sleep_complete$label <- complete.cases(sleep_complete)
  3. sleep_complete <- sleep_complete[sleep_complete$label == T,]
  4. lm_complete <- lm(BodyWgt ~ BrainWgt + NonD + Dream, data = sleep_complete )
  5. summary(lm_complete)
复制代码
  1. Call:
  2. lm(formula = BodyWgt ~ BrainWgt + NonD + Dream, data = sleep_complete)

  3. Residuals:
  4.     Min      1Q  Median      3Q     Max
  5. -618.56   -4.46   10.30   23.98  242.33

  6. Coefficients:
  7.             Estimate Std. Error t value Pr(>|t|)   
  8. (Intercept)  13.1329    53.2917   0.246    0.807   
  9. BrainWgt      0.5173     0.0286  18.090   <2e-16 ***
  10. NonD         -3.7833     6.3681  -0.594    0.556   
  11. Dream         4.0130    16.2712   0.247    0.807   
  12. ---
  13. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

  14. Residual standard error: 122.2 on 38 degrees of freedom
  15. Multiple R-squared:  0.9145,        Adjusted R-squared:  0.9077
  16. F-statistic: 135.4 on 3 and 38 DF,  p-value: < 2.2e-16
复制代码
比较两个回归的结果,很容易发现两者并不一致,那也就是说na.omit并不是把所有的含NA值的case都剔除掉了,那na.omit到底是对NA值做了什么处理呢?请论坛里的各位小伙伴多指教!




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据缺失 线性回归 处理方法 R语言 缺失值

沙发
风的使者 发表于 2020-12-9 15:01:29 |只看作者 |坛友微信交流群
好像是把有空缺值的那一行都去掉了

使用道具

藤椅
ninth_poet 发表于 2022-3-17 17:40:41 |只看作者 |坛友微信交流群
na.omit将纳入回归模型的变量(BodyWg、BrainWgt、NonD、 Dream)的缺失行删除,但你的sleep_complete删除了数据库里所有变量的缺失值,所以结果不一样。如果手动删除缺失BodyWg、BrainWgt、NonD、 Dream的行(不管其他变量是否有缺失值),再跑回归模型,结果是一样的

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 12:41