如何在Python中实现R的p.adjust
我有一个 p 值列表,我想计算 FDR 多重比较的调整 p 值。在 R 中,我可以使用:
pval <- read.csv("my_file.txt",header=F,sep="\t")
pval <- pval[,1]
FDR <- p.adjust(pval, method= "BH")
print(length(pval[FDR<0.1]))
write.table(cbind(pval, FDR),"pval_FDR.txt",row.names=F,sep="\t",quote=F )
如何在 Python 中实现此代码?这是我在 Google 的帮助下在 Python 中进行的可行尝试:
pvalue_list [2.26717873145e-10, 1.36209234286e-11 , 0.684342083821...] # my pvalues
pvalue_lst = [v.r['p.value'] for v in pvalue_list]
p_adjust = R.r['p.adjust'](R.FloatVector(pvalue_lst),method='BH')
for v in p_adjust:
print v
上面的代码抛出一个 AttributeError: 'float' object has no attribute 'r'
错误。谁能帮我指出我的问题吗?预先感谢您的帮助!
I have a list of p-values and I would like to calculate the adjust p-values for multiple comparisons for the FDR. In R, I can use:
pval <- read.csv("my_file.txt",header=F,sep="\t")
pval <- pval[,1]
FDR <- p.adjust(pval, method= "BH")
print(length(pval[FDR<0.1]))
write.table(cbind(pval, FDR),"pval_FDR.txt",row.names=F,sep="\t",quote=F )
How can I implement this code in Python? Here was my feable attempt in Python with the help of Google:
pvalue_list [2.26717873145e-10, 1.36209234286e-11 , 0.684342083821...] # my pvalues
pvalue_lst = [v.r['p.value'] for v in pvalue_list]
p_adjust = R.r['p.adjust'](R.FloatVector(pvalue_lst),method='BH')
for v in p_adjust:
print v
The above code throws an AttributeError: 'float' object has no attribute 'r'
error. Can anyone help point out my problem? Thanks in advance for the help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您希望确定从 R 中获得什么,您还可以表明您希望使用 R 包“stats”中的函数:
If you wish to be sure of what you are getting from R, you can also indicate that you wish to use the function in the R package 'stats':
这个问题有点老了,但是 Python 的 statsmodels 中有多个比较修正可用。我们有
http://statsmodels.sourceforge.net/devel/ generated/statsmodels.sandbox.stats.multicomp.multipletests.html#statsmodels.sandbox.stats.multicomp.multipletests
This question is a bit old, but there are multiple comparison corrections available in statsmodels for Python. We have
http://statsmodels.sourceforge.net/devel/generated/statsmodels.sandbox.stats.multicomp.multipletests.html#statsmodels.sandbox.stats.multicomp.multipletests
这是我使用的内部函数:
Here is an in-house function I use:
使用 Python 的 numpy 库,根本不调用 R,这是 BH 方法的相当有效的实现:(
基于 BondedDust 发布的 R 代码)
Using Python's numpy library, without calling out to R at all, here's a reasonably efficient implementation of the BH method:
(Based on the R code BondedDust posted)
(我知道这不是答案......只是想提供帮助。)R 的 p.adjust 中的 BH 代码只是:
(I know this is not the answer... just trying to be helpful.) The BH code in R's p.adjust is just:
老问题,但这是 R FDR 代码在 python 中的翻译(这可能相当低效):
Old question, but here's a translation of the R FDR code in python (which is probably fairly inefficient):
好吧,为了让你的代码正常工作,我猜这样的事情会起作用:
如果 p.adjust 足够简单,你可以用 Python 编写它,这样你就不需要调用 R 了。如果你想经常使用它,你可以制作一个简单的Python包装器:
Well, to get your code working, I would guess something like this would work:
If p.adjust is simple enough, you could write it in Python so you avoid the need to call into R. And if you want to use it a lot, you can make a simple Python wrapper: