# R MSM: unexpected identical transition rate matrices for different values of covariate; why?

I am fitting a continuous-time Markov model to a panel dataset using the R package MSM. Because I am interested in sex-differences in transition rates, I fit the model with covariate sex ("M" or "F") by running

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
)


After fitting the model I obtain the transition rate matrix using

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


These lines the exact same transition rate matrix. This is a bit unexpected to be, because when I use the hazard.msm function to extract hazard ratios, there are some differences between sexes ( are even statistically significant).

Does this make sense statistically?

• 1) Can you add some info about the form of the data set: panel_data? 2) Is the identical transition matrix for both covariates the same as the input matrix M? 3) Is there a reason for the choice of values 40000 and 1e6? Oct 15, 2021 at 16:28
• I have learned that the cause of this problem is that I didn't transform sex (which is a character vector) to a factor. In this case, msm() will silently ignore this covariate, which is why the Q matrices were the same. I had tried to specify covariates = ~ factor(sex) but this didn't help. TL;DR: categorical variables should be coded as factors before using these as covariates with the msm() function. Oct 16, 2021 at 8:24

I have learned that the cause of this problem is that I didn't transform sex (which is a character vector) to a factor. In this case, msm() will silently ignore this covariate, which is why the Q matrices were the same. I had tried to specify covariates = ~ factor(sex) but this didn't help.

TL;DR: categorical variables should be coded as factors before using these as covariates with the msm() function.