我有一个包含多个组的长格式数据集,我需要对每个组进行干预前后的假设检验.

我试图通过在组级别进行分组并对值和时间点执行测试来做到这一点,尽管出于某种原因,我得到的p值没有任何意义.他们都是一样的.请参见下面的示例:

# Load the required library
library(dplyr)

# Set seed for reproducibility
set.seed(123)

# Create a dataframe with unique ids, timepoints, foodgroups, and values
data <- data.frame(
  id = rep(1:10, each = 2),  # Increased sample size
  timepoint = rep(c("before", "after"), times = 100),
  group = rep(c("A", "B", "C", "D", "E"), each = 40),  # Adjusted for larger sample size
  value = rnorm(200)  # Generating random values for illustration
)

# Perform t-test for each foodgroup
result <- data %>%
  group_by(group) %>%
  summarise(
    p_value = wilcox.test(value ~ timepoint, data = ., paired = TRUE)$p.value
  )

# Print the results
print(result)

例如,如果我只 Select 如下所示的组,我就会得到一个唯一的、可能是准确的p值.

我想我对它们的分组方式有问题吧?

# Perform t-test for each foodgroup
result <- data %>%
  filter(group=='B') %>%
  summarise(
    p_value = wilcox.test(value ~ timepoint, data = ., paired = TRUE)$p.value
  )

# Print the results
print(result)

有没有人建议找出其中的问题或提出更好的方法来实现这个目标?

推荐答案

wilcox.test()忽略Tibble分组,因此您的代码实际上计算如下:

wilcox.test(value ~ timepoint, data=data, paired=T)$p.value
# [1] 0.4340859

Base R

您可以通过将wilcox.test()应用于数据子集来实现您想要的结果,如下所示:

sapply(split(data, ~ group), 
       \(gr) wilcox.test(value ~ timepoint, data=gr, paired=T)$p.value)
#         A         B         C         D         E 
# 0.3883762 0.8123550 0.5458755 0.2773552 0.6215134 

dplyr

我们可以使用group_modify()来迭代组:

data %>%
  group_by(group) %>%
  group_modify(~ {
    wilcox.test(value ~ timepoint, data=., paired=T)$p.value %>%
      data.frame()
  }) %>%
  set_names(c('group', 'p_value'))
# # A tibble: 5 × 2
# # Groups:   group [5]
# group   p_value
# <chr>     <dbl>
# 1 A       0.388
# 2 B       0.812
# 3 C       0.546
# 4 D       0.277
# 5 E       0.622

R相关问答推荐

extract()函数不处理stanfit对象,我用错了吗?

创建计数(带重置)变量

逐行替代引用前一行的for循环

R箱形图gplot 2 4组但6个参数

如何删除gggvenn与gggplot绘制的空白?

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

如何从R中的字符串元素中减go 一个数字?

然后根据不同的列值有条件地执行函数

在某些栏和某些条件下,替换dfs列表中的NA

根据多个条件增加y轴高度以适应geom_text标签

gganimate在使用shadow_mark选项时不保留所有过go 的标记

如何优化向量的以下条件赋值?

R—将各种CSV数字列转换为日期

如何移除GGPlot中超出与面相交的任何格网像元

在R中,如何将误差条放置在堆叠的每个条上?

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

如何在内联代码中添加额外的空格(R Markdown)

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

使用函数从R中的列中删除标高

使用LAG和dplyr执行计算,以便按行和按组迭代