我试图对特定癌症类型中的数百个基因进行生存分析。我有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')
答案 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
你会看到结果。
这几乎肯定是在统计的基础上做错了,我认为你应该咨询一位统计学家,以帮助理解与“多重比较”相关的严重陷阱。