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

R语言mgcv包bam()使用betar族时出现运行报错求助

mgcv包bam()函数拟合Beta回归模型报错问题
  • 运行R语言mgcv包中的bam()函数时遇到无法自行排查解决的报错。经检索,14个月前已有用户在Stack Overflow反馈过同类错误,当时未形成公认解决方案,仅建议联系包作者Simon Wood。
  • 所用数据集体量过大,无法粘贴dput()输出结果。

全量数据运行情况

使用全量数据集运行如下模型时,出现系列警告:
模型设定细节:

  • 因变量为pt10
  • 纳入org.type、region作为分类自变量
  • 平滑项设置:year的全局平滑项、按org.type分组的year平滑项、按region分组的year平滑项
  • 拟合配置:方法选用fREML,分布族为logit链接的betar分布(eps=0.1),开启变量选择

对应运行代码:

library(mgcv)

m3 <- bam(pt10 ~ 
            org.type +
            region +
            s(year) + 
            s(year, by = org.type) +
            s(year, by = region), 
          data = error, 
          method = "fREML", 
          family = betar(link="logit", eps = 0.1),
          select = T)

运行返回的警告信息:

Warning messages:
1: In estimate.theta(theta, family, G$y, linkinv(eta), scale = scale1,  :
  step failure in theta estimation
2: In wt * LS :
  longer object length is not a multiple of shorter object length
3: In muth * (log(y) - log1p(-y)) :
  longer object length is not a multiple of shorter object length
4: In -lgamma(theta) + lgamma(muth) + lgamma(theta - muth) - muth *  :
  longer object length is not a multiple of shorter object length
5: In -lgamma(theta) + lgamma(muth) + lgamma(theta - muth) - muth *  :
  longer object length is not a multiple of shorter object length
6: In -lgamma(theta) + lgamma(muth) + lgamma(theta - muth) - muth *  :
  longer object length is not a multiple of shorter object length
7: In prior. weights * y :
  longer object length is not a multiple of shorter object length
8: In 2 * wt * (-lgamma(theta) + lgamma(muth) + lgamma(theta - muth) -  :
  longer object length is not a multiple of shorter object length

对照测试结果

为定位问题开展了3组对照测试:

  • 测试1:剔除数据集最后1行后运行相同模型,模型可正常运行。初步怀疑最后1行数据存在问题,但经检查未发现该行存在可触发上述警告的明显异常。对应代码:
m3 <- bam(pt10 ~ 
            org.type +
            region +
            s(year) + 
            s(year, by = org.type) +
            s(year, by = region), 
          data = error[1:20500,], 
          method = "fREML", 
          family = betar(link="logit", eps = 0.1),
          select = T)
  • 测试2:选取包含最后1行的小范围数据子集(20400:20501行)运行相同模型,模型可正常运行。对应代码:
m3 <- bam(pt10 ~ 
            org.type +
            region +
            s(year) + 
            s(year, by = org.type) +
            s(year, by = region), 
          data = error[20400:20501,], 
          method = "fREML", 
          family = betar(link="logit", eps = 0.1),
          select = T)
  • 测试3:选取包含最后1行的较大范围数据子集(10000:20501行)运行相同模型时,再次出现同类长度不匹配警告,且提示算法未收敛。对应代码与警告如下:
m3 <- bam(pt10 ~ 
            org.type +
            region +
            s(year) + 
            s(year, by = org.type) +
            s(year, by = region), 
          data = error[10000:20501,], 
          method = "fREML", 
          family = betar(link="logit", eps = 0.1),
          select = T)
Warning messages:
1: In wt * LS :
  longer object length is not a multiple of shorter object length
2: In muth * (log(y) - log1p(-y)) :
  longer object length is not a multiple of shorter object length
3: In -lgamma(theta) + lgamma(muth) + lgamma(theta - muth) - muth *  :
  longer object length is not a multiple of shorter object length
4: In -lgamma(theta) + lgamma(muth) + lgamma(theta - muth) - muth *  :
  longer object length is not a multiple of shorter object length
5: In -lgamma(theta) + lgamma(muth) + lgamma(theta - muth) - muth *  :
  longer object length is not a multiple of shorter object length
6: In prior.weights * y :
  longer object length is not a multiple of shorter object length
7: In 2 * wt * (-lgamma(theta) + lgamma(muth) + lgamma(theta - muth) -  :
  longer object length is not a multiple of shorter object length
8: In bgam.fit(G, mf, chunk.size, gp, scale, gamma, method = method,  :
  algorithm did not converge

求助

现征集该问题的可行解决建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:42:10