[英]bestglm R package error using Poisson regression
我正在嘗試使用R中的bestglm包來擬合Poisson回歸模型。 這是我的代碼:
bestmodel <- bestglm(Xy, family = poisson, IC ="BIC")
輸出是
Morgan-Tatar search since family is non-gaussian. Error in dimnames(Bestq) <- list(c("BICq1", "BICq2"), c("q1", "q2", "selected k")) : length of 'dimnames' [2] not equal to array extent In addition: There were 50 or more warnings (use warnings() to see the first 50)
數據幀Xy沒什么特別的,只不過它並不嚴格包含整數,這會導致最終收集警告。 值得注意的是,代碼
bestmodel <- bestglm(Xy, IC ="BIC")
運行得很好。
這是一個錯誤,還是我可以做些什么來使其運行?
tl; dr出於技術原因,使用非整數數據進行Poisson GLM的基於似然性或基於IC的模型選擇會遇到麻煩(似然性不一定明確)。 通過准可能性解決問題是可能的:我在下面的解決方案中有一個技巧,但是如果您重視自己的結論,則應仔細檢查准AIC公式是否正確!
我認為非整數值確實是問題所在。 我可以將其復制如下:
library("bestglm")
set.seed(101)
## y must be **LAST** column (not documented clearly!)
Xy <- data.frame(
x1=rnorm(100),x2=rnorm(100),
y=rpois(100,2))
使響應變量為非整數:
Xy2 <- transform(Xy,y=y+0.5)
所有這些工作:
bestglm(Xy)
bestglm(Xy,IC="BIC")
bestglm(Xy,IC="BIC", family=poisson)
這將失敗:
bestglm(Xy2,IC="BIC", family=poisson)
## Error in dimnames(Bestq) <-
## list(c("BICq1", "BICq2"), c("q1", "q2", "selected k")) :
## length of 'dimnames' [2] not equal to array extent
我不確定這是否應該視為錯誤,因為Poisson GLM並不是真的打算處理非整數數據(但是我有時會這樣做,所以我很感激)。 我認為最接近的問題可能是BIC(以及其他基於對數似然性的信息標准)是無限的,因為在Poisson模型下,非整數值在技術上是不可能的,因此可能性為零...
BIC(glm(y~1,data=Xy2,family=poisson))
## Inf
原則上,您可以通過計算准似然/准AIC來解決此問題,但是R的內置擬quasipoisson
族由純粹主義者編寫,他們不相信這樣的事情是有道理的:
BIC(glm(y~1,data=Xy2,family=quasipoisson))
## NA
我認為最好的解決方案是編寫您自己的my_quasipoisson
家庭,以取代
quasipoisson()$aic
function (y, n, mu, wt, dev)
NA
具有合理的似然性。
更新 :這是一種解決方法。 這是對合理的准AIC表達式的破解BIC()
我認為BIC()
也使用了該表達式)。 它具有比平常更少的保修。
my_QP <- function(link="log") {
QP <- quasipoisson(link=link)
QP$aic <- function (y, n, mu, wt, dev) {
nobs <- length(y)
disp <- dev/n
dev0 <- -2*sum((-mu + y*log(mu) -lfactorial(y))*wt/disp)
dev0 + 2 ## extra penalty parameter
}
QP
}
bestglm(Xy2,family=my_QP)
交叉檢查以查看諸如MuMIn
和AICcmodavg
類的程序包(我記得允許使用基於准AIC的模型平均和選擇功能)是AICcmodavg
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.