找到合適的起始值對於充分複雜的問題可能是困難的。但是,爲了設置起始值(其文檔不是很好,但存在),您應該學會閱讀錯誤消息。下面是使用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的係數意味着新的變量沒有效果 - 這正是你剛纔安裝的簡單模型假設。
一個可重複的例子將高度讚賞... – 2011-05-18 14:27:34