我无法在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
?
答案 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返回的内容-如果您对该结果不满意,则需要寻找其他类型的库来满足您的需要,并且内部使用更高的精度。