分享

线性回归分析来了 | 30 天学会R DAY 25

 妙趣横生统计学 2019-12-08

第25 天 使用R语言进行线性回归分析

从今天起30天学习还有6天,我们将通过6篇文章讲述如何进行回归分析,其中包括开展线性回归分析、logistic回归分析、COX回归分析,并在基础上我们通过实例介绍如何通过一定的方法快速成文。

一、准备工作

首先我们将导入数据

t1<-read.csv("elder1.csv")

t2<-read.csv("elder2.csv")

可以查看数据

str(t1)

str(t2)

再则我们启动重要的数据包dplyr

library(dplyr)

现在我们通过dplyr的join函数把两个数据库进行合并

tt<-inner_join(t1,t2,by="ID")

str(tt)

合并产生的数据库我们把它保存起来,这样下次我们可以再利用。

write.csv(tt,file ="tt.csv")

二、简单线性回归分析

线性回归分析从只有一个自变量的简单线性回归分析开始,简单回归分析:利用lm( )函数构建。

#我们建一个简单的形式来看看lm()怎么操作的。

age=18:29    #年龄从18到29岁

height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)

#绘制两者的散点图

plot(age,height,main = "身高与年龄散点图")

#lm() 函数中 应变量height,自变量为age,它们用~连接起来。

lm.reg <- lm(height~age)  #lm()建立回归方程

lm.reg 就是线性回归分析的一系列结果的结果名,里面东西很多。我们可以利用更多的函数来对lm.reg的结果进行阅读。

abline(lm.reg)    #画出拟合的线性回归线

anova(lm.reg)    #模型方差分析

summary(lm.reg)  #最重要的一张表格

以下是summary(lm.reg) 的结果

三、多因素线性回归分析

多因素线性回归同样利用自带函数lm( )函数构建

1. 分析自评健康health的影响因素

我们构建tt数据中有一个health变量,这是患者健康自评得分,为定量数据,我们可以开展健康自评的影响因素研究。

#分析之前,我们产生一个新的变量BMI

tt<-mutate(tt, bmi=weight/(height^2)*10000)

str(tt)

现在我们可以开展回归分析了,因变量是health,自变量是SBP、DBP、TC、sugar、bmi、TG,它们用~连接起来。

lm.reg<-lm(health~SBP+DBP+TC+sugar+bmi+TG,data=tt)

#通过summary()函数,我们可以通览回归分析的结果

summary(lm.reg)

2. 进一步开展逐步回归法进行分析

#很多时候我们喜欢用逐步回归法开展统计分析

lm.step<-step(lm.reg)   # 逐步回归方法

#通过summary()函数,我们可以通览回归分析的结果

summary(lm.step)  # 逐步回归方法分析结果

summary(lm.step)  # 逐步回归方法分析结果

Error in summary(lm.step) : object 'lm.step' not found

我们发现了问题?为什么?因为缺失值存在。逐步回归法要求自变量和应变量不缺失

# 剔除缺失值的记录后我们再进行回归分析

tt1<-na.omit(tt) # 剔除缺失值的记录

lm.reg<-lm(health~SBP+DBP+TC+sugar+bmi+TG,data=tt1)

summary(lm.reg)

lm.step<-step(lm.reg)   # 逐步回归方法

summary(lm.step)  # 逐步回归方法分析结果

3.自变量为分类变量时的处理

刚才的案例,自变量全部为定量,如果是分类变量,必须要进行因子化(factor)处理,或者我们统计学上叫做设置哑变量。关于因子和因子化,我们在最早的第二天的课程就已经介绍过,大家可以前去了解学习。

比如对marriage的变量进行因子化处理,并将对照组设定为第二组。下面的代码,诸位可曾依稀记得?

> tt1$marriage<-factor(tt1$marriage, levels = c(2,1,3,4))

> fix(tt1)

> is.factor(tt1$marriage)

[1] TRUE

>table(tt1$marriage)

  2    1    3    4

2713    5   35  265

又比如对income的变量进行进一步的归类,本例是8类的分组变成3组。

> tt1$income1<-tt1$income

> tt1$income1[tt1$income>=6]<-3

> tt1$income1[tt1$income>=3 & tt1$income<=5]<-2

> tt1$income1[tt1$income<=2]<-1

> table(tt1$income1)

  1    2    3

1878  897  247

> table(tt1$income)

  1    2    3    4    5    6    7    8

829 1049  500  228  169   80   68   99

我们还可以借助lapply()函数可与批量处理数据

# 把所有该纳为因子的但还没有的统一转为因子(分组变量)

varsToFactor <- c("sex","huji","education","marriage","income","smoking","drinking","exercise","sleep")

tt1[varsToFactor] <- lapply(tt1[varsToFactor], factor)

str(tt1)

#因子化后,我们自变量包括了分类变量和定量自变量,可以开展工作了。

lm.reg<-lm(health~SBP+DBP+TC+sugar+bmi+TG+sex+huji+education+marriage+income+smoking+drinking+exercise+sleep,data=tt1)

summary(lm.reg)

lm.step<-step(lm.reg)   # 逐步回归方法

summary(lm.step)  # 逐步回归方法分析结果

四、多因素线性回归结果的提取

刚才产生了回归分析的结果,有lm.reg和lm.step。们可以利用简单的summary() 函数来提取总的结果,但不够精细,下面有一些精细的结果

#提取首列的回归系数

lm.step$coeff#提取首列-回归系数

lm.reg$coeff  #提取首列-回归系数

lm.step$coefficients#默认提取首列回归系数

# 提取回归分析的某些其它咧结果

summary(lm.step)

lmResults<-summary(lm.step) #将逐步回归结果赋值给a

lmResults

coef(lmResults)[,c(1-7)]

#其它结果的提取

lm.step$residuals #提取观察值残差

rstandard(lm.step) #提取标准化残差

lmResults$r.squared#提取R方

lmResults$adj.r.squared#提取调整R方Adjusted R-squared

lmResults$fstatistic#F统计量

掌握上述的结果之后,我认为基本的统计分析你就掌握不少了。

五、回归诊断

一个好的回归,必须结合回归诊断。它包括对数据正态性、独立性、方差齐性、共线性的诊断。

1. 通过残差图来看展回归诊断

plot(fitted(lm.step), resid(lm.step))

plot(fitted(lm.step), resid(lm.step),

         cex=1.2, pch=21, col="red", bg="orange",

         xlab="Fitted Value", ylab="Residuals")

par(mfrow=c(2,2))

plot(lm.step,which=c(1:4))

2. 残差独立性检验(car包)

library(car)

durbinWatsonTest(lm.setp)# 残差独立性检验

3.共线性诊断  

#方差膨胀因子分析

vif(lm.step)

#特征根分析

XX<-cor(tt1[c("SBP","DBP","TC","sugar","TG","bmi")],,use = "complete.obs")

XX

kappa(XX,exact=TRUE)

eigen(XX)

DAY24的内容就介绍到这里!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多