[英]R formula: how to constrain calculations to two groups using formula?
我想为日志等级测试建立事后测试,以比较各个组:
library(survival)
survdiff(DV ~ IV, data=mydf)
有什么办法可以做这样的事情(例如,将第2组与第7组进行比较):
survdiff(DV ~ I(if(as.numeric(IV) == 2) {1} else {if(as.numeric(IV) == 7) {2} else {NA}} ), data=mydf )
我知道我可以从mydf
和Surv
对象DV
过滤掉不需要的行
df2vs7<-mydf[as.numeric(mydf$IV)==2 | as.numeric(mydf$IV)==7,]
DV2vs7<-DV[as.numeric(mydf$IV)==2 | as.numeric(mydf$IV)==7,]
但是我认为它效率很低; 计算机将需要为比较组的每种组合存储每个单独的数据对象。
使用subset
参数在(嵌套)循环内survdiff
。 您可能必须对循环进行调整,以避免出现一对一的错误,但是您明白了。
l <- list()
n <- <no. of groups>
mydf$IV <- as.numeric(mydf$IV)
for(i in seq_len(n - 1))
{
for(j in seq(i + 1, to=n, by=1))
{
l <- c(l, survdiff(DV ~ factor(IV), mydf, subset=IV %in% c(i, j)))
}
}
好的,这是一个复制粘贴解决方案。 假设我们有一个df
dataframe
对象,其中有IV
个具有length(levels(df$IV))
级的分类变量和Surv
类型的DF
对象,并且我们想在每对组之间执行成对对数秩检验
library(gregmisc)
levels<-sort(unique(as.numeric((mydf$IV))))
groups<-combinations(length(levels),2,levels)
#or if we assume that levels produced by as.numeric(mydf$IV) are in sequence 1:n, we can use more efficient:
#groups<-combinations(length(levels(df$IV)),2)
library(plyr)
alply(groups, 1,
function(pair) {
survdiff(DV ~ factor(IV), mydf, subset=IV %in% c(pair[[1]], pair[[2]]))
}
)
最后一个表达式返回结果
像这样吗
survdiff(DV ~ IV, data=mydf[ as.numeric(mydf$IV) %in% c(2,7),] )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.