基本概念:
相关与线性回归是两个不同的概念。
1.相关
相关:当变量X增加时,变量Y也随着增加或减少,这种现象称为相关。说明两个变量间存在相关关系。
变量数值的分布类型不同,相关可以分为:
- 直线相关;linear correlation
- 秩相关;rank correlation
- 列联相关;contingency correlation
当变量数值不符合正态性或为等级资料时,宜采用秩相关。
列联相关针对的是分类变量。
直线相关(重点):
1.相关系数
直线相关的正确应用:
- 相关关系不等于因果关系;
- 相关系数只是衡量变量之间的相关程度,弱相关不一定表明变量之间没有关系;
- 直线相关中,极端值对相关系数的影响较大;
- 注意相关关系成立的数据范围,在数据范围之外进行外推应谨慎,通常可以内推;
- 注意数据的杂间性,可能存在虚假相关。
2. 回归
回归:用回归方程表示变量之间的依存关系。
a的意义:当自变量X=0时,因变量Y的估计值,叫做截距(intercept),a一般没有实际意义,因为X一般不为0。
b,斜率(slope),也称为回归系数(regression coefficient),表示自变量每增加一个单位,因变量Y平均改变b个单位。
简单线性回归的条件:
1.正态性:给定自变量X,因变量Y符合正态分布
2.独立性:各观测的因变量Y之间应符合独立性
3.线性:自变量X与因变量Y之间应符合线性关系
4.方差齐性:因变量的方差不会随着自变量X的改变而改变。
简单线性回归
案例:利用women数据集进行展示:探索30-39岁女性身高和体重之间的关系
str(women)
简单线性回归可以使用基础包中的lm()函数,glm()函数或者rms包中的ols()函数进行拟合
1. 先进行相关性分析
cor(x=women,method = c("pearson"))
X指定分析的数据集,,method指定进行的分析方法;pearson相关是要求两个变量都服从正态分布,spearman相关系数和kendall's Tau相关系数都是非参数的相关度量,对数据分布没有特殊要求,或者等级资料。
根据中心极限定理:当每组样本量>=50时,可以认为样本的均数近似服从正态分布。所以可以选择person相关,使用函数cor()计算样本的相关系数,method=“pearson”或“spearman”参数。
提示存在高度正相关,r=0.995。
r>=0.7为高度相关,0.4<=r<0.7为中度相关,r<0.4为低度相关(r应该是绝对值大小)
对相关系数进行检验:
cor.test(x=women$height,y=women$weight,method = c("pearson"))
2. 简单线性回归
lmfit<-lm(formula=weight~height,data=women)
summary(lmfit)
回归系数Estimate,回归系数的标准误Std.Error,t检验量,P值
其他重点关注的指标:
R-squared决定系数:0.991,表示模型解释因变量weight变异的百分比,越大越好。也即是weight的99.1%的变异被模型所解释,剩下的0.9%的变异是模型无法解释的,由残差引起的。但是会受自变量个数的影响,夸大自变量对因变量变异的解释程度,自变量越多,越大。Adjusted 调整了自变量个数对结果的影响,一般小于。
F统计量:对线性回归方程进行统计检验。
详细可以参考:5. 基础统计方法——关联性分析/简单线性回归-CSDN博客
3.条件检验
线性条件:
plot(x=women$height,
y=women$weight,
xlab="height(单位:英寸)",
ylab="weight(单位:磅)",
cex=1.5,cex.axis=1.5,cex.lab=1.5)
正态性:
install.packages("mvnormtest")
library(mvnormtest)
mshapiro.test(t(women))
进行双变量正态性检验可以利用mvnormtest包中的msharpiro.test()函数,msharpiro.test()函数不能处理数据框,只能处理矩阵,需要使用t()将数据集转化为矩阵。
p=0.0046<0.05,即变量weight,height并不符合双变量正态性。数据不符合双变量正态性,若不是严重偏态,使用简单线性回归,结果仍然是稳健。
检测分布特征:
library(car)
scatterplotMatrix(x=women,main="Scatter Plot Matrix",cex=1.5,cex.axis=1.5,cex.lab=1.5)
par(mfrow=c(2,2))
plot(lmfit,cex=1.5,cex.axis=1.5,cex.lab=1.5)
左上角的图用来判断线性关系,随着预测值fitted values的变化,残差residuals不稳定说明可能存在非线性关系。
左下角检测方差齐性,若图中线段两侧的散点随机分布,则说明方差齐性。
右上角的QQ图,确定残差是否分布直线的两侧,判断是否满足正态性。
多重线性回归
案例:前列腺癌的数据(示例可下载)
load("prostate.Rdata")
str(prostate)
prostate<-prostate[,1:9]
summary(prostate)
head(prostate)
10个变量,分表表示lcavol 肿瘤体积大小对数值
lweight前列腺重量的对数值
lbph良性前列腺增生量的对数值
svi 表示是否受侵犯
lcp表示薄膜穿透度的对数值
gleason表示Gleason评分
pgg45表示Gleason评分在4,5多占的百分比
lpsa表示PSA值得对数值,因变量
train表示一个逻辑值(True和False,用来区分训练数据和测试数据。)
!!!!只要不是高维数据,在正式统计分析之前均应该使用str()函数,summary()函数,head()函数和names()函数,对数据全貌做较为全面得了解。
1.相关性分析
cor.prostate<-cor(x=prostate,method = c("pearson"))
round(cor.prostate,3)
相关性分析可视化
library(corrplot)
corrplot(cor.prostate,method = "ellipse",tl.cex=1.5,tl.col="black",cl.cex=1.5)
method选定为椭圆,函数输入相关性的结果。
相关性热图
#install.packages("ggcorrplot")
library(ggcorrplot)
ggcorrplot(cor.prostate,method="circle",
hc.order=TRUE,hc.method = "ward.D",
outline.color = "white",ggtheme = theme_bw(),
type="upper",lab = TRUE,lab_size = 6,
colors = c("#6D9EC1","white","#E46726"),
tl.cex = 18,tl.col="black",tl.srt = 45)
method设置图形为圆形,
hc.order=T,hc.method="ward.D"表示对变量进行聚类,聚类的算法为ward.D。如果分析的数据变量为代谢组学数据或基因组学数据,聚类就非常重要。
outline.color设置外边框颜色,ggtheme设置图形格式,type设置表示只显示上半部分结果,lab=T,lab_size=6设置显示相关系数,字体大小。colors设置图例的颜色。
2. 多重线性拟合
multifit<-lm(formula=lpsa~lcavol+lweight+age+lbph+svi+lcp+gleason+pgg45,data=prostate)
summary(multifit)
anova(multifit)
anova()函数可以查看方差分析表
其结果与回归系数表相似,罗列了各自变量是否存在统计学意义。
3.条件检验
plot(multifit,cex=1.5,cex.axis=1.5,cex.lab=1.5)
左上角,残差没有与预测值fitted values由明显的关联,说明呈现线性。
左下角,线段两侧散点随机分布,说明方差齐
右上角,基本在直线上符合正态性。
4.多重共线性
vif(multifit)
方差膨胀因子VIF小于10,即可判断该自变量不存在多重共线性。若大于10,说明存在共线性问题,不可以直接拟合,需要使用降维或者岭回归的方式处理。
5.绘制实际值,预测值图
plot(x=prostate$lpsa,y=predict(multifit),xlab="实际值",ylab="预测值")
plot(x=prostate$lpsa,y=fitted(multifit),xlab="实际值",ylab="预测值")
可以发现实际值与预测值较为一致,说明模型的拟合效果较好。
回归与相关的区别:
- 相关系数r没有单位,回归系数β有单位;
- 相关表示相互关系,回归表示依存关系;
- 对资料的要求不同,当变量X和Y都是随机变量时,可以进行相关和回归分析,当变量Y时随机变量(变量X可控制)时,理论上只能做回归,不能做相关分析。比如变量X为性别。