无法使用科学计数法打印出p值

时间:2018-11-05 23:10:56

标签: python

我无法在python中打印出proportion z-test的正确p值

from statsmodels.stats.proportion import proportions_ztest
from decimal import Decimal
count = 6726
nobs = 592458
value = 0.6407
stat, pval = proportions_ztest(count, nobs, value)
print('p-value =','{:.20e}'.format(Decimal(pval)))

它打印出p-value = 0.00000000000000000000e+20 我认为是零

我使用了另一个程序来计算p值,它是2.22e-16,即0.000000000000000222
如何在python中打印出2.22e-16

1 个答案:

答案 0 :(得分:0)

无法重现打印问题-如果结果中包含2.22e-16-您将可以使用以下命令进行打印:

from decimal import Decimal 

whatever = 2.22e-16
print('{:.20e}'.format(Decimal(whatever)))

输出:

2.22000000000000008179e-16

即使使用(较低分辨率的)浮点数设置为2.22e-16,也会得到与您观察到的结果不同的输出(0.00000000000000000000e+20):

# just using floats
whatever = 2.22e-16 
print('{:.20e}'.format(whatever ))

输出:

# different from "input" due to float representation error
p-value = 2.21999999999999997153e-20  

我首先认为您可能需要调整精度,但是当您通过数字创建Decimal()时,python会自动为您实现精度:请参见getcontext().prec Doku


您使用的proportions_ztest返回一个浮点数-如果将其打印为0.00000000000000000000e+20,则是从proportions_ztest返回的内容-如果您对该结果不满意,则需要寻找其他类型的库来满足您的需要,并且内部使用更高的精度。