2011-05-18 62 views
3

我試圖適合一個negrt模型與sqrt鏈接。不幸的是,它似乎是我必須指定起始值。運行glm.nb命令(包MASS)時是否有人熟悉設置起始值?glm.nb與sqrt鏈接使用R

當我不使用初始值,我得到一個錯誤信息:

係數沒有有效的組已經發現:請提供初始值

當計算

GLM .nb

它似乎有可能設置起始值,不幸的是我絕對不知道如何做到這一點。一些進一步的信息:1.當用標準的日誌鏈接計算迴歸時,可以估計迴歸。 2.這是不可能的設置開始值上的隨機數的算法,因此,例如

glm.nb(,鏈接= SQRT,開始= 1)

不起作用!

任何想法是高度讚賞!

+0

一個可重複的例子將高度讚賞... – 2011-05-18 14:27:34

回答

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的係數意味着新的變量沒有效果 - 這正是你剛纔安裝的簡單模型假設。

+0

謝謝Aniko!接近一點,但不夠接近:)正如你所說我添加了起始值,並將值從start = rep(1,7)改爲(例如)start = rep(100,7)。但這不起作用。我不太瞭解glm.nb命令背後的算法。它不會收斂的原因是什麼?從0到0的估計值到底是什麼意思?非常感謝! – user734124 2011-05-18 18:00:52

+0

以「rep(100,7)」開頭的'quine'數據確實會收斂,儘管它的出路是正確的。很難理解你的數據出了什麼問題,而沒有任何關於它的樣子的線索。 – Aniko 2011-05-18 19:24:46

+0

非常感謝它! – user734124 2011-05-18 21:58:16