我想建立对数秩检验的事后检验,将各个群体相互比较:
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,]
但我认为这是非常低效的;计算机需要为每个比较组的组合存储每个单独的数据对象。
答案 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)
好的,这是一个复制和粘贴解决方案。假设我们有df
个dataframe
个对象,其中我们有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),] )