我试着用sqrt链接来拟合一个否定的模型。不幸的是,我似乎必须指定起始值。有人熟悉在运行glm.nb
命令(package MASS
)时设置起始值吗?
当我不使用起始值时,会收到一条错误消息:
未找到有效的系数集:请提供起始值
从?glm.nb
的角度来看,设置起始值似乎是可能的,不幸的是,我完全不知道该如何做。一些进一步的信息:1.当用标准日志链接计算回归时,可以估计回归值。2.不可能将算法的起始值设置为任意值,例如
glm.nb(<model>,link=sqrt, start=1)
不管用!
发布于 2011-05-18 06:41:21
对于足够复杂的问题,找到合适的起始值是很困难的。但是,要设置起始值(其中的文档不是很好,但确实存在),您应该学会读取错误消息。下面是使用内置数据集使用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意味着新变量没有影响,这正是你刚刚拟合的更简单的模型。
发布于 2019-04-04 16:43:42
在使用日志链接二项式进行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))
https://stackoverflow.com/questions/6043841
复制相似问题