如何在glm中使用自定义链接功能?
我不想使用glm
中的标准日志链接进行泊松回归,因为我有零。请看下面的代码:如何在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
用于确定Poisson的一组计算方法是否正常的函数,您会看到它的定义是function (mu) { all(mu > 0) }
。 (可以修改这个以允许mu
为零值,但这样做会有足够的麻烦,因为您需要一个很好的理由来这么做 - 我试过了,还有另一个问题,因为差异计算为零。简而言之,通过自定义最大似然估计器(例如bbmle::mle2()
)来做到这一点要比破解glm
做到这一点更容易......)
但是,没有零泊松估计的起点意思是精品了,虽然有很多的警告:
glm(bar ~ foo, family = poisson(link = "identity"), start=c(1,0))
然而:我想指出THA你误解了链接功能的目的。在Poisson回归的响应变量中有零,即使使用标准的日志链接也是可以的。用于泊松回归的GLM模型是y ~ Poisson(exp(a+b*x))
,而不是log(y) = a + b*x
。后者是坏的,如果y=0
,但前者是完全正常的。 glm(bar ~ foo, family = poisson())
工作得很好。
一般来说,非规范链接函数有点痛苦:它们有时正是你所需要的(虽然从你所说的我不相信这是你的情况),但是他们往往比规范链接更加困难和困难。
最后一个注意事项:我可能会将您想要的作为一个“非规范”或“非标准”链接;一个定制链接功能,对我来说,将是一个不被R中的family()
命令提供的,所以你必须自己编写链接功能(例如,见http://rpubs.com/bbolker/4082)
好吧,我想我的问题是,在误解链接功能甚至意味着什么。我会研究更多,也许会问一个不同的问题。 – Xodarap 2013-02-17 16:49:25