卡方检验用于大小不等的组

时间:2020-01-21 00:32:22

标签: python r scipy statistics chi-squared

我想应用卡方检验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为其他统计专业知识

2 个答案:

答案 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,但是不存在所接收的频率,反之亦然。

希望这会有所帮助