• R语言
  • 关于BH 调节的一个问题

我有个4列的文档如下:

<br />
R-185	SIX1	-0.355520013549699	0.053849818409879<br />
R-138	EGFL7	0.0504840263444323	0.79106202307383<br />
R-10A	NFKBIA	-0.0573663730902907	0.763334156197386<br />


第三列是correlation的r 值, 第4列是p-value, 想对第4列做BH校正,请问我写的这个代码有问题没</p>

<br />
rm(list=ls()) ###清空内存中的变量</p>
<p>a<-read.csv("test.txt",sep="\t",header=F,quote="")  ###读文件到矩阵中去</p>
<p>b<-a[order(a[,4],decreasing=TRUE),]  ###按第4列,从大到小排序,因为BH本身要排序,这里排序是为了保证前几列和后面的对应</p>
<p>b[,5]<-p.adjust(b[,4],method="BH")  ###做BH校正,将校正后的值加到第五列</p>
<p>c<-b[which(b[,5]<0.001),]  ###按第5列取值</p>
<p>write.table(c,"zz.txt",sep="\t",col.names=F,row.names=F,quote=F)<br />
</p>

BH方法本身是要排序,但p.adjust()一定要输入排完序之后的P值吗?b[which(b[,5]<0.001),]b[b[,5]<0.001,]有区别吗?

另:谁帮忙再讲一遍关于小a小b小c的冷笑话?

回复 第2楼 的 谢益辉:谢谢啊

我也发现排序原来是多余的

b[b[,5]<0.001,]我第一次用

另外b[,5]<-p.adjust(b[,4],method="BH")用不了

出错信息: subscript out of bound

只好用cbind

b如果没有第5列的话你强行使用第5列当然会下标越界。

看标题,我还以为Metropolis-Hasting呢。。。

用which对于特别大的vector还是有帮助的,如果不特别大,也基本上用不上Benjamini-Hochberg。

这倒是,少数的整数比一大串TRUE/FALSE省地方。

曾经遇到过一次T/F的向量太长,R说他做不了subsetting了,后来取出T的位置来,还是能subset

向量大小在2000-7000,用BH可以不

因为我上篇文章用的是bonferroni,似乎太严格了点,BH貌似要宽松一些

回复 第8楼 的 camelbbs:ok

回复 第8楼 的 camelbbs:不是哪种方法好坏或这是否可以的问题,Bonferroni和BH两个方法控制的错误率不是同一个东西,前者控制族错误率,后者控制FDR