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 |:表示在右边变量得到控制的情况下
上一篇下一篇

猜你喜欢

热点阅读