【问题标题】:Using nest_by or nest, group_by or looping to perform several chi square test to several variables in R (likert scales)使用nest_by或nest、group_by或循环对R中的几个变量执行几个卡方检验(李克特量表)
【发布时间】:2021-08-11 11:46:42
【问题描述】:

假设我的数据集中有这些分类变量。所有变量都与人们对 COVID-19 的担忧有关,并进行了两次评估(与不同的参与者..)。

我的主要目标是检查time(将是“恒定”)是否与每个item(经济、社会凝聚力等)的流行程度相关(会有所不同)。因此,我需要执行几个卡方检验。

我使用 nest_byxtabs 遵循了一些说明,但我没有得到正确的结果。 我想在此分析中保留 tidyverse 环境。

主要目标是进行几个卡方检验,例如这个:

ds_plot_likert %>%
  pivot_longer(cols = -c(time),
               names_to = "item", values_to = "response") %>% 
  group_by(item, time, response) %>% 
  summarise(N = n()) %>%
  mutate(pct = N / sum(N)) %>% 
  filter(item == "Children's academic achievement") %>% #need to change all the time...
  xtabs(formula =  pct ~ time  + response, data = .) %>% 
  chisq.test()

但对于我数据集中的所有变量(最好使用 tidyverse)。

谢谢!

以下代码为您提供了重现的可能性。

ds <- structure(list(time = c("First", "First", "First", "First", "First", 
"First", "First", "First", "First", "First", "First", "First", 
".Second", "First", "First", "First", "First", ".Second", "First", 
"First", "First", "First", "First", "First", "First", "First", 
".Second", "First", "First", ".Second", "First", "First", "First", 
"First", "First", "First", "First", "First", "First", "First", 
".Second", "First", "First", "First", ".Second", ".Second", "First", 
"First", "First", ".Second", ".Second", "First", "First", "First", 
"First", ".Second", ".Second", "First", "First", "First", "First", 
"First", ".Second", "First", "First", "First", "First", ".Second", 
"First", "First", "First", "First", "First", "First", "First", 
".Second", "First", ".Second", "First", "First", "First", "First", 
"First", "First", "First", "First", "First", "First", "First", 
".Second", "First", "First", "First", "First", "First", "First", 
"First", ".Second", ".Second", "First"), Economy = structure(c(4L, 
3L, 3L, 4L, 3L, 4L, 4L, 1L, 3L, 3L, 3L, 3L, 3L, 4L, 3L, 4L, 4L, 
3L, 3L, NA, 2L, 3L, 4L, 3L, 3L, 4L, 4L, 2L, 3L, 4L, 4L, 3L, 2L, 
4L, 2L, 3L, 2L, 3L, 3L, 3L, 2L, 4L, 4L, 3L, 3L, 3L, 4L, 3L, 3L, 
4L, 2L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 3L, 4L, 3L, 2L, 
3L, 3L, 3L, 4L, NA, 2L, 4L, 3L, 4L, 2L, 3L, 3L, 2L, NA, 3L, 2L, 
3L, 2L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 4L, 3L, 4L, 3L, 3L, 2L, 3L, 
3L, 3L, 4L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `My personal finance` = structure(c(3L, 
2L, 4L, 2L, 4L, 4L, 3L, 2L, 3L, 3L, 2L, 3L, 2L, 4L, 3L, 4L, 4L, 
2L, 3L, NA, 3L, 3L, 4L, 3L, 3L, 4L, 3L, 4L, 3L, 4L, 4L, 3L, 4L, 
3L, 4L, 2L, 2L, 3L, 2L, 2L, 4L, 3L, 4L, 3L, 3L, 3L, 3L, 2L, 2L, 
3L, 2L, 4L, 2L, 3L, 3L, 2L, 3L, 3L, 2L, 2L, 3L, 3L, 4L, 4L, 2L, 
3L, 3L, 4L, 3L, NA, 2L, 3L, 3L, 4L, 2L, 3L, 2L, 3L, NA, 3L, 2L, 
2L, 2L, 3L, 4L, 3L, 2L, 3L, 2L, 2L, 2L, 2L, 4L, 3L, 2L, 2L, 3L, 
3L, 3L, 3L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `My own health` = structure(c(3L, 
2L, 4L, 3L, 4L, 4L, 3L, 4L, 2L, 4L, 3L, 3L, 3L, 4L, 3L, 3L, 4L, 
3L, 2L, NA, 3L, 4L, 3L, 4L, 3L, 2L, 1L, 2L, 3L, 3L, 4L, 2L, 4L, 
2L, 4L, 4L, 3L, 2L, 2L, 4L, 4L, 2L, 4L, 3L, 3L, 2L, 3L, 3L, 2L, 
2L, 3L, 3L, 1L, 3L, 4L, 4L, 3L, 3L, 2L, 2L, 4L, 3L, 3L, 4L, 2L, 
3L, 3L, 4L, 4L, NA, 2L, 2L, 3L, 4L, 1L, 3L, 4L, 3L, NA, 3L, 3L, 
3L, 3L, 3L, 3L, 4L, 4L, 2L, 4L, 2L, 2L, 3L, 4L, 3L, 2L, 3L, 4L, 
2L, 3L, 3L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `My friends and family health` = structure(c(4L, 
3L, 4L, 4L, 4L, 4L, 3L, 4L, 3L, 4L, 3L, NA, 3L, 4L, 3L, 3L, 4L, 
4L, 3L, NA, 3L, 4L, 3L, 4L, 3L, 3L, 2L, 2L, 3L, 4L, 4L, 2L, 4L, 
1L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 4L, 3L, 
4L, 3L, 3L, 4L, 3L, 3L, 4L, 3L, 3L, 3L, 2L, 4L, 3L, 4L, 4L, 2L, 
3L, 3L, 4L, 4L, NA, 2L, 4L, 3L, 4L, 2L, 3L, 4L, 3L, NA, 3L, 4L, 
3L, 3L, 4L, 3L, 4L, 4L, 3L, 4L, 3L, 3L, 3L, 3L, 4L, 3L, 3L, 4L, 
4L, 3L, 4L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `Social cohesion` = structure(c(3L, 
3L, 2L, 4L, 4L, 2L, 4L, 4L, 2L, 3L, 3L, 3L, 3L, 4L, 3L, 3L, 4L, 
3L, 3L, NA, 3L, 3L, 4L, 3L, 3L, 2L, 1L, 2L, 2L, 4L, 4L, 3L, 3L, 
1L, 3L, NA, 2L, 3L, 2L, 4L, 4L, 2L, 3L, 3L, 4L, 4L, 3L, 3L, 3L, 
2L, 2L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 4L, 2L, 
3L, 3L, 3L, 4L, NA, 2L, 3L, 3L, 2L, 1L, 1L, 3L, 2L, NA, 3L, NA, 
3L, 3L, 4L, 2L, 4L, 3L, 1L, 4L, 2L, 4L, 3L, 2L, 4L, 2L, 3L, 4L, 
4L, 2L, 2L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `Food and pharmaceutical drugs` = structure(c(2L, 
3L, 4L, 4L, 3L, 2L, 4L, 1L, 2L, 4L, 3L, NA, 2L, 3L, 3L, 2L, 4L, 
3L, 3L, NA, 3L, 4L, 3L, 3L, 3L, 1L, 1L, 2L, 3L, 4L, 2L, 2L, 4L, 
4L, 4L, 1L, 4L, 2L, 2L, 3L, 4L, 2L, 4L, 3L, 2L, 2L, 3L, 3L, 2L, 
3L, 2L, 3L, 4L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 4L, 3L, 3L, 4L, 2L, 
3L, 3L, 3L, 4L, NA, 2L, 3L, 2L, 2L, 1L, 1L, 2L, 2L, NA, 1L, 1L, 
2L, 2L, 2L, 1L, 3L, 3L, 2L, 3L, 1L, 2L, 2L, 2L, 4L, 2L, 3L, 3L, 
2L, 1L, 2L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `Price of grocery products` = structure(c(2L, 
2L, 3L, 4L, 3L, 4L, 3L, 2L, 2L, 4L, 3L, 3L, 2L, 4L, 3L, 3L, 4L, 
4L, 3L, NA, 3L, 4L, 3L, 3L, 3L, 2L, 3L, 2L, 3L, 4L, 2L, 4L, 3L, 
4L, 4L, 4L, 4L, 2L, 2L, 3L, 4L, 2L, 4L, 3L, 3L, 3L, 3L, 4L, 2L, 
4L, 2L, 3L, 4L, 2L, 2L, 3L, 4L, 3L, 2L, 3L, 4L, 3L, 4L, 4L, 2L, 
3L, 3L, 4L, 4L, NA, 2L, 3L, 2L, 2L, 2L, 1L, 3L, 3L, NA, 1L, 1L, 
2L, 2L, 3L, 1L, 3L, 4L, 2L, 3L, 2L, 2L, 2L, 2L, 4L, 3L, 3L, 3L, 
4L, 1L, 2L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `Stock prices` = structure(c(2L, 
2L, 2L, 4L, 3L, 2L, 1L, 1L, 3L, 4L, 2L, 2L, 2L, 4L, 3L, 3L, 4L, 
3L, 2L, NA, 1L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 3L, 1L, 2L, 2L, 2L, 
4L, 4L, 2L, 3L, 2L, 2L, 3L, 2L, 3L, 4L, 3L, 4L, 3L, 3L, 2L, 2L, 
2L, 1L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, NA, 2L, 4L, 2L, 
3L, 3L, 4L, 4L, NA, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 3L, NA, 3L, 1L, 
3L, 3L, 4L, 1L, 3L, 4L, 1L, 3L, 1L, 4L, 2L, 2L, 2L, NA, 3L, 2L, 
4L, 1L, 2L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor"), `Children's academic achievement` = structure(c(4L, 
3L, 4L, 1L, NA, NA, 1L, 1L, 1L, 1L, 3L, 3L, 2L, 4L, 3L, 4L, NA, 
4L, 3L, NA, 1L, 1L, 3L, 3L, 3L, 1L, 4L, 1L, 3L, 4L, 3L, 2L, 4L, 
1L, 4L, 1L, 1L, 3L, 2L, 3L, 1L, 2L, 1L, 3L, 2L, 3L, 3L, 3L, 1L, 
1L, 1L, 4L, 1L, 1L, 2L, 3L, 3L, 3L, 3L, 2L, 4L, 3L, 3L, 4L, 2L, 
2L, 1L, 1L, 4L, NA, 2L, 2L, 2L, 4L, 1L, 2L, 1L, 2L, NA, 2L, 1L, 
NA, 3L, 2L, 2L, 1L, 4L, 2L, 3L, 1L, 4L, 1L, 1L, 1L, 3L, 1L, 1L, 
1L, 1L, 2L), .Label = c("Not at all", "A little", "Moderately", 
"Very much"), class = "factor")), class = "data.frame", row.names = c(NA, 
-100L))

【问题讨论】:

  • 你认为“正确”的结果是什么,你目前得到了什么结果?
  • 谢谢!五分钟,我会编辑帖子
  • @G.Grothendieck 完成。谢谢! Jdobres,完成!

标签: r loops dplyr tidyverse chi-squared


【解决方案1】:

您可以将结果存储在每个item 的列表中 -

library(dplyr)
library(tidyr)

ds %>%
  pivot_longer(cols = -c(time),
               names_to = "item", values_to = "response") %>% 
  group_by(item, time, response) %>% 
  summarise(N = n()) %>%
  mutate(pct = N / sum(N)) %>% 
  group_by(item) %>% 
  summarise(test = list(xtabs(formula =  pct ~ time  + response, 
                       data = cur_data()) %>% chisq.test())) -> result

result$test

#[[1]]

#   Pearson's Chi-squared test

#data:  .
#X-squared = 0.0099329, df = 3, p-value = 0.9997


#[[2]]
#
#   Pearson's Chi-squared test

#data:  .
#X-squared = 0.026631, df = 3, p-value = 0.9989
#...
#...

【讨论】:

  • 太棒了。我不知道cur_data 函数。我试图使用nest 函数!类似ds %&gt;% pivot_longer(cols = -c(time), names_to = "item", values_to = "response") %&gt;% group_by(item, time, response) %&gt;% summarise(N = n()) %&gt;% mutate(pct = N / sum(N)) %&gt;% group_by(item) %&gt;% nest()
猜你喜欢
  • 2019-03-03
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2011-03-06
  • 2012-08-04
  • 2017-11-05
相关资源
最近更新 更多