在Python中计算调整后的p值

ehxuflar  于 2023-05-05  发布在  Python
关注(0)|答案(5)|浏览(146)

所以,我花了一些时间寻找一种在Python中获得调整后的p值(也称为校正后的p值,q值,FDR)的方法,但我还没有真正找到任何东西。有R函数p.adjust,但如果可能的话,我想坚持使用Python编码。Python有类似的东西吗?
如果这是一个不好的问题,提前道歉!我确实先搜索了答案,但没有找到(除了Matlab版本)...任何帮助是赞赏!

raogr8fs

raogr8fs1#

它在statmodels中可用。
http://statsmodels.sourceforge.net/devel/stats.html#multiple-tests-and-multiple-comparison-procedures
http://statsmodels.sourceforge.net/devel/generated/statsmodels.sandbox.stats.multicomp.multipletests.html
和一些解释,例子和蒙特卡罗http://jpktd.blogspot.com/2013/04/multiple-testing-p-value-corrections-in.html

v8wbuo2f

v8wbuo2f2#

根据biostathandbook,BH很容易计算。

def fdr(p_vals):

    from scipy.stats import rankdata
    ranked_p_values = rankdata(p_vals)
    fdr = p_vals * len(p_vals) / ranked_p_values
    fdr[fdr > 1] = 1

    return fdr
yquaqz18

yquaqz183#

您可以尝试使用模块rpy2,它允许您导入R函数(顺便说一句,基本搜索返回How to implement R's p.adjust in Python)。
另一种可能性是看一下数学,然后自己重做,因为它仍然相对容易。
显然在statsmodels中有一个正在进行的实现:http://statsmodels.sourceforge.net/ipdirective/_modules/scikits/statsmodels/sandbox/stats/multicomp.html。也许它已经可以使用了。

hrysbysz

hrysbysz4#

你在问题中提到了q值,但没有答案提供解决这个问题的链接。我相信这个包(至少从文档中看是这样的)在Python中计算Q值
https://puolival.github.io/multipy/
还有这个
https://github.com/nfusi/qvalue

rvpgvaaj

rvpgvaaj5#

我们还在SciPy中添加了FDR(将在下一个版本SciPy 1.11中)。
https://scipy.github.io/devdocs/reference/generated/scipy.stats.false_discovery_control.html

from scipy import stats

ps = [0.0001, 0.0004, 0.0019, 0.0095, 0.0201, 0.0278, 0.0298, 0.0344,
      0.0459, 0.3240, 0.4262, 0.5719, 0.6528, 0.7590, 1.000]
stats.false_discovery_control(ps)

# array([0.0015    , 0.003     , 0.0095    , 0.035625  , 0.0603    ,
#        0.06385714, 0.06385714, 0.0645    , 0.0765    , 0.486     ,
#        0.58118182, 0.714875  , 0.75323077, 0.81321429, 1.        ])

相关问题