【问题标题】:Use R dplyr/purrr To Get Chi-square Output Matrices By Group使用 R dplyr/purrr 按组获取卡方输出矩阵
【发布时间】:2019-03-25 00:54:57
【问题描述】:

我想使用 tidyverse 的元素按组获取卡方输出矩阵(例如,标准化残差、期望值)。使用 mtcars 数据集,这是我开始的地方:

mtcars %>% 
  dplyr::select(vs, am) %>%
  table() %>%
  chisq.test(.) 

产生卡方检验统计量。比如为了得到标准化的残差,我唯一成功的代码是这样的:

mtcars %>% 
  dplyr::select(vs, am) %>%
  table() %>%
  chisq.test(.) -> chi.out

chi.out$stdres

     vs am       Freq
1  0  0  0.9523038
2  1  0 -0.9523038
3  0  1 -0.9523038
4  1  1  0.9523038

理想情况下,我希望将观察值和标准化残差转换为数据框格式。像这样的:

cbind(as.data.frame(chi.out$observed),as.data.frame(chi.out$stdres))

  vs am Freq vs am       Freq
1  0  0   12  0  0  0.9523038
2  1  0    7  1  0 -0.9523038
3  0  1    6  0  1 -0.9523038
4  1  1    7  1  1  0.9523038

最后,我想按组执行此操作,例如在 mtcars 数据集中的 cyl 列上。似乎 dplyr 和某些带有 map_dfr 或 map_dfc 的 purrr 地图版本可以解决问题,但我无法将它们完全结合在一起。提前致谢。

【问题讨论】:

  • “我想按组获取卡方输出矩阵” 哪个组?您没有按任何变量分组。您可以为您按cyl 分组的情况添加您的预期输出吗?
  • 应该提供一个输出应该是什么样子的例子。请参阅下面 Humpelstielzchen 的回复/解决方案。

标签: r dplyr purrr


【解决方案1】:

所以这是我的解决方案建议。

library(dplyr)
library(reshape2)

mtcars %>% 
  select(vs, am, cyl) %>%
  table() %>%
  apply(3, chisq.test) %>%
  lapply(`[`, c(6,9)) %>%
  melt() %>%
  spread(key = L2, value = value) %>%
  rename(cyl = L1) %>%
  select(cyl, vs, am, observed, stdres) %>%
  arrange(cyl)


   cyl vs am observed     stdres
1    4  0  0        0 -0.6422616
2    4  0  1        1  0.6422616
3    4  1  0        3  0.6422616
4    4  1  1        7 -0.6422616
5    6  0  0        0 -2.6457513
6    6  0  1        3  2.6457513
7    6  1  0        4  2.6457513
8    6  1  1        0 -2.6457513
9    8  0  0       12        NaN
10   8  0  1        2        NaN
11   8  1  0        0        NaN
12   8  1  1        0        NaN

这会对cyl 的每组进行卡方检验。分组在select() 语句中隐式完成。最后,您将获得cylvsam 的每个组合的观测值和标准化残差。应该适用于任何数据框。

希望这就是您想要的。

【讨论】:

  • 效果很好!非常感谢。必须加载 tidyr(或 tidyverse),以便传播功能起作用。 8 缸车辆的 NaN 是边际为零的矩阵的结果。
  • 很高兴为您提供帮助!是的,它无法以这种方式计算残差,并且还发出警告。但这只是一个虚拟的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多