【发布时间】:2020-12-12 20:36:07
【问题描述】:
这是我关于 stackoverflow 的第一个问题,希望我能给你所有必要的信息。
我正在尝试使用coin 包中的chisq_test 函数基于精确分布进行卡方检验。我想比较关于一个变量的两组,但我正在运行一条警告消息。这是一个最小的可重现示例(至少我希望它是一个):
library(coin)
dt <- as.data.frame(alzheimer)
xtabs(~ disease + gender, data = dt)
chisq_test(disease ~ gender, data = dt, distribution = "exact")
我正在检查列联表以确保每个单元格有足够的案例。当我进行测试时,我得到这个输出:
> chisq_test(disease ~ gender, data = dt, distribution = "exact")
Exact Pearson Chi-Squared Test
data: disease by gender (Female, Male)
chi-squared = 9.7121, p-value = 0.3895
Warning messages:
1: In T - expectation(object) :
longer object length is not a multiple of shorter object length
2: In (T - expectation(object))^2/variance(object) :
longer object length is not a multiple of shorter object length
我使用近似分布计算了 p 值,以确保警告确实是一个问题:
> chisq_test(disease ~ gender, data = dt, distribution = approximate(nresample = 1e+05))
Approximative Pearson Chi-Squared Test
data: disease by gender (Female, Male)
chi-squared = 9.7121, p-value = 0.00756
由于两个 p 值相差很大,我猜使用精确分布会出现问题,但我就是无法弄清楚问题所在。
也许有人可以帮助我解决问题或了解警告的原因。
【问题讨论】:
-
您能否介绍一下您的数据框?错误指出,您的输入数据不同。难道
gender和disease的长度不相等吗?有NAs吗?或者类似的东西?还可以使用示例数据集尝试您的代码。这样您就可以确定您的代码是正确的,而您的问题在于数据。 -
感谢您的快速回复!数据框是 coin 包附带的一些数据,所以我认为它是一个示例数据集。我使用这些数据来获得一个可重现的例子。数据中没有
NAs,gender和disease的长度相同。有了这些附加信息:是否仍然需要尝试使用其他一些数据? -
似乎
chisq_test(table(dt$disease, dt$gender), distribution = 'exact')不支持2x3精确测试,并且公式方法没有正确捕获错误 -
如果您只是将输入更改为
chisq_test(table(dt$gender, dt$disease), distribution = 'exact'),您将获得与我发布的相同的输出。所以表中的行数必须是两个。在?chisq_test中,它读取the distribution can be ... computed exactly for univariate two-sample problems by setting distribution to ... "exact",因此不应该限制列数(只要它是 2xk 表或问题)。
标签: r chi-squared