所以,我花了一些时间寻找一种在Python中获得调整后的p值(也称为校正后的p值,q值,FDR)的方法,但我还没有真正找到任何东西。有R函数p.adjust,但如果可能的话,我想坚持使用Python编码。Python有类似的东西吗?如果这是一个不好的问题,提前道歉!我确实先搜索了答案,但没有找到(除了Matlab版本)...任何帮助是赞赏!
R
p.adjust
raogr8fs1#
它在statmodels中可用。http://statsmodels.sourceforge.net/devel/stats.html#multiple-tests-and-multiple-comparison-procedureshttp://statsmodels.sourceforge.net/devel/generated/statsmodels.sandbox.stats.multicomp.multipletests.html和一些解释,例子和蒙特卡罗http://jpktd.blogspot.com/2013/04/multiple-testing-p-value-corrections-in.html
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
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。也许它已经可以使用了。
rpy2
statsmodels
hrysbysz4#
你在问题中提到了q值,但没有答案提供解决这个问题的链接。我相信这个包(至少从文档中看是这样的)在Python中计算Q值https://puolival.github.io/multipy/还有这个https://github.com/nfusi/qvalue
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. ])
5条答案
按热度按时间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
v8wbuo2f2#
根据biostathandbook,BH很容易计算。
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。也许它已经可以使用了。hrysbysz4#
你在问题中提到了q值,但没有答案提供解决这个问题的链接。我相信这个包(至少从文档中看是这样的)在Python中计算Q值
https://puolival.github.io/multipy/
还有这个
https://github.com/nfusi/qvalue
rvpgvaaj5#
我们还在SciPy中添加了FDR(将在下一个版本SciPy 1.11中)。
https://scipy.github.io/devdocs/reference/generated/scipy.stats.false_discovery_control.html