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
相关产品推荐
相关产品推荐

