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"。
我正在尝试使用来自 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"。