我的原始帖子目前无人接听且有些开放,可以找到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_age6574
和age_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')
- 对于那些+
肯定有问题,我不确定用~
取代,
实际上有效。
答案 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')