Coxph "X matrix deemed to be singular" 没有完美分类?

Coxph "X matrix deemed to be singular" without perfect classification?

我正在尝试使用来自 here 的包 sccs 进行自我控制的案例系列。这是一种统计方法,在时间进程中采用 "baseline" 和 "exposed" 个周期。患者生命中的一年。暴露期可能代表接触药物,测量的结果可能是药物的副作用,事实上,就我而言。

这个包基本上将数据格式化为基线和暴露风险的间隔。患者标识符 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,它是一个二进制变量。

环顾四周,我发现了几个来源,这些来源表明问题是 "perfect classification" 的情况,即我的一个变量完美地预测了另一个变量的存在。但是,使用 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

说明有一个很好的分布,没有完美的分类。

任何人都可以指出正确的方向以获取更多相关信息吗?我觉得我已经达到了我能够处理文档并在 Whosebug 上搜索这个问题的其他答案的极限。

非常感谢。

好的,大家好

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

来自 Farrington、Whitaker 和 Weldeselassie 自控案例系列研究,R 建模指南

Note that the main effect of the covariate is not included in the model formula, since it cannot be estimated in a SCCS model as it drops out of the likelihood.

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

很抱歉发布了一个我应该能够找到答案的问题,但希望这对遇到此问题的任何其他人都有用"problem"。