在Python中计算调整后的p值

eri*_*fas 21 python statistics p-value q-value

所以,我花了一些时间寻找一种方法来获得Python中调整后的p值(也就是更正的p值,q值,FDR),但我还没有找到任何东西.有R功能p.adjust,但我想坚持Python编码,如果可能的话.Python有什么类似的东西吗?

如果这是一个不好的问题,请提前抱歉!我首先搜索了答案,但没有找到(除了Matlab版本)...感谢任何帮助!

The*_*Cat 6

根据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
Run Code Online (Sandbox Code Playgroud)

  • 我今天要交付博士学位,所以我很忙,但这个答案做了最后的步骤(IMO 不必要的步骤):/sf/answers/2347274891/ (2认同)

Y0d*_*0da 5

我们还在 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.        ])
Run Code Online (Sandbox Code Playgroud)