首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >For Loop -生存分析

For Loop -生存分析
EN

Stack Overflow用户
提问于 2018-02-11 11:34:59
回答 1查看 545关注 0票数 0

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

代码语言:javascript
复制
for (x in 2:ncol(m3)) {survdiff(Surv(m2$Overall.Survival, m2$Status) ~ x, data = m3)}

我一直得到的错误是:

代码语言:javascript
复制
Error in model.frame.default(formula = Surv(m2$Overall.Survival, m2$Status) ~  : 
  variable lengths differ (found for 'x')
EN

回答 1

Stack Overflow用户

发布于 2018-02-12 13:59:56

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

代码语言:javascript
复制
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才能看到结果。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48728029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档