【问题标题】:Which is the correct way to test for significant differences between non-numeric data? Which is the correct post-hoc?哪种是测试非数字数据之间显着差异的正确方法?哪个是正确的事后?
【发布时间】:2022-12-14 10:28:43
【问题描述】:

我正在处理看起来像这样的非数字数据:

Origin ESBL
Hospital ESBL
Hospital Non-ESBL
Hospital ESBL
City ESBL
Hospital Non-ESBL
City ESBL
Country ESBL
Hospital ESBL

我想比较原点和变量 ESBL 之间是否存在统计关联。

到目前为止,我已经尝试使用以下方法在 R 中生成列联表:

cont_tab<-table(data$Origin, data$ESBL)

并运行卡方独立性检验:

chi_test<-chisq.test(cont_tab)

在此之后,我知道确实存在独立性:

X-squared = 17.306, df = 2, p-value = 0.0001746

但现在我想知道哪些组合负责此值(ESBL-Hospital、Non-ESBL-Hospital、ESBL-City 等)。

我试过运行多个 Fisher 测试:

Library(RVAideMemoire)
multifish<-fisher.multcomp(cont_tab)

但我并没有真正得到我想要的:

            ESBL Non-ESBL
  Hospital   46      122
  City       27       21
  Country    56       69

我做错了什么吗?有更好的方法吗?

谢谢!!!

【问题讨论】:

  • 我认为您显示的“最终结果”实际上是cont_tab。当我运行你的代码时,cont_tab 看起来像你在这里显示的结果,而 multifish 显示了不同 Origin 值之间成对比较的 p 值表。我们可以在其中看到(正如预期的那样)HospitalCityCountry有显着差异,但CityCountry之间没有显着差异。你能仔细检查一下你在看multifish吗?如果您只在控制台中输入fisher.multcomp(cont_tab),您会得到什么?

标签: r statistics chi-squared


【解决方案1】:

我认为您显示的“最终结果”实际上是cont_tab。当我运行你的代码时,cont_tab 看起来像你显示的结果是 fisher.multicomp 的输出:

cont_tab <- table(data$Origin, data$ESBL)

cont_tab
#>           
#>            ESBL Non-ESBL
#>   Hospital   46      122
#>   City       27       21
#>   Country    56       69

然而,如果我在 cont_tab 上运行 fisher.multcomp,我得到:

library(RVAideMemoire)

fisher.multcomp(cont_tab)
#> 
#>         Pairwise comparisons using Fisher's exact test for count data
#> 
#> data:  cont_tab
#> 
#>         Hospital  City
#> City    0.001313     -
#> Country 0.004249 0.234
#> 
#> P value adjustment method: fdr

我们可以在其中看到(正如预期的那样)HospitalCityCountry有显着差异,但CityCountry之间没有显着差异。

创建于 2022-12-13 reprex v2.0.2


从问题中推断出的数据

data <- data.frame(
  ESBL = factor(c(rep(c("ESBL", "Non-ESBL"), times = c(46, 122)),
                  rep(c("ESBL", "Non-ESBL"), times = c(27, 21)),
                  rep(c("ESBL", 'Non-ESBL'), times = c(56, 69)))),
  Origin = factor(rep(c('Hospital', 'City', 'Country'), 
                      times =  c(168, 48, 125)), 
                  c('Hospital', 'City', 'Country')))

【讨论】: