gpt4 book ai didi

r - 在 for 循环中计算 p 值

转载 作者:行者123 更新时间:2023-12-04 12:05:05 24 4
gpt4 key购买 nike

我有一个包含实验数据的数据集。
每天我都有新的观察进来。

我的 df 与列的虚构示例:
日:日指数
a组:数据控制
b组:数据处理。

structure(list(day = c(1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), group_a = c(4L, 
2L, 3L, 1L, 1L, 4L, 3L, 2L, 4L), group_b = c(3L, 4L, 2L, 2L,
2L, 2L, 3L, 4L, 5L)), .Names = c("day", "group_a", "group_b"), class = "data.frame", row.names = c(NA,
-9L))

我想对这个数据集进行子集化,应用一个 wilcoxon 签名等级测试,如:
test <- wilcox.test(df$group_a, df$group_b, alternative = 'g')
test$p.value

在本例中,我将测试应用于整个数据集。

我想在第 1 天应用它,然后在第 1 天和第 2 天等等,最后得到一个看起来像(虚构数据)的列表:
day p-value
1 0.02
2 0.03
3 0.3

如何在“天”的 for 循环中应用测试,但“累积”天数?

最佳答案

使用:

for (i in unique(df$day)) {
df$p.val[df$day == i] <- wilcox.test(df[df$day %in% 1:i,]$group_a, df[df$day %in% 1:i,]$group_b, alternative = 'g')$p.value
}

你得到:
> df
day group_a group_b p.val
1 1 4 3 0.7928919
2 1 2 4 0.7928919
3 2 3 2 0.7768954
4 2 1 2 0.7768954
5 2 1 2 0.7768954
6 3 4 2 0.7084401
7 3 3 3 0.7084401
8 3 2 4 0.7084401
9 3 4 5 0.7084401

或者当您只想获得汇总数据框中的三个 p 值时:
vec <- sapply(unique(df$day), 
function(i) wilcox.test(df[df$day %in% 1:i,]$group_a,
df[df$day %in% 1:i,]$group_b,
alternative = 'g')$p.value)

df2 <- data.frame(day = unique(df$day), p.val = vec)

这使:
> df2
day p.val
1 1 0.7928919
2 2 0.7768954
3 3 0.7084401

关于r - 在 for 循环中计算 p 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com