我目前正在使用 Hardin 和 Hilbe 的“广义线性模型和扩展”一书(第二版,2007 年)。作者建议,“日志链接通常用于响应数据,而不是 OLS 模型,这些数据在连续尺度上只取正值”。当然,他们还建议使用残差图来检查是否仍然可以使用使用身份链接的“正常”线性模型。
我试图在 R 中复制他们在 STATA 书中所做的事情。事实上,我在 STATA 中的日志链接没有问题。但是,当使用 R 的 glm-function 调用相同的模型,但指定family=gaussian(link="log")
我被要求提供起始值时。当我将它们都设置为零时,我总是得到算法没有收敛的消息。选择其他值,消息有时是相同的,但更多时候我得到:
Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, :
NA/NaN/Inf in 'x'
正如我所说,在 STATA 中,我可以运行这些模型而无需设置起始值且不会出现错误。我尝试了许多不同的模型和不同的数据集,但问题总是相同的(除非我只包含一个自变量)。谁能告诉我为什么会这样,或者我做错了什么,或者为什么书中建议的模型可能不合适?我会很感激任何帮助,谢谢!
编辑:作为重现错误的示例,请考虑可以在此处下载的数据集。加载此数据集后,我运行以下模型:
mod <- glm(betaplasma ~ age + vituse, family=gaussian(link="log"), data=data2, start=c(0,0,0))
这会产生算法未收敛的警告消息。
Edit2:我还被要求提供该模型的 STATA 输出。这里是:
. glm betaplasma age vituse, link(log)
Iteration 0: log likelihood = -2162.1385
Iteration 1: log likelihood = -2096.4765
Iteration 2: log likelihood = -2076.2465
Iteration 3: log likelihood = -2076.2244
Iteration 4: log likelihood = -2076.2244
Generalized linear models No. of obs = 315
Optimization : ML Residual df = 312
Scale parameter = 31384.51
Deviance = 9791967.359 (1/df) Deviance = 31384.51
Pearson = 9791967.359 (1/df) Pearson = 31384.51
Variance function: V(u) = 1 [Gaussian]
Link function : g(u) = ln(u) [Log]
AIC = 13.20142
Log likelihood = -2076.224437 BIC = 9790173
------------------------------------------------------------------------------
| OIM
betaplasma | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
age | .0056809 .0032737 1.74 0.083 -.0007354 .0120972
vituse | -.273027 .0650773 -4.20 0.000 -.4005762 -.1454779
_cons | 5.467577 .2131874 25.65 0.000 5.049738 5.885417
------------------------------------------------------------------------------