我在使用betareg
包时遇到了问题。当我尝试运行模型m1
时,模型不收敛。然而,当我将y
四舍五入为8位数时,它工作得很好(127次迭代)。请参阅下面的代码。有人知道为什么这个微小的变化会对模型产生如此大的影响吗?
代码如下:
#install.packages("betareg", dependencies=TRUE)
library(betareg)
data <- data.frame("x" = c(194, 194, 194, 73, 73, 73, 105, 105, 105, 222, 222, 222, 0, 0, 0, 0, 0, 0),
"y" = c(0.9717500000, 0.9191161111, 0.9456172222, 0.0464116667, 0.0413683333, 0.034105555, 0.9178222222, 0.9661872222, 0.9619844444,
0.9576777778, 0.9710794444, 0.9562516667, 0.0277777778, 0.0277777778, 0.0277777778, 0.0277777778, 0.0277777778, 0.0277777778))
library(betareg)
m1 <- betareg(formula = y ~ x, data = data, link = "cauchit", type = "ML")
m2 <- betareg(formula = round(y,8) ~ x, data = data, link = "cauchit", type = "ML")
字符串
2条答案
按热度按时间des4xlb01#
由于发生这种不正确的点正好是y值与不生成警告的值相差的点,相差的量与
betareg.control
中fstol
的默认值相当,我推断有一些测试y
与y
的估计值之间的差异没有得到满足。一个稍大的值,联系我们
(准)Fisher评分中收敛的数值公差。
字符串
由于它没有抛出错误,我认为当你向软件包作者报告这个问题时,你应该称之为“infelicity”而不是“bug”。
型
他应该能够修复生成此警告的测试。(我无法确定满足或不满足这些条件中的哪些。)
型
我试着在
betareg.control
值中尝试fsmaxit
的其他值,但还不能缩小问题的范围。我想知道逻辑测试中的第二个嵌套项是否应该是:型
但没想到R的
optim
会这样工作。dgiusagp2#
我不认为这真的与四舍五入有关。只是这是一个小数据集,如果
x
小于或大于100,则y
从非常接近于零切换到非常接近于1。因此,cauchit链接在这里优化有点挑战性。使用默认设置,它几乎收敛,但以下任何修改都会导致成功收敛:此外,IRTFM在之前的回答中建议放松Fisher评分的严格性也会导致成功的收敛。
在上述选项中,我总是建议先尝试使用日志链接,因为它通常可以改进对精度参数的推断(例如,Wald置信区间的覆盖率更好等)。这不是
betareg()
中的默认值的唯一原因是为了向后兼容R包的第一个版本以及与原始Ferrari & Cribari Neto(2004)的一致性但是当显式指定一个两部分公式时,log-link是默认的,这里只是有一个截距:字符串
使用相应的系数作为起始值,然后也导致与单位链接的成功收敛:
型
正如您所看到的,这些模型实际上是相同的,只需要几次额外的Fisher评分迭代,就可以在均值模型中得到相同的系数和推断。