Coxph“X矩阵被认为是单数”而没有完美的分类?

时间:2018-06-11 12:24:15

标签: r cox-regression

我正在尝试使用here中的包sccs来执行自我控制的案例系列。这是一种统计方法,它在例如时间段中采用“基线”和“暴露”时期。一年的病人生命。暴露的时期可能代表药物的暴露,测量的结果可能是药物的副作用,事实上,在我的情况下。

该软件包基本上将数据格式化为基线和暴露风险的间隔。患者标识indivL(因子),interval(整数,天数),exposure状态(0/1),event状态(0/1)。然后,它将此数据作为表单模型提供给survival::clogit

event ~ exposure + strata(indivL) + offset(log(interval))

提供给clogit的数据是以下形式的数据框:

   indivL event eventday  lower  upper interval age   exposure  indiv aevent astart   aend drugtype
 * <fct>  <dbl>    <int>  <dbl>  <dbl>    <dbl> <fct> <fct>    <dbl>  <dbl>  <dbl>  <dbl>     <dbl>
 1 1         0.    22361 22219. 22252.      34. 1     0           1. 22361. 22219. 22460.        0.
 2 1         0.    22361 22253. 22260.       8. 1     1           1. 22361. 22219. 22460.        0.
 3 1         1.    22361 22261. 22460.     200. 1     0           1. 22361. 22219. 22460.        0.
 4 2         0.    22401 22219. 22252.      34. 1     0           1. 22401. 22219. 22460.        0.
 5 2         0.    22401 22253. 22260.       8. 1     1           1. 22401. 22219. 22460.        0.
 6 2         1.    22401 22261. 22460.     200. 1     0           1. 22401. 22219. 22460.        0.
 7 3         0.    31071 30834. 30863.      30. 1     0           2. 31071. 30834. 31075.        0.
 8 3         0.    31071 30864. 30871.       8. 1     1           2. 31071. 30834. 31075.        0.
 9 3         1.    31071 30872. 31075.     204. 1     0           2. 31071. 30834. 31075.        0.
10 4         1.      261   207.   356.     150. 1     0           3.   261.   207.   425.        0.
# ... with 1,211,460 more rows

在使用上述内容时,我的模型很适合给我一个结果。但是,我想添加其他自变量。这些是二进制分类,我已经尝试过它们作为0/1整数和2级因子。一个例子是drugtype。在这种情况下,模型采用以下形式:

event ~ exposure + drugtype + strata(indivL) + offset(log(interval))

我的错误是:

Warning message:
In coxph(formula = Surv(rep(1, 176241L), event) ~ exposure + drugtype +  :
  X matrix deemed to be singular; variable 2

我的模特是:

--SNIP--
coxph(formula = Surv(rep(1, 176241L), event) ~ exposure + drugtype + 
     strata(indivL) + offset(log(interval)), data = chopdat, method = "exact")

  n= 176049, number of events= 58602 
   (192 observations deleted due to missingness)

             coef exp(coef) se(coef)     z            Pr(>|z|)    
exposure1 0.70760   2.02912  0.01662 42.57 <0.0000000000000002 ***
drugtype       NA        NA  0.00000    NA                  NA    
--SNIP--

如您所见,它不喜欢drugtype,它是一个二进制变量。

环顾四周后,我发现了几个来源,这些来源表明问题是“完美分类”的情况,即我的一个变量完美地预测了另一个的存在。但是,使用xtabs()我得到:

> xtabs(~drugtype + event, data = chopdat)

         event
 drugtype      0      1
        0 778306 388279
        1  29344  14625

> xtabs(~ exposure + event, data = chopdat)

        event
exposure      0      1
       0 427482 380101
       1 380788  23113

> xtabs(~ drugtype + exposure, data = chopdat)

       drugtype
exposure      0      1
       0 777655  29308
       1 388930  14661

建议分布良好,没有完美的分类。

有人能指出我正确的方向,以获得更多相关信息吗?我觉得我已经达到了我可以用文档做的极限,并在StackOverflow上搜索这个问题的其他答案。

非常感谢。

1 个答案:

答案 0 :(得分:0)

对,你好。

非常感谢@Mike试图帮助我。我找到了这种行为的解释,这是SCCS建模方法的一个怪癖,而不是与clogit本身有关。

来自Farrington,Whitaker和Weldeselassie 自我控制案例系列研究,R 的建模指南:

  

请注意,协变量的主要影响不包括在模型公式中,因为它不能在SCCS模型中估计,因为它会降低可能性。

因此,主效应无法估计,因此返回为NA

对于发布我应该能够找到答案的问题表示歉意,但希望这会对遇到此“问题”的其他人有用。