03-相关性与线性回归
2021-08-20 本文已影响0人
译文达练
image.png
##vs. t.test()是均值的检验(同一变量不同组别;或不同变量均值有无差异);
cor.test()是相关性的检验(不同变量之间是否相关)
library(ggplot2)
library(ggpubr)
library(car) #avPlots()
library(stringr) # %>%
library(openxlsx) #or library(readxl) read_excel(file)
LungCap <- readxl::read_xls(path = "R语言入门必学 资料/LungCapData.xls")
attach(LungCapData)
1 相关性
1.1 散点图评估
plot(x=Age,LungCap)
1.2 正态分布检验
#连续变量的相关性用pearson(前提:符合正态分布)
sapply(list(Age,LungCap),shapiro.test) #vs.tapply是一个变量中的不同组
1.3.1 pearson相关性检验 (正态分布)
cor.test(x = Age,y = LungCap) #p<0.05 表明相关性很强,相关系数cor
1.3.2 spearman 或kendall检验(非正态分布)
cor.test(Age, LungCap,method = "spearman",exact = F)
cor.test(Age,as.numeric(as.factor(Smoke)),method = "spearman",exact = F) #字符转数字,需先转因子
#相关系数 rho
cor.test(Age, LungCap,method = "kendall",exact = F)
#相关系数tau
2 线性回归
无相关就无回归,回归分析之前先测度相关关系。
相关程度越高,回归方程的拟合程度就越好。
相关系数和回归系数的方向呈现一致状体,可互相推算。
image.png
2.1 简单线性回归
lm.age <- lm(LungCap~Age)
# intercept 截距;+斜率
summary(lm.age)
#查看模型的显著性
##查看自变量的p值(Age-Pr),是否有预测意义
##p-value:整个模型的P值,当只有一个自变量时,跟Pr相同
## R-squared:决定系数:0.67:表示肺活量的变化有67%是可以用年龄解释的
2.2 模型诊断
shapiro.test(residuals(lm.age)) #残差正态性
plot(lm.age) #第一张(残差均匀分布即齐性)
2.3 多因素线性回归
lm.mlt <- lm(LungCap~Age+Height+Smoke+Gender+Caesarean) #Or lm(LungCap~.,data=LungCapData)
summary(lm.mlt)
#Smoke, Gender自动转换成因子,∴为Smokeyes,Gendermale
#多组
Age.C <- cut(Age,c(3,9,12,20)) #分组,因子
lm.mlt2 <- lm(LungCap~Age.C+Height)
#Age.c 的参照变量是(3,9]
方差分析
#当变量是分类模型,则等效于相关性分析
lm.smoke <- lm(LungCap~Smoke)
anova(lm.smoke) #等价于 aov(LungCap~ Smoke)
#双因素
lm.twoway <- lm(LungCap~Smoke*Gender)
anova(lm.twoway) #等价于aov(LungCap~Smoke*Gender)
2.4模型的比较和选择
2.4.1 模型比较
anova(lm.age,lm.mlt)
#RSS越小,模型拟合得越好(同一数据集)
2.4.2 逐步法筛选变量(AIC)
extratAIC(lm.age) #第二个值为AIC
lm.none <- lm(LungCap~1) #无变量
lm.full <- lm(LungCap~.,data=LungCapData) #所有变量
step(lm.none,scope = formula(lm.full),direction = "forward")
#Start AIC是初始;+Height:只有Height变量;Call最好的模型
step(lm.full,scope = formula(lm.none),direction = "backward")
#反向推算
step(lm.none,scope = formula(lm.full),direction = "both")
#双向推算
##trace=F 只显示最佳结果,不显示追踪过程
lm.final <- lm(LungCap~Height + Age + Smoke + Gender + Caesarean)
plot(lm.final)
3 作图(相关性,线性回归)
3.1 相关性
plot(Age,LungCap)
text(3,13,'r=0.82,P<0.001', adj=0) #跟上个命令一起运行,adj=0左对齐
ggplot(LungCapData, aes(x=Age, y=LungCap)) +
geom_point() +
annotate(geom="text",x=3,y=13,label='r=0.82,P<0.001', adj=0)
ggscatter(LungCapData, x="Age", y="LungCap",cor.coef=T, cor.method="pearson")
3.2 简单线性回归
#散点图上加条线
plot(Age,LungCap)
abline(lm.age)
text(3,13,'r-squard=0.67,P<0.001', adj=0)
#text(3,13, expression(r^2=='0.67,P<0.001'), adj=0)
ggplot(LungCapData,aes(x=Age,y=LungCap)) +
geom_point() +
geom_smooth(method = "lm",se=F) +
annotate(geom="text",x=3,y=13, label="r^2=='0.67,P<0.001'",adj=0,parse=T)
#annotation不识别expression
#parse 解析
ggscatter(LungCapData,x="Age",y="LungCap", add = "reg.line") +
annotate(geom="text",x=3,y=13, label="r^2=='0.67,P<0.001'",adj=0,parse=T)
3.3 多因素线性回归
#变量添加图
avPlots(lm.final)
#每张图对应一个变量
#Height|others |:表示在右边变量得到控制的情况下