PH525x series - Exploratory Data Analysis

偏差、系统错误和未知的随机变量在生命科学领域的数据中非常常见,忽视它们会得出错误的结论,而绘图是一种处理这种问题的有力手段,这种对待数据的方式便是探索性数据分析(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
qqplot.png

上述代码其实可以直接用函数qqnormqqline替代:

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)))
scatterPlot.png

这种散点图展示出了该数据的一个大致趋势:父亲越高,儿子便越高。这种趋势便是相关系数,那么如何利用父亲的身高预测儿子的身高呢?一般情况下,我们会使用平均值来预测。但若父亲的身高是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
boxplot.png

这种分层分析可以让我们看到每一组的身高分布,可以看出,当父亲身高是 72 英寸时,儿子的平均身高为 70.7 英寸。还可以看出,各个分组的中位数的趋势大致呈现出一条直线。这条线与回归线(regression line)类似,其斜率与相关性相关。


  • Bi-variate Normal Distribution(双变量正态分布)

满足如下表达式的一对随机变量()被认为满足二元正态分布:

1574221574774.jpg

这个表达式看起来很复杂,但其概念却是相当简单的。上述表达式可以变成如下定义:固定的值等于,并观察所有的值。这种手段在统计学上被称为“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))
strata.png
  • Variance explained(方差解释)

上述条件分布的标准差为:

即,解释了 百分之%的方差:如果的方差是,那么一旦进行条件限制,那么的方差便变为了。但要记得:“方差解释”这一说法只有在满足双元正态分布的数据中有意义。

你可能感兴趣的:(PH525x series - Exploratory Data Analysis)