我需要对数据集运行卡方检验来查找 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 时。期待您的意见!
您可以自己实现统计量的计算,以避免 p 值计算,但我认为这不值得花时间,因为
chi2_contingency(observed)
在 Google Colab 上为您的数据花费的时间不到半毫秒。计算 p 值本身只占其中的一小部分。
我想您观察到的时间实际上是导入的时间,但是如果
chi2_contingency
在您的机器上真的很慢,请使用 SciPy 提交错误报告。