chi2.cdf() 的阈值,低于该阈值则不保证使用计算资源

问题描述 投票:0回答:1

我需要对数据集运行卡方检验来查找 p 值。显而易见的选择是使用 scipy.stats 中的 chi2_contingency()chi2.cdf()。但 p-value = 5.723076338262742e-82 非常小,计算这个简单的数据集需要 3 秒。我想通过在 chi2.cdf() 中设置自定义阈值来避免这个缓慢的过程。如果 p 值远小于 0.01,我认为不值得花费大量的计算精力来计算它。

我的示例数据集是:

# Observed data
observed = np.array([[150, 700], [350, 150]])

# Perform the chi-square test
chi2, p, dof, expected = chi2_contingency(observed)

# Print the results
print(f"Chi2 Statistic: {chi2}")
print(f"P-value: {p}")
print(f"Degrees of Freedom: {dof}")
print("Expected Frequencies:")
print(expected)
# Results
Chi2 Statistic: 367.7704987889273
P-value: 5.723076338262742e-82
Degrees of Freedom: 1
Expected Frequencies:
[[314.81481481 535.18518519]
 [185.18518519 314.81481481]]

我的方法

我试图绕过计算,但即使这种方法也会将 p 值与后验阈值进行比较。

from scipy.stats import chi2, chi2_contingency

# Observed data
observed = np.array([[150, 700], [350, 150]])

# Perform the chi-square test
chi2_stat, p_value, dof, expected = chi2_contingency(observed)

# Set your threshold (for example, 0.01)
threshold = 0.01

# Check if p-value is below the threshold
if p_value < threshold:
    print(f'P-value is extremely small (<{threshold}). Skipping the exhaustive computation.')
else:
    # Compute the actual p-value
    p_value = 1 - chi2.cdf(chi2_stat, dof)
    print(f'P-value: {p_value}')

结论

总而言之,我正在寻找一种编程方法来避免每次计算 p 值 - 仅当它 >= 0.01 时。期待您的意见!

python math scipy statistics
1个回答
0
投票

您可以自己实现统计量的计算,以避免 p 值计算,但我认为这不值得花时间,因为

chi2_contingency(observed)
在 Google Colab 上为您的数据花费的时间不到半毫秒。计算 p 值本身只占其中的一小部分。

我想您观察到的时间实际上是导入的时间,但是如果

chi2_contingency
在您的机器上真的很慢,请使用 SciPy 提交错误报告。

© www.soinside.com 2019 - 2024. All rights reserved.