第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的内容就介绍到这里! |
|