R中coxph函数中使用的公式对象的说明

时间:2013-07-22 15:57:32

标签: r package formula

在生存分析方面,我是一个完整的新手。我正在开发一个项目,要求我在“生存”包中使用coxph函数,但是我遇到了麻烦,因为我不明白公式对象需要什么。

我能找到的关于该功能的大多数描述如下:

“一个公式对象,在〜运算符的左侧有响应,在右边有条件。响应必须是Surv函数返回的生存对象。”

我知道操作员左边需要什么,问题是该功能在右侧需要的是什么。

以下是我的数据的链接(实际数据集要大得多,为了简洁,我只显示前20个数据点):

http://imageshack.com/scaled/large/560/7n80.png

简短的数据解释:

-Row 1 is the header

-Each row after that is a separate patient

-The first column is the age of the patient at the time of the study

-columns 2 through 14 (headed by x2-x13), and 19 (x18) and 20 (x19) are covariates such as race, relationship status, medical conditions that take on either true (1) or false (0) values. 

-columns 15 (x14) through 18 (x17) are covariates such as tumor size, which take on whole number values greater than 0.

-The second to last column "sur" is the number of months survived, and "index" is whether or not that is a right-censored time (1 for true, 0 for false). 

鉴于这些数据,我需要绘制一个Cox比例危险曲线,但由于公式对象的右侧错误,我最终得出的图不正确。

这是我的代码,“temp4”是我给数据表的名称:

library("survival")
temp4 <- read.table("~/data.txt", header=TRUE)
seerCox <- coxph(Surv(sur, index)~ temp4$x1 + temp4$x2 + temp4$x3 + temp4$x4 + temp4$x5 + temp4$x6 + temp4$x7 + temp4$x8 + temp4$x9 + temp4$x10 + temp4$x11 + temp4$x12 + temp4$x13 + temp4$x14 + temp4$x15 + temp4$x16 + temp4$x17 + temp4$x18 + temp4$x19, data=temp4, singular.ok=TRUE)
plot(survfit(seerCox), main= "Cox Estimate", mark.time=FALSE, ylab="Probability", xlab="Survival Time in Months", col=c("blue", "red", "green"))

我还应该注意到,我已经尝试用数字1替换您所看到的右侧,一段时间,将其留空。这些方法产生kaplan-meier曲线。

以下是控制台输出:

http://imageshack.com/scaled/large/703/px7.png

每个新行都是根据我过滤数据的方式产生的错误示例。 (即如果我只包括年龄大于85岁的患者等)

如果有人能够解释它的工作原理,我们将不胜感激。

PS-我已经搜索了一周以上的解决方案,我在这里寻求帮助作为最后的手段。

1 个答案:

答案 0 :(得分:1)

如果您还使用数据参数,则不应使用前缀temp$。提供数据参数的整个目的是允许删除公式中的那些。

seerCox <- coxph( Surv(sur, index) ~ . , data=temp4, singular.ok=TRUE)

以上内容将使用temp data.frame中的所有x变量。这将只使用前3:

seerCox <- coxph( Surv(sur, index) ~ x1+x2+x3 , data=temp4)

警告的确切含义取决于数据(正如您在某种意义上已经通过不同子集生成不同种类的共线性而得到例证。)如果您有共线列,那么您在模型矩阵的反演中会得到奇点,该软件将尝试删除带有警告的别名列。这实际上告诉您,您没有足够的数据来构建您正在尝试的大型模型。通过table电话探索这种可能性通常很有用。

底线:这不是您的公式构造的问题,因为这是一个问题,即不了解所选方法与您组装的数据集的限制。您需要更加谨慎地定义目标。这项研究的最高优先级是什么?你真的需要每个变量吗?是否有可能将这些匿名变量中的一些汇总到具有临床意义的类别,如诊断类别或合并症?