想不想体验手动模拟计算p value的快感!

admin 115 2025-01-14 编辑

虽然很多人一入学就有接触概率统计等课程,但因为课程本身对于数学要求比较高,然后又比较抽象,所以很有可能学完以后很快就抛之脑后(对,说的就是我),大约最后只留下了p值小于0.05就很开心的印象。

 

最近刚结束生物统计课的助教生涯,想与大家分享一下非常非常非常形象的p value的计算方法,希望能加强大家的理解。

无论是从事干实验还是湿实验研究的人大概都知道p value是假设检验中进行检验决策的一个重要依据,一般以p value是否小于0.05来衡量是否具有统计学差异。拿一个简单的两群体t test来说:有两组病人的血压值,一组病人使用了某种降压药,一组没有使用药物,如果群体量不是很大并且数据基本满足正态分布,那么就可以通过很简单的t test来检验用药组和非用药组的血压值是否有显著差异,进而说明药物是否真的有效(此处大概已经有人准备祭出SPSS、SAS、R或者Excel等一系神器了)。但是这个t test中的p value到底是怎样一个直观的存在呢?

我们可以用R模拟随机生成两组数据作为样本,分别为用药组(drug组)和非用药组(control组)的血压值。这里使用的随机函数是rnorm。rnorm(x,y,z) 用以表示随机生成x个符合均值为y、标准差为z正态分布的数值:

所以在我们的样本中,drug组中有30例样本,control组中有40例样本。两组血压的分布直方图画出来大概是这个样子:

 然后请静静忘记我们生成数据的过程,包括均值啊、标准差啊等等,勇敢地告诉自己现在只有两个不同组别的血压数据!

通过简单地计算,我们可以得到样本中drug组均值为137.06,标准差为10.61;control组均值为141.47,标准差为6.91,两组数据独立且均符合正态分布。那么到底怎样才能手动检验两组数据是否有差别的呢?

首先,假设检验的前提是作出假设,这里很明显,无效假设就是drug组和control组的血压值均值没有差别,备择假设就是均值存在差别。

依照数据的特征,我们可以生成一个两组血压均值差的正态分布(默念:两个独立的正态分布的任意线性组合仍服从正态分布)。通过计算,我们可以得到它的均值为0(需要满足无效假设),标准差为2.22。通过计算机模拟抽取10000个值(rnorm(10000,0,2.22)),绘制分布图如下:

也就是说,如果两组数据均值没有差别,它们两组抽样的均值差就是符合如此乖巧的正态分布。

扭头看下我们手上的数据,两组数据的均值差为-4.41(137.06-141.47),那么这个差值或者比它更凶残的情况出现的情况有多少呢?在模拟的10000次抽样中,有356个结果小于等于-4.41,215个结果大于等于4.41,也就是落在了蓝色区域。 

所以在10000次模拟结果中一共有571次出现了比当前样本差值更大的情况,占比为0.0571,对照p value的定义“当原假设为真时所得到的样本观察结果或更极端结果出现的概率”,不难发现此次检验中p value即为0.0571,大于0.05,不能拒绝无效假设,两组间的血压值没有显著差别。

使用R自带的函数(t.test)做检验,得到p value为0.05345406,和我们计算出来的p value是基本相符的。

你大约有点困惑了 诶我们不是产生随机数的时候已经给他们设定了不同的平均值么!?大约要遗憾的告诉你可能由于我们设定的两组的标准差有点大,数据分布的范围较广,造成两者抽样相差不大的趋势,所以两组之间存在的差别更有可能认为是抽样误差所造成的。如果降低标准差的设定,相信你就会得到你想要的小惊喜。

 

欢迎关注

点击以下「关键词」,查看往期内容:

一个物种一个家

TCGA | 小工具 | 数据库 |组装| 注释 |   基因家族  |  Pvalue

基因预测  |bestorf |  sci | NAR | 在线工具 | 生存分析 | 热图

 生信不死 | 初学者 | circRNA | 一箭画心| 十二生肖 | circos

 舞台|基因组 | 黄金测序 | 套路 | 杂谈组装 |  进化 | 测序简史

想不想体验手动模拟计算p value的快感!

上一篇: 质粒构建工具推荐,实验室必备的分子克隆利器
下一篇: 基于14种实体肿瘤的泛癌研究识别肿瘤褪黑激素微环境下的 预后和免疫特征
相关文章