Rpy2 - 函数调用 - Cox比例风险

时间:2013-07-22 15:39:39

标签: python-2.7 rpy2 cox-regression

我的原始帖子目前无人接听且有些开放,可以找到here

我一直在试图弄清楚如何处理这个问题,并会将一些示例数据与我所处理的内容以及我当前的问题联系起来。

因此,我的数据,或者说是我的数据的简短示例,如下所示:

zipcode xcoord        ycoord    age_age6574 age_age75plus   sex_female  stage_late  death_death access  TruncTime
 51062  211253.4259 4733174.483     0           1               0             0         1           40      121
 51011  212255.621  4757938.874     0           1               0             0         0           43      121
 51109  215303.4471 4721047.303     0           1               1             1         0           21      121

此数据已经过预处理,以便存在虚拟/二元变量来代替实际类别 - age_age6574age_age75plus组成一个类别,sex_female另一个,stage_late另一个,death_death另一个。 Access是一个连续变量。 TruncTime将被视为离散时间变量。其中的变量将用作审查变量death_death

调用函数:

因此,要导入所有内容,我会执行以下操作:

 from rpy2 import robjects
 from rpy2.robjects.packages import importr
 from rpy2.robjects.vectors import DataFrame
 survival = importr('survival')
 coxph = survival.coxph
 Surv = survival.Surv
 theData = DataFrame.from_csvfile(newDataFile, header=True, sep=',')

所以一切都准备好做Cox比例风险 - 我想!

在R中,我可以这样做:

 coxph(formula = Surv(TruncTime, death_death) ~ age_age6574 + 
 age_age75plus + sex_female + stage_late + access, method = "breslow")

一切都很好。

当我在Python中做同样的事情时,使用我描述的所有内容,我得到的错误是:

这是函数调用:

  coxph(Surv('TruncTime', 'death_death'), 'age_age6574'+'age_age75plus'+'sex_female'+'stage_late'+'access', data = theData, method = 'breslow')

这是返回的错误:

  Error in (function (time, time2, event, type = c("right", "left", "interval",  : 
  Time variable is not numeric

所以,我想知道我在函数调用中做错了什么(为什么它会返回此错误)以及我如何正确调用它? 另外,我还想知道是否有办法将censoring从'0'更改为'1'(与删失变量的工作方式相反)?

:::: UPDATE ::::

所以我发现我的部分问题是指定要使用的列/属性。显然,rpy2需要列的数字索引来调用函数。所以:

 Surv(theData[9], theData[7])

表示coxph的生存部分。 Surv部分有效。

现在,我仍在努力研究如何指定其他所有内容。即:

- 如何指定用于构建模型的其他变量。使用+将这些变量链接在一起时出现问题。 ~也不像常规R那样有效。以下不起作用

  coxph(Surv(theData[9], theData[7])~theData[3]+theData[4]+theData[5]+theData[6]+theData[8], data = theData, method = 'breslow')

我也尝试用','替换'〜',例如:

  coxph(Surv(theData[9], theData[7]), theData[3]+theData[4]+theData[5]+theData[6]+theData[8], data = theData, method = 'breslow')

- 对于那些+肯定有问题,我不确定用~取代,实际上有效。

1 个答案:

答案 0 :(得分:1)

最好使用Formula

这会有用吗?

from rpy2.robjects import Formula 
coxph(Formula("Surv(TruncTime, death_death) ~ " \
              "age_age6574 + age_age75plus + sex_female + stage_late + access"),
      data = theData, method = 'breslow')