【问题标题】:Is there a way to check whether chi-square or Fisher's exact test should be used and then run it automatically?有没有办法检查是否应该使用卡方或费舍尔精确检验,然后自动运行它?
【发布时间】:2022-08-14 23:25:24
【问题描述】:

我是 R 新手,但我转向它,因为它是我唯一可用的软件,可以在大于 2x2 的表上执行 Fisher 的精确文本。

理论上 \'仅当至少 80% 的单元格的预期频率为 5 或更大,并且没有单元格的预期频率小于 1 时,才执行卡方检验。\'

我经常需要对数百个表进行多次分析,其中一些符合卡方标准,而对于一些应该使用 Fisher 检验。

我知道如何手动完成,通过生成列联表,查看它,计算我是否应该使用 Fisher 检验的卡方,然后使用 chisq.test()/fisher.test() 运行测试.

有没有办法自动化这个过程?一些将检查过程自动化并压缩到单个命令中的方法,并根据其输出自动执行卡方或 Fisher 检验?

我希望我说清楚了,感谢所有阅读它的人:)

  • 似乎您已经有了一些选择测试的标准,那么一个简单的 if/else 语句应该可以完成这项工作(可能与 apply 函数一起迭代您的数据)
  • 要回答您的问题,是的,有办法。但是,如果您可以提供可重现的数据集和预期的结果,那么为您提供操作方法会更容易。
  • @Phil所以这是一组虚拟数据(pastebin.com/Fi6ERaim),性别(m / f),他们是否有neflix(y / n)和guns(y / n)。我想运行一个循环,该循环将通过一组变量并根据数据在循环中执行性别与变量的 chi/fisher(在这种情况下:netflix 应该使用 chi,guns 使用 Fisher)

标签: r statistics chi-squared statistical-test


【解决方案1】:

您可以创建自定义函数:

myfun <- function(data, var1, var2, chi = TRUE) {
  t <- table(data[[var1]], data[[var2]])

  if (chi) {
    chisq.test(t)
  } else {
    fisher.test(t)
  }
}

然后按照您认为合适的方式应用它:

myfun(dat, "gender", "netflix")

    Pearson's Chi-squared test with Yates' continuity correction

data:  t
X-squared = 0, df = 1, p-value = 1

myfun(dat, "gender", "guns", chi = FALSE)

    Fisher's Exact Test for Count Data

data:  t
p-value = 0.0003284
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
   2.867735 118.989345
sample estimates:
odds ratio 
  15.45796 

【讨论】:

    最近更新 更多