【问题标题】:glm.nb with sqrt linkglm.nb 与 sqrt 链接
【发布时间】:2019-04-05 11:52:16
【问题描述】:

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

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

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

看着?glm.nb 似乎可以设置起始值,不幸的是我完全不知道该怎么做。一些进一步的信息: 1.使用标准对数链接计算回归时,可以估计回归。 2. 不能将算法的起始值设置为任意值,例如

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

不起作用!

【问题讨论】:

  • 非常感谢一个可重现的例子......

标签: r statistics


【解决方案1】:

对于足够复杂的问题,找到合适的起始值可能很困难。但是,对于设置起始值(其文档不是很好,但存在),您应该学习阅读错误消息。以下是您尝试使用带有内置数据集的 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 意味着新变量没有影响 - 这正是您刚刚拟合的更简单模型所假设的。

【讨论】:

  • 谢谢阿尼科!更接近一点,但还不够接近:) 正如你所说,我添加了起始值并将值从 start=rep(1,7) 更改为(例如)start=rep(100,7)。但这不起作用。我不太了解 glm.nb 命令背后的算法。不收敛的原因是什么?将估计值扩大为 0 到底是什么意思?到目前为止谢谢!
  • quinerep(100,7) 开头的数据确实收敛,尽管它与正确的估计值相差甚远。如果不了解数据的外观,就很难从理论上推断您的数据出了什么问题。
【解决方案2】:

我在使用日志链接二项式进行 RR 回归时遇到了类似的错误,如下所示

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

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

rep3 <-glm (reptest ~ momagecat + paritycat + marstatcat + dept,
            family = binomial(link = "log"),
            data = hcm1,
            start=c(coef(rep1),0,0,0))

【讨论】:

  • 这与问题有何关联?
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2016-04-03
相关资源
最近更新 更多