You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:19:53