拓端tecdat|R语言缺失值的处理:线性回归模型插补
原文链接: http://tecdat.cn/?p=14528
原文出处:拓端数据部落公众号
在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1。这样就可以不删除变量或观测值。
视频
缺失值的处理:线性回归模型插补
我们在这里模拟数据,然后根据模型生成数据。未定义将转换为NA。一般建议是将缺失值替换为-1,然后拟合未定义的模型。默认情况下,R的策略是删除缺失值。如果未定义50%,则缺少数据,将删除一半的行
n=1000
x1=runif(n)
x2=runif(n)
e=rnorm(n,.2)
y=1+2*x1-x2+e
alpha=.05
indice=sample(1:n,size=round(n*alpha))
base=data.frame(y=y,x1=x1)
base$x1[indice]=NA
reg=lm(y~x1+x2,data=base)
我们模拟10,000,然后看看未定义的分布,
m=10000
B=rep(NA,m)hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white",xlab="missing values = 50%")
lines(density(B),lwd=2,col="blue")
abline(v=2,lty=2,col="red")
当然,丢失值的比率较低-丢失的观测值较少,因此估计量的方差较小。
现在让我们尝试以下策略:用固定的数值替换缺失的值,并添加一个指标,
B=rep(NA,m)hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white")
lines(density(B),lwd=2,col="blue")
abline(v=2,lty=2,col="red")
不会有太大变化,遗漏值的比率下降到5%,
例如仍有5%的缺失值,我们有
如果我们查看样本,尤其是未定义的点,则会观察到
缺失值是完全独立地随机选择的,
x1=runif(n)plot(x1,y,col=clr)
(此处缺失值的1/3为红色)。但可以假设缺失值的最大值,例如,
x1=runif(n)clr=rep("black",n)
clr[indice]="red"
plot(x1,y,col=clr)
有人可能想知道,估计量会给出什么?
它变化不大,但是如果仔细观察,我们会有更多差异。如果未定义变量会发生什么,
for(s in 1:m){base$x1[indice]=-1reg=lm(y~x1+x2+I(x1==(-1)),data=base)B[s]=coefficients(reg)[2]
}
这次,我们有一个有偏差的估计量。
set.seed(1)indice=sample(1:n,size=round(n*alpha),prob = x1^3)base$x1[indice]=-1coefficients(reg1)(Intercept) x1 x2 I(x1 == (-1))TRUE 1.0988005 1.7454385 -0.5149477 3.1000668
base$x1[indice]=NAcoefficients(reg2)
(Intercept) x1 x2 1.1123953 1.8612882 -0.6548206
正如我所说的,一种更好的方法是推算。这个想法是为未定义的缺失预测值预测。最简单的方法是创建一个线性模型,并根据非缺失值进行校准。然后在此新基础上估算模型。
for(s in 1:m){base$x1[indice]=NAreg0=lm(x1~x2,data=base[-indice,])base$x1[indice]=predict(reg0,newdata=base[indice,])reg=lm(y~x1+x2,data=base)}
hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white")
lines(density(B),lwd=2,col="blue")
abline(v=2,lty=2,col="red")
在数字示例中,我们得到
base$x1[indice]=NAcoefficients(reg3)
(Intercept) x1 x2 1.1593298 1.8612882 -0.6320339
这种方法至少能够纠正偏差
然后,如果仔细观察,我们获得与第一种方法完全相同的值,该方法包括删除缺少值的行。
Coefficients:Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.15933 0.06649 17.435 < 2e-16 ***
x1 1.86129 0.21967 8.473 < 2e-16 ***
x2 -0.63203 0.20148 -3.137 0.00176 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.051 on 997 degrees of freedom
Multiple R-squared: 0.1094, Adjusted R-squared: 0.1076
F-statistic: 61.23 on 2 and 997 DF, p-value: < 2.2e-16 Coefficients: Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.11240 0.06878 16.173 < 2e-16 ***
x1 1.86129 0.21666 8.591 < 2e-16 ***
x2 -0.65482 0.20820 -3.145 0.00172 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.037 on 797 degrees of freedom(200 observations deleted due to missingness)
Multiple R-squared: 0.1223, Adjusted R-squared: 0.12
F-statistic: 55.5 on 2 and 797 DF, p-value: < 2.2e-16
除了进行线性回归外,还可以使用另一种插补方法。
在模拟的基础上,我们获得
for(j in indice) base0$x1[j]=kpp(j,base0,k=5)
reg4=lm(y~x1+x2,data=base)
coefficients(reg4)
(Intercept) x1 x2 1.197944 1.804220 -0.806766
如果我们看一下10,000个模拟中的样子,就会发现
for(s in 1:m){base0=basefor(j in indice) base0$x1[j]=kpp(j,base0,k=5)reg=lm(y~x1+x2,data=base0)B[s]=coefficients(reg)[2]
}
hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white")
lines(density(B),lwd=2,col="blue")
abline(v=2,lty=2,col="red")
这里的偏差似乎比没有插补时要弱一些,换句话说,在我看来,插补方法似乎比旨在用任意值替换NA并在回归中添加指标的策略更强大。
参考文献
1.用SPSS估计HLM层次线性模型模型
2.R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
3.基于R语言的lmer混合线性回归模型
4.R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
5.在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析
6.使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM
7.R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化
8.R语言用线性回归模型预测空气质量臭氧数据
9.R语言分层线性模型案例
拓端tecdat|R语言缺失值的处理:线性回归模型插补相关推荐
- 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险
最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...
- 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例
最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...
- 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...
- 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...
- r语言datarame删除行_R语言缺失值的处理:线性回归模型插补
原文链接: 拓端数据科技 / Welcome to tecdattecdat.cn 在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1.这样就可以不删除变量或观测值. 视频 ...
- r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
原文 基于R语言的lmer混合线性回归模型tecdat.cn 混合模型适合需求吗? 混合模型在很多方面与线性模型相似.它估计一个或多个解释变量对响应变量的影响.混合模型的输出将给出一个解释值列表,其 ...
- R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE
R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型预测中系统误差的一个例子 .自定义函数计算R方指标和均方根误差RMSE 目 ...
- R语言使用lm构建线性回归模型、并将目标变量对数化实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型系数(coefficient)、模型总结信息(summary)、残差总结信息
R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型系数(coefficient).模型总结信息(summary).残差总结信 ...
- R语言使用lm构建线性回归模型、并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary)、模型训练(测试)集自由度计算、模型训练(测试)集残差标准误计算
R语言使用lm构建线性回归模型.并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary).模型训练(测试)集自由度计算.模型训练(测试)集残差标准误计算(Resi ...
- R语言缺失值判断与处理-2
R语言-缺失值判断以及处理 上次说了关于某个固定值,异常值,缺失值等的固定位置,今天详细说下如果数据列中出现缺失值,该如何处理. 向量组中的不说了,一般实践都是数据框. 1.数据框缺失值判断 数据框类 ...
最新文章
- Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令
- 大学使用python 编辑器_[雪峰磁针石博客]2018 最佳python编辑器和IDE
- CYQ.Data V5 MDataTable 专属篇介绍
- 带有调试器的Apache Camel Eclipse工具
- 带字母的计算机在线使用,ASCII,进位制在线转换工具
- .Net开源源码查询
- @async 没有异步_javascript之异步函数
- python单行注释的标记符_【转】Pyhton 单行、多行注释符号使用方法及规范
- leetcode刷题:求容器中能乘最大多少水
- 【浙江大学PAT真题练习乙级】1001 害死人不偿命的(3n+1)猜想(15分)真题解析
- MySQL安装详细图解
- Nmap简单使用教程
- redis key 操作大全
- 全年营业额怎么计算_产值是怎么计算的(GDP年产值是营业收入吗)
- 《东周列国志》第五十四回 荀林父纵属亡师 孟侏儒托优悟主
- DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL过程
- 被子植物353个单拷贝核基因靶向捕获探针 Plant Universal — Angiosperms 353
- Fortify SCA报告模板汇总
- Android应用禁止截屏
- springboot的商品设计热销排行实现