偏差、系统错误和未知的随机变量在生命科学领域的数据中非常常见,忽视它们会得出错误的结论,而绘图是一种处理这种问题的有力手段,这种对待数据的方式便是探索性数据分析(EDA)。
在单变量数据中,qq图是一种比较常见的绘图方法,那么接下来将首先对qq图进行一个详解。
- Quantile Quantile Plots
为了证实某种理论分布的效果,我们可以使用qq图进行验证。首先讲解一个概念:p-th percentile,其定义是:在某种分布中,若数值q大于该分布中%p的数值,那么q便是该分布的第p百分位数。比如,50-th百分位数便是中位数。
我们可以通过如下方式手动绘制qq图:
library(UsingR) ##available from CRAN
library(rafalib)
x <- father.son$fheight
ps <- ( seq(0,99) + 0.5 )/100
#生成x的分位数
qs <- quantile(x, ps)
#求平均数为mean(x),方差为popsd(x)的正态分布的各个分位数对应的Z-score
normalqs <- qnorm(ps, mean(x), popsd(x))
#绘图,x轴为Z-score(也就是如果身高为正态分布,各个分位上对应的具体身高),y轴则为实际的身高在各个分位上的具体数据
plot(normalqs,qs,xlab="Normal percentiles",ylab="Height percentiles")
abline(0,1) ##identity line
上述代码其实可以直接用函数qqnorm
和qqline
替代:
qqnorm(x)
qqline(x)
- Stratification(分层)
以Francis Galton中的父/子身高数据为例,如果只是想简单的概述它们,可以利用平均数与标准差(因为身高数据满足正态分布),但是这种描述遗漏了数据的重要特征。
library(UsingR)
data("father.son")
x=father.son$fheight
y=father.son$sheight
plot(x,y,xlab="Father's height in inches",ylab="Son's height in inches",main=paste("correlation =",signif(cor(x,y),2)))
这种散点图展示出了该数据的一个大致趋势:父亲越高,儿子便越高。这种趋势便是相关系数,那么如何利用父亲的身高预测儿子的身高呢?一般情况下,我们会使用平均值来预测。但若父亲的身高是72 英寸,我们依旧使用均值来预测儿子的身高吗?可以看到,这位父亲比父亲的平均身高高1.75个标准差,那么是否可以认为儿子的身高也比儿子的平均身高大1.75个标准差呢?
为了回答这个问题,我们将父亲的身高进行分层(stratifying)分析:
#split函数:按照分组因子将y进行分组
#round函数:四舍五入
#本例中是按照父亲的身高对儿子的身高进行分组
groups <- split(y,round(x))
boxplot(groups)
print(mean(y[ round(x) == 72]))
## [1] 70.67719
这种分层分析可以让我们看到每一组的身高分布,可以看出,当父亲身高是 72 英寸时,儿子的平均身高为 70.7 英寸。还可以看出,各个分组的中位数的趋势大致呈现出一条直线。这条线与回归线(regression line)类似,其斜率与相关性相关。
- Bi-variate Normal Distribution(双变量正态分布)
满足如下表达式的一对随机变量()被认为满足二元正态分布:
这个表达式看起来很复杂,但其概念却是相当简单的。上述表达式可以变成如下定义:固定的值等于,并观察所有的值。这种手段在统计学上被称为“exercise conditioning”,我们在固定的基础上分析:如果一对随机变量满足双元正态分布,若,无论为何值,那么都是满足正态分布的。此时:
这是一条以为斜率的直线,即回归线。若SD相同,那么这条回归线的斜率便等于。因此,若我们标准化和,回归线的斜率便是相关系数。
另外还可以通过构建来预测:若离均值一个SD远,那么便离的均值一个倍SD远。即:
原文对这个表达式有如下解释,但我并未理解,先占个位:
If there is perfect correlation, we predict the same number of SDs. If there is 0 correlation, then we don’t use x at all. For values between 0 and 1, the prediction is somewhere in between. For negative values, we simply predict in the opposite direction.
现仍以父子身高数据进行举例说明:
x=( x-mean(x) )/sd(x)
y=( y-mean(y) )/sd(y)
#按照父亲的身高,对儿子的身高进行分组,求均值
means=tapply(y, round(x*4)/4, mean)
#返回值的names为分组因子,故本步是获取父亲身高
fatherheights=as.numeric(names(means))
mypar(1,1)
plot(fatherheights, means, ylab="average of strata of son heights", ylim=range(fatherheights))
#绘制纵截距为0,斜率为相关系数的直线
abline(0, cor(x,y))
- Variance explained(方差解释)
上述条件分布的标准差为:
即,解释了 百分之%的方差:如果的方差是,那么一旦进行条件限制,那么的方差便变为了。但要记得:“方差解释”这一说法只有在满足双元正态分布的数据中有意义。