【发布时间】:2014-12-04 12:09:36
【问题描述】:
我想知道是否有一种方法可以将比较的逻辑矩阵转换为多重比较测试中使用的字母符号。如multcomp::cld。
我的数据是这样的:
test_data <- data.frame(mean=c(1.48, 1.59, 1.81,1.94),CI_lower=c(1.29,1.38,1.54, 1.62),CI_upper=c(1.56,1.84, 2.3, 2.59))
mean CI_lower CI_upper
1 1.48 1.29 1.56
2 1.59 1.38 1.84
3 1.81 1.54 2.30
4 1.94 1.62 2.59
我感兴趣的是一个表示哪些条目具有重叠 CI 以获得如下所示的最终结果:
final <- data.frame(mean=c(1.48, 1.59, 1.81,1.94),CI_lower=c(1.29, 1.38,1.54, 1.62),CI_upper=c(1.56,1.84, 2.3, 2.59),letters = c("a","ab","ab","b"))
mean CI_lower CI_upper letters
1 1.48 1.29 1.56 a
2 1.59 1.38 1.84 ab
3 1.81 1.54 2.30 ab
4 1.94 1.62 2.59 b
我做了一个可怜的尝试,结果是这样的:
same <- outer(test_data$CI_lower, test_data$CI_upper,"-")
same <- same<0
same <- lower.tri(same, diag = FALSE) & same
same_ind <- which(same,arr.ind = T)
groups <- as.list(as.numeric(rep(NA,nrow(test_data))))
for(i in 1:nrow(same_ind)){
group_pos <- as.numeric(same_ind[i,])
for(i2 in group_pos){
groups[[i2]] <- c(groups[[i2]],i)
}
}
letters_notation <- sapply(groups,function(x){
x <- x[!is.na(x)]
x <- letters[x]
x <- paste0(x,collapse="")
return(x)
}
)
这将给出:
mean CI_lower CI_upper letters
1 1.48 1.29 1.56 ab
2 1.59 1.38 1.84 acd
3 1.81 1.54 2.30 bce
4 1.94 1.62 2.59 de
关于如何做到这一点的任何想法?
【问题讨论】:
-
不确定我是否理解所需的输出
-
我想要什么或它意味着什么?我需要的是 c("a","ab","ab","b")。这意味着前 3 个条目都有重叠的 CI。最后 3 个有重叠的 CI。虽然第一个和最后一个条目不重叠。
-
我有一个可能非常有效的解决方案,但不是您想要的输出,但是您将能够确定重叠路径,不确定是否发布它
-
那么为什么第一个条目是“a”而不是“ab”或“ac”?为什么您将双字母分配给一些重叠的项目而不是其他项目?
-
我觉得你需要看看igraph
标签: r