0

我想为对数秩测试构建事后测试,将各个组相互比较:

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,]

但我认为这是非常低效的;计算机需要为比较组的每个组合存储每个单独的数据对象。

4

3 回答 3

2

在(嵌套)循环内使用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)))
    }
}
于 2013-06-27T09:03:56.587 回答
2

好的,这是一个复制和粘贴解决方案。假设我们有df一个dataframe对象,其中我们有带有级别的IV分类变量,以及类型的对象,我们希望在每对组之间执行成对对数秩检验length(levels(df$IV))DFSurv

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]]))
    }
)

最后一个表达式返回结果

于 2013-06-27T09:38:05.487 回答
1

像这样的东西?

survdiff(DV ~ IV, data=mydf[ as.numeric(mydf$IV) %in% c(2,7),] )

于 2013-06-27T08:59:44.243 回答