【问题标题】:R MSM package: the Q matrix is the same for different covariate values, even though transition rates differR MSM 包:Q 矩阵对于不同的协变量值是相同的,即使转换率不同
【发布时间】:2021-10-15 11:53:13
【问题描述】:

我正在使用 R 包 MSM 将连续时间马尔可夫模型拟合到面板数据集。因为我对转换率的性别差异感兴趣,所以我通过运行来拟合具有协变量 sex(“M”或“F”)的模型

model_object <- 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 函数提取风险比时,性别之间存在一些差异。有些结果甚至具有统计学意义。

我是不是用错了函数?

【问题讨论】:

    标签: r markov-models


    【解决方案1】:

    这可能是因为您的sex 变量被编码为character 而不是factor

    只需在运行模型之前将sex 转换为因子即可:

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

    这是一个可重现的示例来说明这个棘手的 msm 包行为:

    让我们首先在cav 数据集上创建一个性别变量character (sex.chr) 和factor (sex.fct)

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

    我们也必须定义初始的qmatrix

    twoway4.q <- 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))
    

    如果您使用sexcharacter 版本作为协变量,您将得到两个协变量的相同结果(协变量基本上被忽略)

    cav.msm.chr <- 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 <- 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  
    ```
    

    【讨论】:

    • 非常感谢您的回答。这确实是问题的根源。我之前实际上曾尝试指定covariates = ~ factor(sex),但没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多