我正在对一些与种族有关的分类值进行一次卡方检验,以及不同种族群体是否参加了一个诊所。由于这个数据中有十几个不同的种族,我把它们分成“白色”、“黑色”和“其他”,只是为了测试(因为相关性表明大多数活动发生在“白人”和“黑人”之间)。然而,使用Python的.chi2_contingency()方法,我得到的结果看起来很不寻常。下表如下:
Appointment Status No Yes
Black 9170 33372
White 15137 152307
Other 8864 56165Python方法返回以下内容:
X^2: 5207.16
p-value: 0.0
df: 2
expected values array: array([[ 5131.21350472, 37410.78649528],
[ 7843.48838791, 57185.51161209],
[ 20196.29810738, 147247.70189262]]))df是好的,但卡方值和p值似乎都不正确。有没有人能看到,我在方法上做的事情可能产生了这些值,或者在Python中有什么东西在幕后做着这样的事情?谢谢!
发布于 2022-10-01 08:39:00
测试统计和p值是正确的(也许也是可以理解的)。让我逐步解释一下结果。在维基百科(https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data)上,题为“维基百科”(https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data)中的分类数据的“类数据”的样本检验的章节(https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data)也可能会有所帮助。
,
。
下面发布的代码复制了所有的数字,并以2自由度绘制了chi2发行版的PDF。我希望这能帮到你。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import chi2
# Data and properties
TrueCounts = np.array( [ [9170,33372],[15137,152307],[8864,56165] ])
Datadimension = TrueCounts.shape
TotalCounts = np.sum(TrueCounts)
print(TotalCounts)
# Fractions
fracAnswer = np.sum(TrueCounts, axis=0)/TotalCounts
fracRace = np.sum(TrueCounts, axis=1)/TotalCounts
# Caculate expected counts
ExpCounts = np.zeros(np.shape(TrueCounts))
for iter1 in range(Datadimension[0]):
for iter2 in range(Datadimension[1]):
ExpCounts[iter1, iter2] = fracRace[iter1]*fracAnswer[iter2]*TotalCounts
print('=== True and expected counts ===')
print(fracAnswer)
print(fracRace)
print('=== True and expected counts ===')
print(TrueCounts)
print(ExpCounts)
print('=== Test summary ===')
TestStat = np.sum( (TrueCounts-ExpCounts)**2/ExpCounts )
print(TestStat)
# Make ch2 plot for comparison
x = np.arange(0, 20, 0.05)
plt.plot(x, chi2.pdf(x, df=2))
plt.show()https://stackoverflow.com/questions/73913631
复制相似问题