Python 计算卡方阈值,x^2删除 测试的本质是一个阈值,它基于自由度个数和我们愿意接受或拒绝零假设的不确定性。通常建议使用0.05(1/20)左右的阈值来拒绝零假设。我们希望数据只有1/20的概率是随机而有意义的。换言之,我们希望数据有19/20的概率属于简单的随机变化。
由于卡方值的计算涉及许多超越函数,因此通常呈现为表格形式。在某些情况下,软件库会提供 x^2 累积分布函数的实现,这使得我们可以计算该值而不用在表格中查找它。
对于一个 x^2 值 x
和自由度 f
,其累积分布函数定义如下:
通常用
表示随机概率,即:如果 p>0.05,则数据可以理解为随机的,此时零假设成立,否则数据不太可能是随机的,有必要进一步研究。
累积分布为不完全伽马函数 \gamma 和完全伽马函数 \tau(x) 之比。计算这些函数值的通用方法可能涉及一些相当复杂的数学计算。我们取捷径巧妙地实现了两个非常好的近似,从而可以重点关注这个问题本身。这两个函数有助于研究函数式设计中的一些额外问题。
这两个函数都需要进行阶乘计算 n!。前面介绍过过许多阶乘计算形式了,这里使用如下版本:
@lru_cache(128)
def fact(k: int) -> int:
if k < 2:
return 1
return reduce(operator.mul, range(2, int(k)+1))
这便是
它代表2到 k (含 k )的乘积。该实现不涉及递归。由于Python中的整型值可能非常大,因此这个值的计算并没有实际上限。