使用R语言mstate包做多状态分析时msprep报错的解决求助
mstate包msprep函数报错:
incorrect number of dimensions 的解决方案 使用mstate包的msprep函数构建多状态分析数据框时,出现错误:Error in time[, -startings] : incorrect number of dimensions,已确认变量存在、拼写正确、无缺失值,转移矩阵定义符合预期,起始状态的time和status设为NA也符合官方文档要求。以下是可行的解决方案:
检查数据集类型,转换为普通data.frame:
如果数据集是tidyverse的tibble格式,部分旧版本mstate包对其兼容性不佳,可转换为普通data.frame后重试:d <- as.data.frame(d) # 重新运行msprep dlong <- msprep(time = c(NA, "aki_1_time", "rec_1_time", "aki_2_time", "rec_2_time", "aki_3_time", "rec_3_time", "aki_4_time", "rec_4_time", "death_time"), status = c(NA, "aki_1_status", "rec_1_status", "aki_2_status", "rec_2_status", "aki_3_status", "rec_3_status", "aki_4_status", "rec_4_status", "death_status"), data = d, id = "subject", trans = tmat)修改起始状态的time和status参数:
将起始状态的time设为0(代表初始时间点),status设为1(代表所有个体均进入起始状态),替换原有的NA:dlong <- msprep(time = c(0, "aki_1_time", "rec_1_time", "aki_2_time", "rec_2_time", "aki_3_time", "rec_3_time", "aki_4_time", "rec_4_time", "death_time"), status = c(1, "aki_1_status", "rec_1_status", "aki_2_status", "rec_2_status", "aki_3_status", "rec_3_status", "aki_4_status", "rec_4_status", "death_status"), data = d, id = "subject", trans = tmat)手动构建转移矩阵:
避免transMat的list输入可能引发的索引问题,手动构建转移矩阵:# 创建10*10的空转移矩阵,命名状态 tmat <- matrix(NA, nrow = 10, ncol = 10, dimnames = list( c("start", "aki_1", "rec_1", "aki_2", "rec_2", "aki_3", "rec_3", "aki_4", "rec_4", "death"), c("start", "aki_1", "rec_1", "aki_2", "rec_2", "aki_3", "rec_3", "aki_4", "rec_4", "death") )) # 定义各状态的允许转移及转移编号 tmat["start", c("aki_1", "death")] <- c(1, 2) tmat["aki_1", c("rec_1", "death")] <- c(3, 4) tmat["rec_1", c("aki_2", "death")] <- c(5, 6) tmat["aki_2", c("rec_2", "death")] <- c(7, 8) tmat["rec_2", c("aki_3", "death")] <- c(9, 10) tmat["aki_3", c("rec_3", "death")] <- c(11, 12) tmat["rec_3", c("aki_4", "death")] <- c(13, 14) tmat["aki_4", c("rec_4", "death")] <- c(15, 16) tmat["rec_4", "death"] <- 17 # 重新运行msprep dlong <- msprep(time = c(NA, "aki_1_time", "rec_1_time", "aki_2_time", "rec_2_time", "aki_3_time", "rec_3_time", "aki_4_time", "rec_4_time", "death_time"), status = c(NA, "aki_1_status", "rec_1_status", "aki_2_status", "rec_2_status", "aki_3_status", "rec_3_status", "aki_4_status", "rec_4_status", "death_status"), data = d, id = "subject", trans = tmat)
内容的提问来源于stack exchange,提问作者davidbuis
相关产品推荐
相关产品推荐

