R中的假设检验(三)相关与回归

学到哪儿写到哪儿,这篇后面会随时更新。
一、相关分析
研究变量与变量间的关系就需要分析其相关性,就需要使用相关分析,相关分析比较简单。它分为皮尔逊相关、斯皮尔曼相关、肯德尔等级相关,并且他们有各自的适用范围:(1)Pearson,皮尔逊积差相关系数,适用于两个变量为连续变量,且两个变量需要严格符合正态性分布,由于其严格的条件所以其具有较强的统计效能。(2)Spearman,斯皮尔曼相关系数,对两个变量的分布无要求,属于非参数统计方法,其原理是利用两个变量的秩次大小作相关分析,其适用范围较广但是统计效能较低。(3)Kendall’s tau-b,肯德尔等级相关系数,适用于两个变量为分类变量,属于非参数统计方法
原假设:假设两个变量不相关,即相关系数是0。
所以当p<0.05时,可认为两变量是相关的,因此有了统计学意义(注意区别p值大小的意义,要记住不同检验方法的原假设)。
相关系数的值的解释参考:
0 ~ 1 正相关
-1 ~ 0 负相关
0.8 ~ 1.0 极强相关
0.6 ~ 0.8 强相关
0.4 ~ 0.6 中等程度相关
0.2 ~ 0.4 弱相关
0.0 ~ 0.2 极弱相关或无相关
这里有1个简便的方法得出相关系数数值,即cor(),是单词correlation的缩写,即相关性。用法:cor(x,y=NULL,use=c(“everything” ,“all.obs” ,“complete.obs” ,“na.or.complete” ,“pairwise.complete.obs”) ,method=c(“pearson”, “kendall”, or “spearman”: ))。
这个函数的作用是得出相关系数的值,可以用于两个变量甚至多个变量,值得注意的有3点:1.只能用逗号不能用formula,原因是formula的“~”代表“通过什么来描述”,而这两个变量是并列的关系,并不是因变量自变量的关系,所以不能用波浪号,只能用逗号;2.加粗斜体为函数默认的方式,所以若不设置method就默认输出皮尔逊相关系数,并且method支持缩写,即p,k,s。但是use不支持缩写;3.如果是2个变量,则x,y输入2个变量,如果是多个变量,则x就是矩阵或数据框,y不用输入,最后会生成列表,列出每个组合的相关系数,非常好用;4.all.obs(纳入所有数据—遇到缺失值会报错)、everything(纳入所有数据—有缺失值则相关系数的计算结果将被设为missing)、complete.obs(行删除)以及pairwise.complete.obs(成对行删除)。当无缺失值时,use不用设置,当有缺失值时,use=complete.obs
1)皮尔逊相关系数显著性检验
代码例子:cor.test( blood.glucose ,short.velocity ) #p=0.0479
2)斯皮尔曼相关系数显著性检验
代码例子:cor.test( blood.glucose ,short.velocity ,method=“s”) #p=0.1392
3)肯德尔相关系数显著性检验
代码例子:cor.test( blood.glucose ,short.velocity ,method=“k”) #p=0.1187

偏相关分析:是在多个变量中,在剔除其他的变量影响后研究两个变量的关系。最后的结果会输出两变量在一个一个剔除其他变量后的相关系数,然后自己选择相关性最高的变量。这个可以用ggm包中的pcor()函数计算偏相关系数。这里就不介绍了,因为偏相关我用的很少,以后用到了再来补充或专门写一篇。

二、回归分析
一元线性回归是最简单的回归模型,不过我不打算把这章深入分析,后面还有包括多元线性回归,逐步回归,曲线拟合等等,这些内容深奥,且对于选择参数的设置有点难度。这里初步介绍归回分析和ggplot下的画图,至于建模,参数等等,都丢给机器学习的章节去进一步实现和阐述。机器学习是我稍微有点感兴趣的领域,今年的时间我会深入自学。
一元线性回归的定义:用来分析1个自变量和1个因变量之间是否存在线性关系以及存在什么样的线性关系。其方程为 y=a+bx 。
原假设:回归系数为0,截距为0
代码示例:lm( short.velocity ~ blood.glucose ) #intercept 截距
查看模型具体信息:summary( lm( short.velocity ~ blood.glucose ) )

查看回归值:fitted( )或者 lm( short.velocity ~ blood.glucose )$fitted.values

查看残差值:resid( ) 或者 lm( short.velocity ~ blood.glucose )$residuals
可以看出,lm()输出的模型包含了很多信息,只是输出比较简单。

下面到了我喜欢的画图时间~~
抖动散点图(即箱图+散点图):
ggplot(df , aes( x,y , fill = as.factor (group)))+
geom_boxplot( outliter.size = 0 , colour=“black”)+
geom_jitter( aes( group = as.factor( group)),shape=21,alpha=0.5)

调整抖动散点图的点和箱子的间距:
ggplot( df , aes( x , y , fill=as.factor( group )))+
geom_boxplot( position = position_dodge( 0.75), outlier.size = 0 ,colour=“black”)+
geom_jitter( aes( group = as.factor( group )), shape = 21 ,alpha = 0.5,
position=position_jitterdodge( dodge.width = 0.75 ) )

重磅的残差分析图绘制:
ggplot(thuesen,aes(blood.glucose,short.velocity))+
geom_point( )+
geom_smooth(method = ‘lm’,se=F)
#smooth代表添加平滑模块,用法:geom_smooth(mapping = NULL, data = NULL, method = “auto”, formula = y ~ x,se = TRUE, na.rm = FALSE) 。method包括几种类型:在数据量n较小时,系统默认 method = "loess"算法,局部回归模型;而在数据量n>1000时,则采用 method = "gam"算法,广义可加模型;此外还有method = “lm” 和method = “rlm” 算法。这里就只介绍lm,se=T默认显示置信区间。
#geom_segment在点(x,y)和点(xend,yend)之间绘制直线。geom_curve绘制一条曲线。
先把缺失值处理掉:new_thuesen<- na.omit( thuesen),然后添加线段绘制残差图

ggplot(new_thuesen,aes(blood.glucose,short.velocity))+
geom_point()+
geom_smooth(method = ‘lm’,se=F)+ geom_segment(aes(xend=blood.glucose,yend=lm_predicted),alpha=.5)+
annotate(geom = ‘text’,x=7,y=1.8,label=‘y=0.02196x+1.0978’,size=5)
其中omit意为删除,忽略;alpha代表线段的透明度。xend和yend代表线段终止的点。
R中的假设检验(三)相关与回归