python和R中卡方检验的不同p值

python和R中卡方检验的不同p值,python,r,chi-squared,p-value,Python,R,Chi Squared,P Value,作为一名普通的R用户,我正在学习使用python进行分析,我从卡方检验开始,做了以下工作: R python 对于test1,我很满意,因为python和R的测试显示了类似的结果,但是test2不是这样,因为R有参数correct,所以我将其从默认值改为默认值,并且生成的p值不相同 我的代码有什么错误吗?我应该“相信”哪一个 更新01 谢谢你的反馈。我知道卡方检验不应该用于值小于5的单元格,我应该使用fisher精确检验,我关心的是为什么R和Python给出的p值相差如此之大。除了单元格计数

作为一名普通的R用户,我正在学习使用python进行分析,我从卡方检验开始,做了以下工作:

R python 对于
test1
,我很满意,因为python和R的测试显示了类似的结果,但是
test2
不是这样,因为R有参数
correct
,所以我将其从默认值改为默认值,并且生成的p值不相同

我的代码有什么错误吗?我应该“相信”哪一个

更新01
谢谢你的反馈。我知道卡方检验不应该用于值小于5的单元格,我应该使用fisher精确检验,我关心的是为什么R和Python给出的p值相差如此之大。

除了单元格计数<5的问题,根据我的经验,统计测试的R和Python实现在默认情况下通常都会启用各种修正(这些修正应该会改进基本方法)。关闭校正功能似乎会使
scipy
p值与R匹配:

scipy.stats.chi2_contingency(np.array([[1, 2], [3, 4]]), correction=False)

Out[6]: 
# p-val = 0.778159
(0.079365079365079388, 0.77815968617616582, 1, array([[ 1.2,  1.8],
        [ 2.8,  4.2]]))
这同样适用于t检验等,其中默认值可能是或可能不是假设相等的方差。基本上,当您在统计数据之间匹配输出时遇到问题
软件,开始查看默认参数,看看您是否应该启用或禁用这些调整。

确实,您不应该相信这两个参数,因为卡方对如此小的样本无效。看,他们两个都不相信。从Python文档中可以看出:“对于此计算的有效性,经常引用的一条准则是,只有在每个单元格中观察到的和预期的频率至少为5时,才应使用测试。”您可以始终使用计算,并查看哪些匹配。在R中,您可以使用
m验证这些计算
In [31]:
temp = scipy.stats.chi2_contingency(np.array([[10, 20], [30, 40]]))  # test1
temp[1] # pvalue
Out[31]:
0.50403586645250464
In [30]:
temp = scipy.stats.chi2_contingency(np.array([[1, 2], [3, 4]]))      # test2
temp[1] # pvalue
Out[30]:
0.67260381744151676
scipy.stats.chi2_contingency(np.array([[1, 2], [3, 4]]), correction=False)

Out[6]: 
# p-val = 0.778159
(0.079365079365079388, 0.77815968617616582, 1, array([[ 1.2,  1.8],
        [ 2.8,  4.2]]))