2016-11-21 67 views
1

我在運行負二項模型時遇到了一些麻煩。基本上,我有一個包含動物數量的數據集。然而,這種努力是不同的,因此我可以計算每天的動物比率。我用相當大的數據集(> 100000個觀察值)來做這件事。我很驚訝,我找不到涵蓋我的問題的其他主題,如果您知道的話:會有所幫助!使用非整數與整數:使用非整數的警告,但模型不會整數運行

當試圖將模型擬合到我的數據時,我遇到了一些問題。要麼我運行率

​​

,然後負二項式模型,我得到以下警告消息:

>Warning messages: 
1: In dpois(y, mu, log = TRUE) : non-integer x = 25.913718 
2: In dpois(y, mu, log = TRUE) : non-integer x = 5.457385 
3: In dpois(y, mu, log = TRUE) : non-integer x = 2.195133 
4: In dpois(y, mu, log = TRUE) : non-integer x = 2.721088 
5: In dpois(y, mu, log = TRUE) : non-integer x = 6.971678 
6: In dpois(y, mu, log = TRUE) : non-integer x = 21.863799 
7: In dpois(y, mu, log = TRUE) : non-integer x = 5.300733 
8: In dpois(y, mu, log = TRUE) : non-integer x = 7.157865 
9: In dpois(y, mu, log = TRUE) : non-integer x = 14.117588 
10: In dpois(y, mu, log = TRUE) : non-integer x = 6.505993, etc. 

或者我運行的偏移

> m2<-glm.nb(Count ~ Par1+Par2+...+Par7+Par8+offset(Effort),data=data) 

然而,這模型給出以下錯誤:

> Error: no valid set of coefficients has been found: please supply starting values 
In addition: Warning messages: 
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted rates numerically 0 occurred 

我已經嘗試提供第一個模型的係數作爲第二個的開始係數,但這不起作用。同樣使用pscl軟件包不起作用,或者增加迭代次數。這是我的數據的一個子集(一個物種),零點很少。

有什麼建議嗎?我覺得實際上建模的第二種方式是這樣做的正確方式,但我不知道如何讓這個模型運行。有任何想法嗎?將不勝感激。

回答

1

你幾乎可以肯定想要以下之一,假設Rates = Count/Effort。無論是符合率,並用努力作爲加權變量:

glm.nb(Rates ~ *, weights=Effort, data=data) 

或者,符合計數和使用日誌(努力)作爲補償:

glm.nb(Count ~ * + offset(log(Effort)), data=data) 

參見my answer on CrossValidated大約偏移在泊松/負二項模型中。

+0

所以,僅僅爲了我自己的理解:既然你正在查看響應變量的日誌,你還應該建模偏移量的日誌? 第二種方法似乎完美運行,沒有警告,也沒有運行模型的問題。非常感謝! – Tommele

+0

沒錯。這兩種配方是等效的,所以第一種方法也應該起作用。 –

+0

好的,完美的。出於某種原因,第一種方法對於我來說具有不同的結果,p值極低。也許它與這是一個負二項分佈有關,glm.nb必須首先找到theta? – Tommele