我对使用dplyrreshape2计算多列的卡方统计有疑问。以下是一个小数据框...

Sat <- c("Satisfied","Satisfied","Dissatisfied","Dissatisfied",
                                       "Neutral")

Gender <- c("Male","Male","Female","Male","Female")

Ethnicity <- c("Asian","White","White","Asian","White")

AgeGroup <- c("18-20","18-20","21-23","18-20","18-28")

Example <- data.frame(Sat,Gender,Ethnicity,AgeGroup)


我将如何使用summarise_eachmelt来针对其他每个变量计算Sat列,以产生卡方残差和p值统计信息。我在想必须有这样的东西:

Example %>% summarise_each(funs(chisq.test(...


但我不确定如何完成。另外,我将如何融合数据框并使用group_bydo()来获取卡方统计信息?我对两种方法都感兴趣。如果有一种合并broom包的方法,那也很好,或者用tidyr代替reshape2

回顾一下,我想进行卡方检验,例如

chisq.test(Example$Sat, Example$Gender)


但是...我想针对SatGenderEthnicityAgeGroup变量生成卡方统计。这是一个小例子,我希望上面的方法可以让我以快速有效的方式跨许多列创建卡方统计。如果我可以用ggplot2在热图中绘制残差,这将是一个好处,这就是为什么我有兴趣将broom包合并到此示例中的原因。

最佳答案

如果我们需要获取p values

 Example %>%
    summarise_each(funs(chisq.test(.,
               Example$Sat)$p.value), -one_of("Sat"))
 #     Gender Ethnicity  AgeGroup
 #1 0.2326237 0.6592406 0.1545873


或提取statistic

Example %>%
    summarise_each(funs(chisq.test(.,
           Example$Sat)$statistic), -one_of("Sat"))
#   Gender Ethnicity AgeGroup
#1 2.916667 0.8333333 6.666667


要获取residuals,使用base R会更容易

 lapply(Example[setdiff(names(Example), "Sat")],
       function(x) chisq.test(x, Example$Sat)$residuals)

08-20 00:11