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
解决建议
补全模型参数并调整随机效应结构
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")确认timepoints的编码格式
确保timepoints是因子类型,若为字符型则转换:M2_SRS_Project$timepoints <- factor(M2_SRS_Project$timepoints, levels = c("BL", "FU1", "FU2", "FU3"))避免因编码混乱导致矩阵维度不匹配。
排查变量间的奇异矩阵问题
- 检查每个Subject对应的timepoints分布,若存在Subject仅对应单个timepoint,可能导致随机效应矩阵奇异:
table(M2_SRS_Project$Subject, M2_SRS_Project$timepoints) - 检查gender.x各水平下的样本量,若某一水平数据过少,
s(Age, indep, bs = "tp", by = gender.x)的平滑项矩阵可能无法正常计算。
- 检查每个Subject对应的timepoints分布,若存在Subject仅对应单个timepoint,可能导致随机效应矩阵奇异:
逐步简化模型定位问题
从最简模型开始逐步添加变量,确定是哪个部分导致错误:# 第一步:基础模型 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
相关产品推荐
相关产品推荐

