我对使用dplyr
和reshape2
计算多列的卡方统计有疑问。以下是一个小数据框...
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_each
或melt
来针对其他每个变量计算Sat
列,以产生卡方残差和p值统计信息。我在想必须有这样的东西:Example %>% summarise_each(funs(chisq.test(...
但我不确定如何完成。另外,我将如何融合数据框并使用
group_by
或do()
来获取卡方统计信息?我对两种方法都感兴趣。如果有一种合并broom
包的方法,那也很好,或者用tidyr
代替reshape2
。回顾一下,我想进行卡方检验,例如
chisq.test(Example$Sat, Example$Gender)
但是...我想针对
Sat
,Gender
和Ethnicity
为AgeGroup
变量生成卡方统计。这是一个小例子,我希望上面的方法可以让我以快速有效的方式跨许多列创建卡方统计。如果我可以用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)