这个卡方计算有什么问题?

机器算法验证 r 卡方检验
2022-03-21 17:27:32

我在 R 中手动计算卡方,并得到两个不同的答案。我相信 R 是正确的,但我不是 100% 确定。有人可以帮我理解为什么吗?

在 R 中:

test           <- matrix(c(4203, 4218, 786, 771), ncol=2)
dimnames(test) <- list(group = c("control","exp"), click = c("n","y"))
print(test)
print(Xsq      <- chisq.test(test, correct=F)) 

这给了我χ2=0.1712.

但是,如果我手动执行此操作,我会得到0.339. 这是我的计算:

(E1O1)2E1+(E2O2)2E2(42034218)24203+(771786)2786=.3398

1个回答

您的R代码认为您有一个用于卡方检验的 2x2 列联表,而您的“手动”版本将您的两个值视为与前两个值进行比较的预期值。您需要确定哪种设置是正确的,并且两次都一致地使用它。

这是您的R版本:

> test           <- matrix(c(4203, 4218, 786, 771), ncol=2)
> dimnames(test) <- list(group = c("control","exp"), click = c("n","y"))
> print(test)
         click
group        n   y
  control 4203 786
  exp     4218 771
> print(Xsq      <- chisq.test(test, correct=F))

    Pearson's Chi-squared test

data:  test 
X-squared = 0.1712, df = 1, p-value = 0.679

这就是你“手工”做的方式:

clickgroupnyproportioncontrol42037860.50exp42187710.50proportion0.8440.156
请注意,我添加了行和列的比例。这些被视为对观察值落在每一行(列)中的概率的估计。在独立假设下每个单元格中的预期计数是行概率乘以列概率乘以总计数。对于您的数据,这给出了:
clickgroupnycontrol4210.5778.5exp4210.5778.5
因此计算为:
(42034210.5)24210.5+(42184210.5)24210.5+(786778.5)2778.5+(771778.5)2778.5=0.1712,
这与R给予的相同。


如果您将control行计数作为预期计数,而不是其他条件的计数,则“手动”计算将具有以下内容:

(42184203)24203+(771786)2786=0.3398
你也可以R像这样运行这个版本:

> probs <- test[1,]/sum(test[1,])
> probs
        n         y 
0.8424534 0.1575466 
> chisq.test(test[2,], correct=F, p=probs)

    Chi-squared test for given probabilities

data:  test[2, ] 
X-squared = 0.3398, df = 1, p-value = 0.5599

他们的关键是您指定p具有预期概率的参数(R将负责计算预期计数)。无论如何,你可以看到χ2值再次相同。