我想应用卡方检验scipy.stats.chisquare
。在我的小组中,观察总数有所不同。
import pandas as pd
data={'expected':[20,13,18,21,21,29,45,37,35,32,53,38,25,21,50,62],
'observed':[19,10,15,14,15,25,25,20,26,38,50,36,30,28,59,49]}
data=pd.DataFrame(data)
print(data.expected.sum())
print(data.observed.sum())
要忽略这是不正确的-对吗?
scipy.stats.chisquare
的默认行为是否考虑到了这一点?我用笔和纸检查,看起来好像没有。有参数吗?
from scipy.stats import chisquare
# incorrect since the number of observations is unequal
chisquare(f_obs=data.observed, f_exp=data.expected)
当我进行手动调整时,我得到的结果会略有不同。
# adjust actual number of observations
data['obs_prop']=data['observed'].apply(lambda x: x/data['observed'].sum())
data['observed_new']=data['obs_prop']*data['expected'].sum()
# proper way
chisquare(f_obs=data.observed_new, f_exp=data.expected)
如果我在某些时候错了,请纠正我。谢谢。
ps:我标记了R为其他统计专业知识
答案 0 :(得分:1)
基本上,这是一个不同的统计问题-列联表中变量独立性的卡方检验。
from scipy.stats import contingency as cont
chi2, p, dof, exp=cont.chi2_contingency(data)
p
答案 1 :(得分:0)
我的问题不太清楚。但是,我的看法是,如果要计算两个类别变量之间的独立性测试,则可以使用 scipy.stats.chi2_contingency 。 scipy.stats.chi2_sqaure 还可用于比较观察到的和预期的。这里的类别数应该相同。从逻辑上讲,如果存在观察到的频率,则类别的频率为0,但是不存在所接收的频率,反之亦然。
希望这会有所帮助