[英]Get `chisq.test()$p.value` for several groups using `dplyr::group_by()`
我正在嘗試對dplyr框架內的多個組進行卡方檢驗。 問題是, group_by() %>% summarise()
似乎沒什么用處。
模擬數據(結構與問題數據相同,但隨機,因此p.values應該很高)
set.seed(1)
data.frame(partido=sample(c("PRI", "PAN"), 100, 0.6),
genero=sample(c("H", "M"), 100, 0.7),
GM=sample(c("Bajo", "Muy bajo"), 100, 0.8)) -> foo
我想比較由GM定義的幾個組,以查看是否有條件的GM的交叉和通用交叉表的p。值發生變化。
明顯的dplyr方法應該是:
foo %>%
group_by(GM) %>%
summarise(pvalue=chisq.test(.$partido, .$genero)$p.value) #just the p.value, so summarise is happy
但是我得到的是未分組數據的p.value,只是次數,而不是每個表的p.value:
# A tibble: 2 × 2 GM pvalue <fctr> <dbl> 1 Bajo 0.8660521 2 Muy bajo 0.8660521
使用過濾器測試每個組,我得到:
foo %>%
filter(GM=="Bajo") %$%
table(partido, genero) %>%
chisq.test()
返回值: X-squared = 0.015655, df = 1, p-value = 0.9004
foo %>%
filter(GM=="Muy bajo") %$%
table(partido, genero) %>% chisq.test()
返回值: X-squared = 0.50409, df = 1, p-value = 0.4777
dplyr:summarise()
可用於具有多個參數的函數,因此這不應該是問題:
data.frame(a=1:10, b=10:1, c=sample(c("Grupo 1", "Grupo 2"), 10, 0.5)) %>%
group_by(c) %>%
summarise(r=cor(a, b))
就像魅力。 它似乎不適用於chisq.test。
我設法使用tidyr::nest()
和purrr::map()
來獲得嵌套模型所需要的東西,但是我發現代碼很麻煩-至少對我的學生而言。 實際上,我已經投入了很多我們的教學來教他們(數學和編程方面非常有挑戰性的小組)dplyr,以便他們可以盡可能地避免使用向量函數。
foo %>%
nest(-GM) %>%
mutate(tabla=map(data, ~table(.))) %>%
mutate(pvalue=map(tabla, ~chisq.test(.)$p.value)) %>%
select(GM, pvalue) %>%
unnest()
A tibble: 2 × 2
GM pvalue
<fctr> <dbl>
1 Bajo 0.9004276
2 Muy bajo 0.4777095
do()
也可以do()
:
foo %>%
group_by(GM) %>%
do(tidy(chisq.test(.$partido, .$genero)))
Source: local data frame [2 x 5]
Groups: GM [2]
GM statistic p.value parameter
<fctr> <dbl> <dbl> <int>
1 Bajo 0.0156553 0.9004276 1
2 Muy bajo 0.5040878 0.4777095 1
# ... with 1 more variables: method <fctr>
但是,為什么group_by()
無法與summarise(chisq.test()$p.value)
?
在dplyr
,無論您處於groupby還是其他狀態,通常都可以使用未加引號的變量名來訪問相關列。 因此,移除.$
從存取.$partido
和.$genero
這不需要我得到:
foo %>%
group_by(GM) %>%
summarise(pvalue= chisq.test(partido, genero)$p.value)
# A tibble: 2 × 2
GM pvalue
<fctr> <dbl>
1 Bajo 0.9004276
2 Muy bajo 0.4777095
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.