glm.nb与sqrt链接

时间:2011-05-18 11:20:07

标签: r statistics

我正在尝试使用sqrt链接来安装negbin模型。不幸的是,似乎我必须指定起始值。有人在运行glm.nb命令(包MASS)时熟悉设置起始值吗?

当我不使用起始值时,我收到一条错误消息:

  

未找到有效的系数集:请提供起始值

?glm.nb似乎可以设置起始值,不幸的是我绝对不知道如何做到这一点。一些进一步的信息:1。当使用标准日志链接计算回归时,可以估计回归。 2.无法将算法的起始值设置为任意值,例如

glm.nb(<model>,link=sqrt, start=1)

不起作用!

2 个答案:

答案 0 :(得分:7)

对于足够复杂的问题,找到合适的起始值可能很困难。但是,为了设置起始值(其文档不是很好,但存在),您应该学会阅读错误消息。以下是使用内置数据集start=1尝试失败的复制品:

>quine.nb1 <- glm.nb(Days ~ Sex + Age + Eth + Lrn, data = quine, 
                    link=sqrt, start=1)
Error in glm.fitter(x = X, y = Y, w = w, start = start, etastart = etastart,  : 
  length of 'start' should equal 7 and correspond to initial coefs for 
  c("(Intercept)", "SexM", "AgeF1", "AgeF2", "AgeF3", "EthN", "LrnSL", )

它准确地告诉你它的期望值:每个要估计的系数的值向量。

quine.nb1 <- glm.nb(Days ~ Sex + Age + Eth + Lrn, data = quine, 
                    link=sqrt, start=rep(1,7))

有效,因为我给了一个长度为7的向量。你可能不得不使用它中的实际值来获得一个总是预测正值的模型。在glm.nb中生成起始值的默认算法可能会在某处给出负面预测,sqrt链接不能容忍(与log不同)。如果您无法手动找到有效的起始值,您可以尝试运行更简单的模型,并将其中的估计值从0扩展为其他参数以获得良好的起始位置。

编辑:建立模型

假设您找不到复杂模型的有效起始值。然后从一个简单的开始,例如

> nb0 <- glm.nb(Days ~ Sex, data=quine, link=sqrt)
> coef(nb0)
(Intercept)        SexM 
  3.9019226   0.3353578 

现在让我们使用之前的起始值添加下一个变量,为新变量的效果添加0个估计值(在这种情况下Age有四个级别,因此需要3个系数):

> nb1 <- glm.nb(Days ~ Sex+Age, data=quine, link=sqrt, start=c(coef(nb0), 0,0,0))
> coef(nb1)
(Intercept)        SexM       AgeF1       AgeF2       AgeF3 
  3.9127405  -0.1155013  -0.5551010   0.7475166   0.5933048 

您通常希望继续添加0而不是100,因为系数为0表示新变量无效 - 这正是您刚刚拟合的简单模型所假设的。

答案 1 :(得分:1)

使用对数链接二项式进行RR回归时,我遇到了类似的错误

    let navCtrl = UINavigationController(rootViewController: ctrl)

按照建立模型的说明进行操作之后,我到达了下面的代码,并获得了下面每个变量的系数。

adjrep <-glm(reptest ~ momagecat + paritycat + marstatcat + dept,
             family = binomial(link = "log"),
             data = hcm1)

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