R语言与简单的回归分析
回归模型是计量里最基础也最常见的模型之一。究其原因,我想是因为在实际问题中我们并不知道总体分布如何,而且只有一组数据,那么试着对数据作回归分析将会是一个不错的选择。
一、简单线性回归
简单的线性回归涉及到两个变量:一个是解释变量,通常称为x;另一个是被解释变量,通常称为y。回归会用常见的最小二乘算法拟合线性模型:
yi = β0 + β1xi +εi
其中β0和β1是回归系数,εi表示误差。
在R中,你可以通过函数lm()去计算他。Lm()用法如下:
lm(formula, data, subset, weights, na.action,
method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE,
singular.ok = TRUE, contrasts = NULL, offset, ...)
参数是formula模型公式,例如y ~ x。公式中波浪号(~)左侧的是响应变量,右侧是预测变量。函数会估计回归系数β0和β1,分别以截距(intercept)和x的系数表示。
有三种方式可以实现最小二乘法的简单线性回归,假设数据wage1(可以通过names函数查看数据框各项名称)
(1)lm(wage1$wage ~ wage1$educ + wage1$exper)
(2)lm (wage ~ educ + exper, data= wage1)
(3)attach(wage1)
lm(wage~educ+exper)#不要忘记处理完后用detach()解出关联
我们以数据wage1为例,可以看到工资与教育水平的线性关系:
运行下列代码:
library(foreign)
A<-read.dta("D:/R/data/WAGE1.dta")#导入数据
lm(wage~educ,data=A)
>lm(wage~educ,data=A)
Call:
lm(formula = wage~ educ, data = A)
Coefficients:
(Intercept) educ
-0.9049 0.5414
当然得到这些数据是不够的,我们必须要有足够的证据去证明我们所做的回归的合理性。那么如何获取回归的信息呢?
尝试运行以下代码:
result<-lm(wage~educ,data=A)
summary(result)
我们可以得到以下结果:
Call:
lm(formula = wage~ educ, data = A)
Residuals:
Min 1Q Median 3Q Max
-5.3396 -2.1501 -0.9674 1.1921 16.6085
Coefficients:
Estimate Std.Error t value Pr(>|t|)
(Intercept) -0.90485 0.68497 -1.321 0.187
educ 0.54136 0.05325 10.167 <2e-16 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residual standarderror: 3.378 on 524 degrees of freedom
MultipleR-squared: 0.1648, AdjustedR-squared: 0.1632
F-statistic: 103.4on 1 and 524 DF, p-value: < 2.2e-16
解读上述结果,我们不难看出,单从判决系数R-squared上看,回归结果是不理想的,但是,从p值来看,我们还是可以得到回归系数是很显著地(注意,这里的P<0.05就可以认为拒绝回归系数为0,即回归变量与被解释变量无关的原择假设,选择备择假设)所以说我们的回归的效果不好但还是可以接受的。当然,这一点也可以通过做散点图给我们直观的印象:
但是影响薪酬的因素不只是education,可能还有其他的,比如工作经验,工作任期。为了更好地解释影响薪酬的因素,我们就必须用到多元线性回归。
如果不需要那么多的信息,比如我们只需要F统计量,那么运行anova(result)即可得到方差分析表,更适合阅读。
另外,再介绍一下函数predict,用法如下:
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf, interval = c("none", "confidence", "prediction"), level = 0.95, type = c("response", "terms"), terms = NULL, na.action = na.pass, pred.var = res.var/weights, weights = 1, ...)说明一下,newdata的数据结构是一个数据框。 这里还值得一提的参数时interval,他有三个选项:none代表不作区间预测,仅给出响应变量的估计;confidence是给出E(Y|X=x)的置信区间;prediction是给出真实Y的置信区间,运行代码你就会发现两者的差别。出于稳健性考虑,给出自变量取值时,预测Y值通常会采用prediction参数,但是对于X=x时Y的均值的预测就应该用confidence参数(因为回归模型是Y=βX+e,所以自变量相同,响应变量也未必一样)
二、多元线性回归
还是使用lm函数。在公式的右侧指定多个预测变量,用加号(+)连接:
> lm(y ~ u + v+ w)
显然,多元线性回归是简单的线性回归的扩展。可以有多个预测变量,还是用OLS计算多项式的系数。三变量的回归等同于这个线性模型:
yi = β0 + β1ui +β2vi + β3wi + εi
在R中,简单线性回归和多元线性回归都是用lm函数。只要在模型公式的右侧增加变量即可。输出中会有拟合的模型的系数:
>result1<-lm(wage~educ+exper+tenure,data=A)
>summary(result1)
Call:
lm(formula = wage~ educ + exper + tenure, data = A)
Residuals:
Min 1Q Median 3Q Max
-866.29 -249.23 -51.07 189.62 2190.01
Coefficients:
Estimate Std.Error t value Pr(>|t|)
(Intercept) -276.240 106.702 -2.589 0.009778 **
educ 74.415 6.287 11.836 <2e-16 ***
exper 14.892 3.253 4.578 5.33e-06 ***
tenure 8.257 2.498 3.306 0.000983 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residual standarderror: 374.3 on 931 degrees of freedom
MultipleR-squared: 0.1459, AdjustedR-squared: 0.1431
F-statistic: 53 on 3 and 931 DF, p-value: < 2.2e-16
我们将数据稍作平稳化处理,将wage换成log(wage),再来看看。
>plot(wage~educ,data=A)
>A$logwage<-log(A$wage)
>result1<-lm(logwage~educ+exper+tenure,data=A)
>summary(result1)
Call:
lm(formula =logwage ~ educ + exper + tenure, data = A)
Residuals:
Min 1Q Median 3Q Max
-2.05802 -0.29645 -0.03265 0.28788 1.42809
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.284360 0.104190 2.729 0.00656**
educ 0.092029 0.007330 12.555 < 2e-16 ***
exper 0.004121 0.001723 2.391 0.01714 *
tenure 0.022067 0.003094 7.133 3.29e-12 ***
---
Signif.codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05‘.’ 0.1 ‘ ’ 1
Residual standarderror: 0.4409 on 522 degrees of freedom
MultipleR-squared: 0.316, AdjustedR-squared: 0.3121
F-statistic: 80.39on 3 and 522 DF, p-value: < 2.2e-16
看得出,平稳化后的数据线性性是更加好的。
下面我们来提取回归分析的各项统计数据:
一些统计量和参数都被存储在lm或者summary中
output <-summary (result1)
SSR<- deviance(result1)#残差平方和;(另一种方法:RSquared <- output$r.squared)
LL<-logLik(result1) #对数似然统计量
DegreesOfFreedom<-result1$df #自由度
Yhat<- result1$fitted.values#拟合值向量
Resid<- result1$residuals
s<-output$sigma #误差标准差的估计值(假设同方差)
CovMatrix <-s^2*output$cov #系数的方差-协方差矩阵(与vcov(result1)同)
ANOVA<-anova(result1)#F统计量
confidentinterval<-confint(result1)#回归系数的置信区间,level=0.95
effects(result1)#计算正交效应向量(Vector of orthogonal effects )
predict函数用法与一元完全相同
三、检查结果
检查回归结果是一件复杂而痛苦地事情,需要检验的东西也很多,当然有不少事是应该在数据进行回归分析之前就该处理的,比如检查复共线性;也有处理中需要考虑的,比如模型的选择,数据的变换;也有事后需要做的,比如残差正态性检验;还有需要关注与特别处理的数据,比如离群点,杠杆点。
这里我们只提最简单与最常见的事后处理的基本分析。
通过图形我们可以以一种十分直观的办法检测我们的拟合效果:
plot(result1)
通过扩展包car中的函数来检测异常值与主要影响因子。代码如下:
library(car)
outlierTest(result1)
influence.measures(result1)
在R中,线性回归计算变得无比简单,一个lm函数(或glm函数)基本上就摆平了OLS的一切。但拟合数据还仅仅是万里长征第一步。最终决定成败的是拟合的模型是否能真正地派上用场。这样对结果的检测与分析就显得尤为重要。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
Excel是数据分析的重要工具,强大的内置功能使其成为许多分析师的首选。在日常工作中,启用Excel的数据分析工具库能够显著提升数 ...
2024-12-23在当今信息爆炸的时代,数据分析师如同一位现代社会的侦探,肩负着从海量数据中提炼出有价值信息的重任。在这个过程中,掌握一系 ...
2024-12-23在现代的职场中,制作吸引人的PPT已经成为展示信息的重要手段,而其中数据对比的有效呈现尤为关键。为了让数据在幻灯片上不仅准 ...
2024-12-23在信息泛滥的现代社会,数据分析师已成为企业决策过程中不可或缺的角色。他们的任务是从海量数据中提取有价值的洞察,帮助组织制 ...
2024-12-23在数据驱动时代,数据分析已成为各行各业的必需技能。无论是提升个人能力还是推动职业发展,选择一条适合自己的学习路线至关重要 ...
2024-12-23在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19阿里P8、P9失业都找不到工作?是我们孤陋寡闻还是世界真的已经“癫”成这样了? 案例一:本硕都是 985,所学的专业也是当红专业 ...
2024-12-19CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17