我正在尝试使用sqrt链接来安装negbin模型.不幸的是,似乎我必须指定起始值.有人在运行glm.nb命令(包MASS)时熟悉设置起始值吗?
当我不使用起始值时,我收到一条错误消息:
没有找到有效的系数集:请提供起始值
计算时
?glm.nb
似乎有可能设定起始值,不幸的是我绝对不知道如何做到这一点.一些进一步的信息:1.当使用标准日志链接计算回归时,可以估计回归.2.例如,无法在随机数上设置算法的起始值
glm.nb(,link = sqrt,start = 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", )
Run Code Online (Sandbox Code Playgroud)
它准确地告诉您它的期望:每个要估计的系数的值向量.
quine.nb1 <- glm.nb(Days ~ Sex + Age + Eth + Lrn, data = quine,
link=sqrt, start=rep(1,7))
Run Code Online (Sandbox Code Playgroud)
因为我给了一个长度为7的向量,你可能需要使用它中的实际值来获得一个总是预测正值的模型.产生起始值的默认算法很可能在glm.nb某处给出负面预测,而sqrt链接不能容忍(不像log).如果您无法手动查找有效的起始值,则可以尝试运行更简单的模型,并将其中的估计值从0扩展为其他参数以获得良好的起始位置.
编辑:建立一个模型
假设您找不到复杂模型的有效起始值.然后从一个简单的开始,例如
> nb0 <- glm.nb(Days ~ Sex, data=quine, link=sqrt)
> coef(nb0)
(Intercept) SexM
3.9019226 0.3353578
Run Code Online (Sandbox Code Playgroud)
现在让我们使用之前的起始值添加下一个变量,为新变量的效果添加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
Run Code Online (Sandbox Code Playgroud)
您通常希望继续添加0而不是100,因为系数为0意味着新变量没有效果 - 这正是您刚刚拟合的简单模型所假设的.