gpt4 book ai didi

r - 如何在 glm 中使用自定义链接函数?

转载 作者:行者123 更新时间:2023-12-04 17:37:08 49 4
gpt4 key购买 nike

我不想使用 glm 中的标准日志链接对于泊松回归,因为我有零。考虑以下代码:

foo = 0:10
bar = 2 * foo
glm(bar ~ foo, family = poisson(link = "identity"))

我收到错误:

Error: no valid set of coefficients has been found: please supply starting values



我不确定这意味着什么。 “身份”链接功能是我认为的那样吗(即它根本不转换数据)?这个错误是什么意思,我该如何解决?

最佳答案

如果您从默认 (0,0) 起点以外的其他地方开始,您可以获得答案。 start参数是一个向量,包含响应的截距和斜率,在链接函数的尺度上。 R 报告的问题通常是计算的(负)对数似然对于起始值变得无穷大。你可以自己检查一下:-sum(dpois(bar,0+0*foo,log=TRUE))Inf (因为我们正在设置一个均值为零的泊松,但得到一个非零响应)。

然而,这并不是一个完整的解释,因为即使对于像 (0,2) 这样的起点负对数似然是有限的(-sum(dpois(bar,0+2*foo,log=TRUE)) 大约为 20),也会发生同样的错误——人们会深入挖掘以了解问题所在,但我可以想象例如,代码中根本不允许泊松均值为零。泊松的对数似然是(常数加)x*log(lambda)-lambda : 即使如果 lambda 这样做也可以和 x都为零,这在数学中并不总是很明显。特别是,如果你看 poisson()$validmu ,这是glm的函数用于确定泊松的一组计算均值是否OK,你会看到它的定义是function (mu) { all(mu > 0) } . (可以修改它以允许 mu 的零值,但是你需要一个很好的理由这样做已经足够麻烦了——我试过了,还有另一个问题,因为方差被计算为等于零。简而言之,通过自定义最大似然估计器(例如 bbmle::mle2() )来执行此操作比破解 glm 来执行此操作要容易...)

然而,泊松均值没有零估计的起点效果很好,尽管有很多警告:

glm(bar ~ foo, family = poisson(link = "identity"), start=c(1,0))

然而 :我想指出您误解了链接功能的目的。即使使用标准对数链接,泊松回归的响应变量中也可以为零。 Poisson 回归的 GLM 模型是 y ~ Poisson(exp(a+b*x)) ,不是 log(y) = a + b*x .后者不好如果 y=0 ,但前者完全可以。 glm(bar ~ foo, family = poisson())工作得很好。

一般来说,非规范链接函数有点麻烦:它们有时正是您所需要的(尽管根据您所说的,我不相信您的情况是这样),但它们往往是比规范链接更麻烦,更难适应。

最后一点:我可能会将您想要的称为“非规范”或“非标准”链接;对我来说,自定义链接功能是 family() 未提供的功能。 R 中的命令,因此您必须自己编写链接函数(例如,请参阅 http://rpubs.com/bbolker/4082 )

关于r - 如何在 glm 中使用自定义链接函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916700/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com