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

mgcv包bam模型concurvity检测报错:奇异矩阵问题排查

mgcv::bam模型共曲率检测时奇异矩阵报错问题

问题描述

我用mgcv包构建的bam模型已经收敛,但调用concurvity()函数检测共曲率时,反复触发以下奇异矩阵报错:

Error in forwardsolve(t(Rt), t(R[1:r, , drop = FALSE])) : singular matrix in 'backsolve'. First zero in diagonal [14]

我的数据集是1500行×23列,取子集数据无法复现该错误。尝试过参考相关问题解决方案,以及调整concurvity()的full参数为TRUE/FALSE,均无效。只有移除随机效应项s(Season, fCYR, bs = "re")后报错消失,但这个效应是准确体现调查设计的重要部分(用于捕捉年内季节内观测的相似性),我不清楚报错原因,也不确定该如何处理。

模型代码及拟合输出

模型定义代码

library(mgcv)

mod <- bam(num ~ 
           
           # Parametric terms
           CYR.std * Season +
             
           # Habitat covariates
           sed_depth * ave_hw +
           total_ave_ma +
           s(ave_tt) +
           
           # Structural components
           s(Site, bs = "re") +
           s(Site, fCYR, bs = "re") +
           s(Site, CYR.std, bs = "re") +
           s(Season, fCYR, bs = "re") +
           
           offset(log(area_sampled)), 

         data = toad, 
         method = 'fREML',
         discrete = TRUE,
         family = poisson,
         control = list(trace = TRUE))

模型拟合过程输出

Setup complete. Calling fit
Deviance = 226.280118812246 Iterations - 1
Deviance = 502.577417444367 Iterations - 2
Deviance = 576.624536857 Iterations - 3
Deviance = 685.39118817115 Iterations - 4
Deviance = 714.899394181739 Iterations - 5
Deviance = 735.575311982761 Iterations - 6
Deviance = 734.653307725508 Iterations - 7
Deviance = 735.874682895636 Iterations - 8
Deviance = 736.673618482559 Iterations - 9
Deviance = 736.861294501416 Iterations - 10
Deviance = 736.981664035411 Iterations - 11
Deviance = 737.00995853621 Iterations - 12
Deviance = 737.028133131768 Iterations - 13
Deviance = 737.032400712599 Iterations - 14
Deviance = 737.035137664603 Iterations - 15
Deviance = 737.035779699487 Iterations - 16
Deviance = 737.03619105456 Iterations - 17
Deviance = 737.036287496242 Iterations - 18
Deviance = 737.036349254884 Iterations - 19
Fit complete. Finishing gam object.
          user.self sys.self elapsed
initial        0.02     0.00    0.01
gam.setup      0.03     0.00    0.03
pre-fit        0.00     0.00    0.00
fit            7.03     0.34    7.39
finalise       0.00     0.00    0.00

共曲率检测报错

执行以下代码:

concurvity(mod)

触发报错:

Error in forwardsolve(t(Rt), t(R[1:r, , drop = FALSE])) : singular matrix in 'backsolve'. First zero in diagonal [14]

更新内容

移除随机效应s(Season, fCYR, bs = "re")后问题解决,但我不理解原因。如果这个效应是准确体现调查设计的重要部分,我该如何处理?这是否属于Cross Validated的问题范畴?

模型方差成分估计

> gratia::variance_comp(mod)
# # A tibble: 5 × 5
component        variance std_dev lower_ci upper_ci
<chr>               <dbl>   <dbl>    <dbl>    <dbl>
1 s(ave_tt)        0.000266  0.0163  0.00471   0.0564
2 s(fSite)         0.0817    0.286   0.0658    1.24  
3 s(fCYR,fSite)    0.839     0.916   0.786     1.07  
4 s(CYR.std,fSite) 0.00433   0.0658  0.0427    0.101 
5 s(fSeason,fCYR)  0.667     0.816   0.565     1.18 

单条示例数据

> x <- toad[sample(nrow(toad), 1), ]
> dput(x)
structure(list(CYR = 2010L, Season = structure(2L, levels = c("DRY", 
"WET"), class = "factor"), Site = structure(34L, levels = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", 
"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", 
"47"), class = "factor"), area_sampled = 3L, Latitude = 25.48503, 
    Longitude = -80.33982, num = 0L, den = 0, occur = 0L, temp = 32.3, 
    DO = 2.7, sal = 28.78, group = "polyhaline", water_depth = 85L, 
    sed_depth = 54, ave_sav = 36, ave_tt = 0, ave_hw = 22.5, 
    ave_sf = 0, ave_rm = 0, total_ave_ma = 0.1, fCYR = structure(4L, levels = c("2007", 
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", 
"2016", "2017", "2018", "2019", "2020", "2021", "2022"), class = "factor"), 
    CYR.std = 3L), row.names = 130183L, class = "data.frame")

内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:29:52