Пакет R MSM: матрица Q одинакова для разных значений ковариации, хотя скорости перехода различаются

#r #markov-models

Вопрос:

Я подгоняю марковскую модель непрерывного времени к набору данных панели, используя пакет R. MSM Поскольку меня интересуют половые различия в скорости перехода, я подгоняю модель с ковариацией sex («M» или «F»), запустив

 model_object lt;- msm(  formula = state ~ nr_years,   subject = id_var,  qmatrix = M, # matrix encoding allowed transitions between states  data = panel_data,  covariates = ~ sex,  control = list(fnscale = 40000, maxit = 1e6) # got these from the help pages )  

После подгонки модели я получаю матрицу скорости перехода, используя

 qmatrix.msm(model_object, covariates = list(sex = "M")) qmatrix.msm(model_object, covariates = list(sex = "F"))  

В этих строках точно такая же матрица скорости перехода. Это немного неожиданно, потому что, когда я использую hazard.msm функцию для извлечения коэффициентов опасности, существуют некоторые различия между полами. Некоторые результаты даже статистически значимы.

Я неправильно использую функцию?

Ответ №1:

Вероятно, это связано с тем, что ваша sex переменная закодирована как a character вместо a factor .

Просто преобразование sex в коэффициент перед запуском модели должно помочь здесь:

panel_data$sex lt;- factor(panel_data$sex)

Вот воспроизводимый пример, иллюстрирующий это сложное msm поведение пакета:

Давайте сначала создадим переменную пола в cav наборе данных как character ( sex.chr ) и как factor ( sex.fct )

 library(msm) library(dplyr)  cav2 lt;-  cav %gt;%  mutate(  sex.chr = ifelse(sex == 1, 'M', 'F'),  sex.fct = factor(sex.chr)  )  

мы также должны определить начальную qmatrix :

 twoway4.q lt;- rbind(c(-0.5, 0.25, 0, 0.25), c(0.166, -0.498, 0.166, 0.166),  c(0, 0.25, -0.5, 0.25), c(0, 0, 0, 0))  

Если вы используете character версию sex as covariate, вы получите одинаковые результаты для обеих ковариат (ковариаты в основном игнорируются).

 cav.msm.chr lt;- msm( state ~ years, subject = PTNUM, data = cav2,  qmatrix = twoway4.q, deathexact = 4, covariates = ~ sex.chr,   control = list ( trace = 2, REPORT = 1 ) )  qmatrix.msm(cav.msm.chr, covariates = list(sex.chr = "M"))  
   State 1 State 2 State 3  State 1 -0.17747 (-0.19940,-0.15795) 0.13612 ( 0.11789, 0.15718) 0  State 2 0.21992 ( 0.16100, 0.30040) -0.60494 (-0.70972,-0.51563) 0.33409 ( 0.26412, 0.42261) State 3 0 0.12913 ( 0.07728, 0.21578) -0.41050 (-0.52552,-0.32065) State 4 0 0 0   State 4  State 1 0.04135 ( 0.03245, 0.05268) State 2 0.05092 ( 0.01808, 0.14343) State 3 0.28137 ( 0.21509, 0.36808) State 4 0   
 qmatrix.msm(cav.msm.chr, covariates = list(sex.chr = "F"))  
 State 1 State 2 State 3  State 1 -0.17747 (-0.19940,-0.15795) 0.13612 ( 0.11789, 0.15718) 0  State 2 0.21992 ( 0.16100, 0.30040) -0.60494 (-0.70972,-0.51563) 0.33409 ( 0.26412, 0.42261) State 3 0 0.12913 ( 0.07728, 0.21578) -0.41050 (-0.52552,-0.32065) State 4 0 0 0   State 4  State 1 0.04135 ( 0.03245, 0.05268) State 2 0.05092 ( 0.01808, 0.14343) State 3 0.28137 ( 0.21509, 0.36808) State 4 0   

Но использование факториальной версии sex даст вам ожидаемые результаты

 cav.msm.fct lt;- msm( state ~ years, subject = PTNUM, data = cav2,  qmatrix = twoway4.q, deathexact = 4, covariates = ~ sex.fct,   control = list ( trace = 2, REPORT = 1 )   qmatrix.msm(cav.msm.fct, covariates = list(sex.fct = "M"))  
 State 1 State 2  State 1 -1.234e-01 (-1.750e-01,-8.693e-02) 7.667e-02 ( 4.630e-02, 1.270e-01) State 2 2.838e-01 ( 1.139e-01, 7.075e-01) -6.435e-01 (-1.115e 00,-3.714e-01) State 3 0 1.416e-01 ( 1.852e-02, 1.083e 00) State 4 0 0   State 3 State 4  State 1 0 4.668e-02 ( 2.727e-02, 7.989e-02) State 2 3.597e-01 ( 1.804e-01, 7.170e-01) 1.938e-05 ( 3.702e-66, 1.014e 56) State 3 -8.207e-01 (-1.587e 00,-4.244e-01) 6.791e-01 ( 3.487e-01, 1.323e 00) State 4 0   
 qmatrix.msm(cav.msm.fct, covariates = list(sex.fct = "F"))  
 State 1 State 2 State 3  State 1 -0.17747 (-0.19940,-0.15795) 0.13612 ( 0.11789, 0.15718) 0  State 2 0.21992 ( 0.16100, 0.30040) -0.60494 (-0.70972,-0.51563) 0.33409 ( 0.26412, 0.42261) State 3 0 0.12913 ( 0.07728, 0.21578) -0.41050 #=(-0.52552,-0.32065) State 4 0 0 0   State 4  State 1 0.04135 ( 0.03245, 0.05268) State 2 0.05092 ( 0.01808, 0.14343) State 3 0.28137 ( 0.21509, 0.36808) State 4 0  ```  

Комментарии:

1. Большое вам спасибо за ваш ответ. Это действительно было причиной проблемы. Я действительно пытался уточнить covariates = ~ factor(sex) это раньше, но безуспешно.