R公式:如何使用公式将计算约束为两组?

时间:2013-06-27 08:54:19

标签: r

我想建立对数秩检验的事后检验,将各个群体相互比较:

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 )

我知道我可以从mydfSurv对象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,]

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

3 个答案:

答案 0 :(得分: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)))
    }
}

答案 1 :(得分:2)

好的,这是一个复制和粘贴解决方案。假设我们有dfdataframe个对象,其中我们有IV分类变量length(levels(df$IV))级别,DF对象类型Surv和我们想在每对组之间进行成对的对数秩检验

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

最后一个表达式返回结果

答案 2 :(得分:1)

这样的东西?

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