betareg无法收敛,因变量超过8位

gkl3eglg  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(116)

我在使用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")

字符串

des4xlb0

des4xlb01#

由于发生这种不正确的点正好是y值与不生成警告的值相差的点,相差的量与betareg.controlfstol的默认值相当,我推断有一些测试yy的估计值之间的差异没有得到满足。一个稍大的值,
联系我们
(准)Fisher评分中收敛的数值公差。

... , control=betareg.control(fstol =1e-7)

字符串
由于它没有抛出错误,我认为当你向软件包作者报告这个问题时,你应该称之为“infelicity”而不是“bug”。

maintainer("betareg")
[1] "Achim Zeileis <[email protected]>"


他应该能够修复生成此警告的测试。(我无法确定满足或不满足这些条件中的哪些。)

if ((fsmaxit == 0 & opt$convergence > 0) | iter >= fsmaxit) {
    converged <- FALSE
    warning("optimization failed to converge")


我试着在betareg.control值中尝试fsmaxit的其他值,但还不能缩小问题的范围。我想知道逻辑测试中的第二个嵌套项是否应该是:

opt$convergence > fstol


但没想到R的optim会这样工作。

dgiusagp

dgiusagp2#

我不认为这真的与四舍五入有关。只是这是一个小数据集,如果x小于或大于100,则y从非常接近于零切换到非常接近于1。因此,cauchit链接在这里优化有点挑战性。使用默认设置,它几乎收敛,但以下任何修改都会导致成功收敛:

  • 精度参数使用对数链接
  • 增加Fisher评分的允许迭代次数
  • 使用更好的起始值

此外,IRTFM在之前的回答中建议放松Fisher评分的严格性也会导致成功的收敛。
在上述选项中,我总是建议先尝试使用日志链接,因为它通常可以改进对精度参数的推断(例如,Wald置信区间的覆盖率更好等)。这不是betareg()中的默认值的唯一原因是为了向后兼容R包的第一个版本以及与原始Ferrari & Cribari Neto(2004)的一致性但是当显式指定一个两部分公式时,log-link是默认的,这里只是有一个截距:

m1 <- betareg(y ~ x | 1, data = data, link = "cauchit")
summary(m1)
## Call:
## betareg(formula = y ~ x | 1, data = data, link = "cauchit")
## 
## Standardized weighted residuals 2:
##     Min      1Q  Median      3Q     Max 
## -1.6746 -1.1704 -0.4335  0.8269  1.9560 
## 
## Coefficients (mean model with cauchit link):
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -19.16562    3.62912  -5.281 1.28e-07 ***
## x             0.21393    0.03946   5.422 5.90e-08 ***
## 
## Phi coefficients (precision model with log link):
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   3.6936     0.3397   10.87   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Type of estimator: ML (maximum likelihood)
## Log-likelihood: 31.22 on 3 Df
## Pseudo R-squared: 0.7941
## Number of iterations: 29 (BFGS) + 124 (Fisher scoring)

字符串
使用相应的系数作为起始值,然后也导致与单位链接的成功收敛:

s <- coef(m1)
s[3] <- exp(s[3])
m2 <- betareg(y ~ x, data = data, link = "cauchit", start = s)
summary(m2)
## Call:
## betareg(formula = y ~ x, data = data, link = "cauchit", start = s)
## 
## Standardized weighted residuals 2:
##     Min      1Q  Median      3Q     Max 
## -1.6746 -1.1704 -0.4335  0.8269  1.9560 
## 
## Coefficients (mean model with cauchit link):
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -19.16562    3.62912  -5.281 1.28e-07 ***
## x             0.21393    0.03946   5.422 5.90e-08 ***
## 
## Phi coefficients (precision model with identity link):
##       Estimate Std. Error z value Pr(>|z|)   
## (phi)    40.19      13.65   2.944  0.00324 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Type of estimator: ML (maximum likelihood)
## Log-likelihood: 31.22 on 3 Df
## Pseudo R-squared: 0.7941
## Number of iterations: 1 (BFGS) + 2 (Fisher scoring)


正如您所看到的,这些模型实际上是相同的,只需要几次额外的Fisher评分迭代,就可以在均值模型中得到相同的系数和推断。

相关问题