【问题标题】:Chi -Square test for grouped data excepting certain groups with missing values in r分组数据的卡方检验,除了 r 中缺失值的某些组
【发布时间】:2021-08-13 21:12:46
【问题描述】:

我有这些数据:

df <- structure(list(`Orientación dicotómica` = c("Neurogastro", "Neurogastro", 
"Neurogastro", "Neurogastro", "No neurogastro", "No neurogastro", 
"No neurogastro", "No neurogastro", "No neurogastro"), `Fisiopatología más frecuente variante constipación` = c("Más de una variante", 
"Obstrucción del tracto de salida", "Tránsito lento / Inercia", 
"Transito normal", "Más de una variante", "Obstrucción del tracto de salida", 
"Tránsito lento / Inercia", "Transito normal", "Uso de fármacos"
), n = c(22L, 8L, 12L, 11L, 108L, 12L, 101L, 25L, 1L), Proporcion = c(41.5, 
15.1, 22.6, 20.8, 43, 4.8, 40.2, 10, 0.4), ds = c(11.5, 11.5, 
11.5, 11.5, 19.6, 19.6, 19.6, 19.6, 19.6), IC25 = c(32, 5.6, 
13.1, 11.3, 29.8, -8.4, 27, -3.2, -12.8), IC75 = c(51, 24.6, 
32.1, 30.3, 56.2, 18, 53.4, 23.2, 13.6)), row.names = c(NA, -9L
), class = c("tbl_df", "tbl", "data.frame"), na.action = structure(c(`10` = 10L), class = "omit"))

看起来像这样:

我正在尝试使用分组数据进行 chisq 测试,以分析在“fisiopatología más frecuente”方面“neurogastro”和“no neurogastro”之间是否存在统计学上的显着差异。

如发布于Chi -Square test with grouped data in dplyr

我试过了

test <- df %>%
   group_by(`Fisiopatología más frecuente variante constipación`) %>%
   summarise(pval = chisq.test(Proporcion,`Orientación dicotómica`)$p.value)

但我得到一个错误,我猜是因为没有用于神经胃的“Uso de fármacos”。我的方法可以吗?除了缺少的那一组之外,我如何对其余组进行测试?

谢谢!

【问题讨论】:

  • 你可以使用tryCatch来处理错误pval = tryCatch(chisq.test(...), error = function(e) NA)
  • 感谢@rawr,但我一直收到相同的“错误:summarise() 输入有问题pval。x 'x' 和 'y' 必须至少有 2 个级别我输入 pvaltryCatch(chisq.test(Proporcion, Orientación dicotómica)$p.value). i 第 5 组发生错误:Fisiopatología más frecuente variante constipación = "Uso de fármacos"。"
  • 你没有添加error = ...部分
  • 我做到了。代码是test &lt;- fisiopato_constipacion_especialidad %&gt;% group_by(Fisiopatología más frecuente variante constipación) %&gt;% summarise(pval = tryCatch(chisq.test(Proporcion,Orientación dicotómica)$p.value), error = function(e) NA)。输出在上面...
  • 你的括号不在正确的位置summarise(pval = tryCatch(chisq.test(...)$p.value, error = function(e) NA))

标签: r chi-squared groupingby


【解决方案1】:

尝试使用xtabs

tbl <- xtabs(n ~ `Fisiopatología más frecuente variante constipación` + `Orientación dicotómica`, df)
tbl
#                                                   Orientación dicotómica
# Fisiopatología más frecuente variante constipación Neurogastro No neurogastro
#                   Más de una variante                       22            108
#                   Obstrucción del tracto de salida           8             12
#                   Tránsito lento / Inercia                  12            101
#                   Transito normal                           11             25
#                   Uso de fármacos                            0              1
chisq.test(tbl)
# 
#   Pearson's Chi-squared test
# 
# data:  tbl
# X-squared = 15.092, df = 4, p-value = 0.004514
# 
# Warning message:
# In chisq.test(tbl) : Chi-squared approximation may be incorrect
chisq.test(tbl)$p.value
# [1] 0.00451449
# Warning message:
# In chisq.test(tbl) : Chi-squared approximation may be incorrect

产生警告是因为表中最后一行的观察值/预期值非常少。模拟 p 值可能会更好,尽管在这种情况下它似乎对 p 值没有影响:

chisq.test(tbl, simulate.p.value=TRUE)
# 
#   Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)
# 
# data:  tbl
# X-squared = 15.092, df = NA, p-value = 0.004498

获取每一行的结果:

results <- apply(tbl, 1, chisq.test)
sapply(results, function(x) x$p.value)
#              Más de una variante Obstrucción del tracto de salida         Tránsito lento / Inercia                  Transito normal 
#                     4.603430e-14                     3.710934e-01                     5.644889e-17                     1.963066e-02 
#                  Uso de fármacos 
#                     3.173105e-01 

sapply(results, "[", "p.value")
# $`Más de una variante.p.value`
# [1] 4.60343e-14
# 
# $`Obstrucción del tracto de salida.p.value`
# [1] 0.3710934
# 
# $`Tránsito lento / Inercia.p.value`
# [1] 5.644889e-17
# 
# $`Transito normal.p.value`
# [1] 0.01963066
# 
# $`Uso de fármacos.p.value`
# [1] 0.3173105

【讨论】:

  • 感谢@dcarlson,我认为这个近似值可能有用。但是,我试图为每一行获取一个 p 值(比较神经胃与无神经胃)。这可能吗?
  • 我添加了代码来获取每一行的结果。
  • 我已经尝试了代码,但 results &lt;- apply(tbl, 1, chisq.test)$p.value 给出了 NULL 并且 sapply(results, function(x) x$p.value) 给出了 list()...抱歉打扰,但我是该领域的新手
  • 我已经修好了:results &lt;- apply(tbl, 1, chisq.test).
猜你喜欢
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
相关资源
最近更新 更多