R语言缺失值的处理——回归预测法

  • 原创
  • |
  • 浏览:1661
  • |
  • 更新:

在进行数据分析的过程中,有时候拿到的数据并不完整,有很多确实数据。这就需要我们对这些缺失值进行处理。一般的处理办法包括删除缺失值较多的样本和变量、使用其他样本均值替代缺失值等方法。而利用回归模型进行缺失值插补的方法也是十分普遍的,本文将利用一个例子进行介绍。

工具/原料

  • R软件
  • 数据集

方法/步骤

  1. 1

    读取数据。

    library(foreign) #加载程序包

    stu_data_na=read.spss(file="stu_data_na.sav",to.data.frame=TRUE) 

    head(stu_data_na) #查看数据前几行

    R语言缺失值的处理——回归预测法
  2. 2

    查看数据集缺失情况。

    dim(stu_data_na) #查看数据维度

    sum(complete.cases(stu_data_na)) #查看完整数据条数

    library(mice) #加载mice包

    md.pattern(stu_data_na) #利用函数md.pattern查看数据缺失情况

    结果中的1表示无缺失,0表示有缺失。可以看到stu_data_na数据集共有26条完整数据,x1、x2两个变量中,x1是无缺失数据的,x2有8个缺失值。

    R语言缺失值的处理——回归预测法
    R语言缺失值的处理——回归预测法
  3. 2
    本页面非法爬取自百度经验
  4. 3

    下面利用回归预测方法插补变量x2的缺失值。首先,将x2完整和有缺失的数据分开。

    stu_1=which(is.na(stu_data_na[,4])==TRUE) #返回stu_data_na中第4列为缺失的行,也就是x2为空的行

    stu_data_com1=stu_data_na[-stu_1,] #选取x2不为空的行

    head(stu_data_com1)

    stu_data_fill1=stu_data_na[stu_1,]  #选取x2为空的行

    head(stu_data_fill1)

    R语言缺失值的处理——回归预测法
  5. 4

    建立x2、x1的回归模型。

    lm=lm(x2~x1,data=stu_data_com1) #其中x1为自变量,x2为因变量

    summary(lm)

    从结果中可以看出,回归模型是显著的。x1和x2具有一定的线性关系。因此利用回归模型来填补缺失值是可行的。

    R语言缺失值的处理——回归预测法
  6. 5

    stu_data_fill1[,4]=round(predict(lm,stu_data_fill1))  #将x2的缺失值用非缺失值的回归模型预测结果来替代

    stu_data_fill1 #查看已经补全的数据

    R语言缺失值的处理——回归预测法
  7. 6

    stu_data_new=rbind(stu_data_com1,stu_data_fill1)#将填补了缺失值的数据与完整数据合并得到最终的数据集。

    head(stu_data_new) #查看新的数据集

    dim(stu_data_new )

    缺失值插补完成。

    R语言缺失值的处理——回归预测法
    END

注意事项

  • 当数据量较少或者两变量之间并不线性相关时,利用回归模型可能失去实际意义
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部