I have a question about using dplyr and reshape2 to calculate chi-square statistics across multiple columns. Below is a small dataframe...
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)
How would I use summarise_each or melt to calculate the Sat column against each of the other variables to produce chi-square residual and p-value stats. I'm thinking there must be something like:
Example %>% summarise_each(funs(chisq.test(...
but I'm not sure how to finish it. Also, how would I melt the data frame and use group_by or do() to get the chi-square stats? I'm interested in seeing both methods. If there's a way to incorporate the broom package, that would be great too, or tidyr instead of reshape2.
So to recap, I would like to run chi-square tests, such as
chisq.test(Example$Sat, Example$Gender)
but...I would like to produce chi-square stats for the Sat variable against Gender, Ethnicity, and AgeGroup. This is a small example, and I'm hoping the methods above will allow me to create chi-square stats across many columns in a fast and efficient manner. Bonus if I can plot the residuals in a heat map with ggplot2, which is why I'm interested in incorporating the broom package into this example.
If we need to get the 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
Or to extract the statistic
Example %>%
summarise_each(funs(chisq.test(.,
Example$Sat)$statistic), -one_of("Sat"))
# Gender Ethnicity AgeGroup
#1 2.916667 0.8333333 6.666667
To get the residuals, it would be easier with base R
lapply(Example[setdiff(names(Example), "Sat")],
function(x) chisq.test(x, Example$Sat)$residuals)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With