写在前面
入门生物信息,所有人都绕不开统计基础知识和相关实现方式。本章我们将简要介绍统计学相关基础知识以及如何使用R语言进行简单地计算和分析。
说明:简书编辑器不支持latex公式,点击阅读博客原文
相关性分析
本节提到的相关性分析和后面会提到的t-test, ANOVA 以及回归分析等被称为参数检验,这些检验在进行时我们常默认数据符合一定前提条件,如符合正态分布和方差相等等。当样本数量大于30时,根据中心极限定理,我们通常认为数据符合正态分布;在进行t-test 和ANOVA 分析时,还需要满足样本方差相等。
在进行各种检验之前需要初步检验数据是否符合某种检验的前提条件,如果不符合则应该考虑使用非参数检验或其他方法。
正态分布评估
在评估数据集是否符合正态分布时通常会采用Shapiro-Wilk’s test和图示(Q-Q plot)结合的方法。使用Q-Q plot(quantile-quantile plot)的结果较直观,使用Shapiro-Wilk’s test显著性检验的方法更准确(相对而言)。
Shapiro-Wilk’s test 结果受样本量的影响非常大,当样本量很大时即便数据符合正态分布也容易出现p值很小进而拒绝原假设的情况(该检验原假设是样本来自于正态分布)。样本量很小时即便真实数据不s是来自正态分布,也可能接受原假设。
这里试举一例
# 分别随机生成两组二项分布和指数分布随机数
set.seed(90)
x <- rbinom(15,8,0.7)
y <- rexp(15,0.5)
shapiro.test(x)
shapiro.test(y)
# Shapiro-Wilk normality test
#
# data: x
# W = 0.95996, p-value = 0.6917
#
#
# Shapiro-Wilk normality test
#
# data: y
# W = 0.96168, p-value = 0.7216
可以发现,即便我们生成的两个样本都不是正态分布,但是检验的结果仍然没有拒绝原假设(没有拒绝不等于接受原假设)。好在R中该函数限制检测的样本个数是3到5000。因此,同时结合图像来分析还是很必要的。
一般使用Q-Q plot来检验是否符合正态分布,R中默认的函数是qqnorm()
;ggplot2中可以使用函数qplot()
;qqpubr包是基于ggplot2二次开发的简易升级版,操作更加友好,可以使用函数ggqqplot()
。
下面利用生成的数据绘图。
# 生成符合正态分布的一组数据并绘图
z <- rnorm(50)
qqnorm(z)
library(ggplot2)
qplot(sample=z)
library(ggpubr)
ggqqplot(z)
相关性分析
Pearson相关系数、Spearman相关系数、Kendall相关系数都可以用来表示变量之间的相关性,一般情况使用pearson相关系数更多,如果明确样本不符合正态分布可以使用kendall或者spearman相关系数。这三种相关系数都可以通过cor()
函数来进行计算,下面通过R已有数据集cars,查看汽车车速和刹车距离之间的相关性。
pearson相关系数计算公式
$$r = \frac{\sum{(x-m_x)(y-m_y)}}{\sqrt{\sum{(x-m_x)2}\sum{(y-m_y)2}}}$$
其中m表示均值。
cor(cars, method = "pearson")
相关性可视化展示
可以使用散点图进行两个变量之间的相关性展示。
plot(cars)
ggplot(cars, aes(x=speed, y=dist))+ geom_point()
ggscatter(cars,x="speed", y="dist",\
add = "reg.line", conf.int = T,cor.coef = T)
Pearson 相关性检验
前面我们只是计算了两个变量之间的相关性,还应该对相关进行显著性检验。原假设为变量之间没有相关性,使用函数为cor.test()
cor.test(cars$speed,cars$dist,\
alternative = "two.side", method = "pearson")
统计结果中,t表示t检验统计量,df表示自由度,pvalue是t检验的显著性水平,conf.int表示95%的置信区间,sample estimates 是相关系数。相关系数越接近-1表示负相关,接近1表示正相关。
加入靠谱熊基地,和大家一起交流
网友评论