gpt4 book ai didi

r - 根据配对数据/每两行计算和过滤数据?

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

正在尝试设置 McNemar 测试,但我无法很好地编写代码(使用 R)

我的数据是成对的,有 1000 对长,所以我有一列指定对数,例如

 c(0 , 0 , 1, 1, 2, 2, 3, 3, 4, 4)

一列指定哪对成员在控制组或治疗组中(每对都有每个玩家,但顺序是随机的),例如:

c(0, 1, 1, 0, 1, 0, 0, 1, 0, 1)

还有一个名为 response 的列,其中任何一个成员或两个成员都不会收到如下响应:

c(0, 1, 1, 1, 1, 0, 0, 0, 0, 1)

我正在尝试创建一个计算结果的矩阵,例如:

a <- count of pairs in which both members received a response
b <- count of pairs in which the control only received a response
c <- treatment only response
d <- Neither response
matrix(c(a, b, c, d), 2, 2)

我可以运行哪些代码行来过滤我的数据以获得 a、b、c 和 d?我一直在尝试使用 tidyverse 包,所以它可能是 base R 或 tidyverse

最佳答案

tidyverse/dplyr 的这种方法有效:

1.加载您的数据:

library(tidyverse)

pair <- c(0 , 0 , 1, 1, 2, 2, 3, 3, 4, 4)
treat <- c(0, 1, 1, 0, 1, 0, 0, 1, 0, 1)
response <- c(0, 1, 1, 1, 1, 0, 0, 0, 0, 1)
data <- data.frame(pair, treat, response)

<强>2。计算你想要的计数:

d <- data %>% group_by(pair) %>%
mutate(total_response = sum(response)) %>%
ungroup() %>% mutate(a = case_when(
total_response==2 ~ 1,
TRUE ~ 0),
b = case_when(
total_response==1 & treat==0 & response == 1 ~ 1,
TRUE ~ 0),
c = case_when(
total_response==1 & treat==1 & response == 1 ~ 1,
TRUE ~ 0),
d = case_when(
total_response == 0 ~ 1,
TRUE ~ 0)) %>% group_by(pair) %>%
summarise(a = max(a),
b = max(b),
c = max(c),
d = max(d)) %>%
ungroup() %>%
summarise(a = sum(a),
b = sum(b),
c = sum(c),
d = sum(d))

<强>3。您的矩阵:

matrix(c(d$a, d$b, d$c, d$d), 2, 2)

<强>4。解释计算:

  1. 首先,您对按对分组的回复求和;
  2. 然后,你解码,当有两个成对的响应时,a=1;当一个响应和控制响应时,b=1;当一个 react 和治疗 react 时,c=1;当没有反应时,d=1;
  3. 然后,您再次按对分组并获得每个字母值的最大值,因此您只能得到一个字母值对;
  4. 最后,您取消分组并对每个变量求和(相当于计算每个变量的个数);

关于r - 根据配对数据/每两行计算和过滤数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64998642/

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