对于循环 - 生存分析

时间:2018-02-11 03:34:59

标签: r survival-analysis

我试图对特定癌症类型中的数百个基因进行生存分析。我有2个数据帧(m2和m3)。 m2包括样品ID以及总体存活(样品活着多长时间)和状态(如果样品存活或死亡)的列。在m3中,我有一列用于样本ID,列2:256是不同的基因。如果每个样本在该基因中具有突变,则用1表示,如果不是,则用0表示。我试图确定哪些基因在比较它们在存活中的作用时具有统计学意义。我正在尝试运行for循环来运行此survdiff函数并生成p值,但不断收到错误。

for (x in 2:ncol(m3)) {survdiff(Surv(m2$Overall.Survival, m2$Status) ~ x, data = m3)}

我不断得到的错误是:

Error in model.frame.default(formula = Surv(m2$Overall.Survival, m2$Status) ~  : 
  variable lengths differ (found for 'x')

1 个答案:

答案 0 :(得分:0)

您有“x”作为索引,并在公式的RHS上使用它。公式的RHS不能一次接受一个数字并对它做任何有用的事情。 RHS应该是列的名称,此外,它应该是语言对象的形式。做htis的一种方法是使用as.formula,但我提出的方式对我来说似乎有点简单。您显然希望使用“x”作为列的索引,因此这段代码可能会提供您想要的内容:

for (x in names(2:ncol(m3)) ) { print(  paste( x, 
        survdiff(Surv(Overall.Survival, Status) ~ ., 
                 data = cbind( m2[ c('Overall.Survival', 'Status')] , m2[ x])

                                     )$chisq) }

将“x”移动到选择单个列的字符变量的角色,然后RHS上的“点”选择数据参数中不在LHS上的任何内容。

我添加了print,因为在R for循环函数结果中完成的事情不会传递到全局环境。循环本身返回NULL,只有1)赋值或2)print或3)cat你会看到结果。

这几乎肯定是在统计的基础上做错了,我认为你应该咨询一位统计学家,以帮助理解与“多重比较”相关的严重陷阱。