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

GAM建模变量规格错误:添加timepoints后模型报错求助

解决bam模型引入timepoints变量后的数组大小错误问题

原有正常运行的回归模型

model1 = bam(depend ~ s(indep, by = gender.x,bs = "tp") + 
    s(Age, by = gender.x, bs = "tp") + ti(Age, indep, by = gender.x) +
    gender.x + 
    s(Subject, bs = "re") + s(Age, Subject, bs = "re") + 
    s(ImagingCentreCity, bs = "re"), data = M2_SRS_Project,
  method = "fREML", family = "gaussian")

引入timepoints变量后的出错模型

model2 = bam(depend ~ s(Age, bs = "tp") + s(indep, bs = "tp") + 
    s(Age, indep, bs = "tp", by = gender.x) + gender.x + timepoints + 
    s(Subject, bs="re") + s(Age, Subject, bs = "fs", m = 1), 
  data = M2_SRS_Project)

报错信息

Erreur dans h(simpleError(msg, call)) :
erreur d'evaluation de l'argument 'x' lors de la selection d'une methode pour la fonction 'chol' : tableaux de tailles inadéquates

翻译:在为函数'chol'选择方法时评估参数'x'出错:数组大小不合适

timepoints变量统计

  • BL: 510
  • FU1: 162
  • FU2: 457
  • FU3: 509

解决建议

  1. 补全模型参数并调整随机效应结构
    model2遗漏了原模型中的method = "fREML"和family = "gaussian"参数,且将s(Age, Subject, bs = "re")改为了bs = "fs",先尝试换回原随机效应结构并补全参数:

    model2 = bam(depend ~ s(Age, bs = "tp") + s(indep, bs = "tp") + 
        s(Age, indep, bs = "tp", by = gender.x) + gender.x + timepoints + 
        s(Subject, bs="re") + s(Age, Subject, bs = "re"), 
      data = M2_SRS_Project, method = "fREML", family = "gaussian")
    
  2. 确认timepoints的编码格式
    确保timepoints是因子类型,若为字符型则转换:

    M2_SRS_Project$timepoints <- factor(M2_SRS_Project$timepoints, levels = c("BL", "FU1", "FU2", "FU3"))
    

    避免因编码混乱导致矩阵维度不匹配。

  3. 排查变量间的奇异矩阵问题

    • 检查每个Subject对应的timepoints分布,若存在Subject仅对应单个timepoint,可能导致随机效应矩阵奇异:
      table(M2_SRS_Project$Subject, M2_SRS_Project$timepoints)
      
    • 检查gender.x各水平下的样本量,若某一水平数据过少,s(Age, indep, bs = "tp", by = gender.x)的平滑项矩阵可能无法正常计算。
  4. 逐步简化模型定位问题
    从最简模型开始逐步添加变量,确定是哪个部分导致错误:

    # 第一步:基础模型
    model_test1 <- bam(depend ~ gender.x + timepoints, data = M2_SRS_Project, method = "fREML", family = "gaussian")
    # 第二步:添加单变量平滑项
    model_test2 <- bam(depend ~ gender.x + timepoints + s(Age, bs = "tp") + s(indep, bs = "tp"), data = M2_SRS_Project, method = "fREML", family = "gaussian")
    # 第三步:添加交互平滑项
    model_test3 <- bam(depend ~ gender.x + timepoints + s(Age, bs = "tp") + s(indep, bs = "tp") + s(Age, indep, bs = "tp", by = gender.x), data = M2_SRS_Project, method = "fREML", family = "gaussian")
    # 第四步:添加随机效应
    model_test4 <- bam(depend ~ gender.x + timepoints + s(Age, bs = "tp") + s(indep, bs = "tp") + s(Age, indep, bs = "tp", by = gender.x) + s(Subject, bs="re") + s(Age, Subject, bs = "re"), data = M2_SRS_Project, method = "fREML", family = "gaussian")
    

    每一步运行后检查是否报错,定位到具体出错的变量或项。

内容的提问来源于stack exchange,提问作者Ruben MIRANDA MARCOS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:40:18