R语言实现bootstrap和jackknife检验方法

Python011

R语言实现bootstrap和jackknife检验方法,第1张

写在最前面:

首先需要说一下,本文的bootstrap和jackknife都算是蒙特卡罗方法(Monte Carlo method)的一种。应用广泛的的MCMC链(马尔可夫链蒙特卡洛方法Markov chain Monte Carlo)也是蒙特卡罗与马尔可夫链的结合。简单来说,蒙特卡罗方法就是从已知样本的分布中随机抽取新的样本集进行评估,然后放回,再次抽取的方法。根据具体方法的不同,抽取样本集的手段也不同。

bootstrap抽样方法将观测到的样本视为一个有限的总体,是唯一的信息来源,从中有放回的随机抽样来评估总体特征,以及对抽样总体进行推断统计。bootstrap 也分参数bootstrap和非参数bootstrap,前者的分布已完全知道。但在生信领域一般没有这种情况。所以下面讨论的是非参数bootstrap。

直接上例子:

假设现在有bootstrap包中的law数据集如下,

现在我们要计算LSAT成绩(美国法学入学考试)和GPA之间的相关系数。但因为样本量太少了,所以我们使用bootstrap重复抽样评估其标准误。

200次循环抽样后,计算得se.R标准误为0.1474629

得到如下的图:

1e6次循环抽样后,计算得se.R标准误为0.1333802

得到如下的图:

如果用bootstrap包的bootstrap函数会快一些:

bootstrap函数的用法: bootstrap(抽取样本范围,重复次数,进行bootstrap的函数,bootstrap的数据集)

偏差定义为bootstrap结果(多个数值)与原数据统计结果(单个数值)的均值:

得到bias大约为0.001817608,比较小

换一个包,boot包

这里用了三种方法计算置信区间:basic、正态和百分数。样本相关系数分布接近正态,则正态置信区间接近百分数区间。此外还有“Better Bootstrap Confivendence Interval” 更好的bootstrap置信区间,称为BCa区间,使用偏差和偏度对百分数置信区间进行矫正。设置type="bca"即可。

简单的说,bootstrap是从原有真实样本中有放回地抽取n个。jacknife就是每次都抽取n-1个样本,也就是每次只剔除一个原样本。

同样地,如果以bootstrap包中的law数据进行演示:

Jackknife计算的bias为-0.006473623。 这里jackknife的偏差公式相比于bootstrap有一个(n-1)系数,推导就不写了。

标准误se为0.1425186,与bootstrap得出的比较接近。

当统计量不太平滑的时候,Jacknife有很大误差。比如说对中位数进行统计,其变化很大。在进行Jacknife之后最好再跑一次bootstrap,看看是否相差很大。

居然还能这么嵌套着玩,针对每次bootstrap形成的数列向量计算jackknife的标准差,这样可以看出bootstrap若干次取样之间的差异。

算出来分别为0.1344824和0.08545141。后者较小,表面bootstrap取样之间的variance较小。

简单来说就是一种数据分割检验的方法,将数据分割为K份,称为"K-fold"交叉检验,每次第i个子集作为测试集来评估模型,其余的用来构建模型。Admixture使用的就是这个原理。Jackknife也属于Cross Validation的应用之一。

现在我创建一个这样的alignment:

这棵树长这样,符合遗传距离:

进行bootstrap:

phylogeny的bootstrap是对每一个节点都进行bootstrap取样并建树,比如说在9号节点,查看其bootstrap子集建的树符合系统发育关系((human2,human4,human3)(human8,human1,human6,human7,human5))的百分比(不管内部怎么样,先看这个节点)。发现Node1支持率是100(1000次都符合)。而后移到下一个节点,并且只看节点内部的分支支持率是多少。

其实原理都比较简单,计算bootstrap也会有专门的软件。

参考资料:

1)中科大张伟平教授课件

2) https://ecomorph.wordpress.com/2014/10/09/phylogenetic-trees-in-r-4/

正确歌词"竹板这么一打 是别的咱不夸,咱夸一夸这全国美食狗不理包子”是黑棒的《No.1》 里的歌词

歌名:《No.1》

歌手:黑棒

语言:国语

所属专辑:嘻哈第一棒

发行时间:2004-06-01

歌词:

Yo check it out

Time4us2rip it out

HiBomb

U gotta play it loud now

Coz we c

Coz we v

Coz we know ya need

Coz we gonna take ya 2 da real deep

We bring ya da HipHop beat

HipHop heat

Da whole lota thin s that u ain t C

We gonna let U c And set ya free

All we wanna do

is 2 built a HipHop dream

想要成为No 1 (be da No 1)

要做第一没问题 (没问题)

不要每天总是欺骗别人也骗了你自己 (呃~)

努力成为No 1 (be da No 1)

脚踏实地做第一 (做第一)

要努力 不放弃 黑棒 会支持你

大道理没有什么意义

We Let UC 怎样才是真的第一

Be da NO 1没有那么容易

Oh please 以下各位请好好学习

别人伤痛本来深深藏在心底

却被人狠心拿来拍片只为盈利

还想角逐第一 真是卑鄙

用了DV 你就不算垃圾

贺岁皇帝 年底才来拍戏

目标清晰 只为票房第一

听说还到Hollywood作电脑特技

全明星班底 反正只是为了拉米

风流皇帝 刀枪剑戟

酷到弊

还有插播广告可以笑死你

Yo DJ!!!Scratch n Beat

(肝 肝肝肝 肝可怎么办)

衫菜是什么菜 翠花上的菜

反正不是轻舞飞扬的痞子蔡

Ai 没有关系 谢谢琼瑶老阿姨

这么多年来的搞笑悲情戏

经典台词永远不会腻

(人家心里好难过好难过好难过的Ni)

好难过的戏 可以不断NG

What never

I never watch that on the TV

想要成为No 1 (be da No 1)

要做第一没问题 (没问题)

不要每天总是欺骗别人也骗了你自己 (呃~)

努力成为No 1 (be da No 1)

脚踏实地做第一 (做第一)

要努力 不放弃 黑棒 会支持你

What 跟着Beats绕绕就是MC

MC WC U better check these

(竹板这么一打 是别的咱不夸)

(咱夸一夸这全国美食狗不理包子)

Stop!That s whachu called MC

Oh plaease

You beter pack it up 回去种地

电视综艺 就像儿童游戏

还有各色晚会实在多的可以

五分钟的歌里只有两句有你

Oh Sorry 我只看到你脚上的LV

于是一群兄弟姐妹更加努力

自己花钱出了一张垃圾EP

愿你有朝一日能够红遍中华大地

接着疯狂走穴只带一张CD

还有无数花边新闻灿烂无比

想要炒作自己其实也很Eazy

给个创意你自己好好学习

中国P Diddy寻找中国J LO

志愿者请道艺风公司报名

想要成为No 1 (be da No 1)

要做第一没问题 (没问题)

不要每天总是欺骗别人也骗了你自己 (呃~)

努力成为No 1 (be da No 1)

脚踏实地做第一 (做第一)

要努力 不放弃 黑棒 会支持你

虽说F4答应陪我去看流星

我却隐隐觉得前途不太光明

我的得意之作企宣非说不灵

大老板还亲自给我下了指令

说要体现年轻人的自由心态

说你想红就得先要为民除害

我们没有黄飞鸿那么厉害

拜托两位听听HipHop以后再来

郑秀文有首歌名起的很High

送给两位希望你们周末愉快

还是拜托两位领导暂时离开

让我把真的HipHop带到这里来

难道你比我酷

You know I m sayin