繁体   English   中英

如何改进零膨胀负二项式回归模型?

[英]How to improve a Zero-Inflated Negative Binomial regression model?

大家!

计数数据的分布

我有一个响应变量,它计算一个月中成功的天数,并以特殊的形状分布(见上文)。 大约 50% 是零,并且有一个沉重的尾巴。 由于过度分散和过多的零,我被建议用零膨胀负二项式回归模型来预测它。

然而,无论我获得的模型有多么重要,它都几乎没有反映那些分布特征(见下文)。 例如,峰值始终在 4 左右,并且没有预测低于 20。

预测分布

这通常用于拟合过度分散的重尾计数数据吗? 还有其他方法可以改善拟合吗? 任何建议,将不胜感激。 谢谢!


PS我也尝试过逻辑回归来预测零/非零。 但是,没有一个拟合模型的性能比在所有情况下简单地猜测零更好。

我想你做了一个拟合值的直方图,所以这只会反映拟合的平均值,并且可能乘以零的比率,这取决于你使用的模型。 不应该重新创建该分布,因为您的数据的传播方式已嵌入到离散参数中。

我们可以使用pscl包中的示例:

library(pscl)
data("bioChemists")
fit <- hurdle(art ~ ., data = bioChemists,dist="negbin",zero.dist="binomial")
par(mfrow=c(1,2))

hist(fit$y,main="Observed")
hist(fit$fitted.values,main="Fitted")

在此处输入图片说明

如前所述,在此障碍模型中,您看到的拟合值是预测均值乘以为零的比率(请参阅此处的更多信息):

head(fit$fitted.values)
        1         2         3         4         5         6 
1.9642025 1.2887343 1.3033753 1.3995826 2.4560884 0.8783207 

head(predict(fit,type="zero")*predict(fit,type="count"))
        1         2         3         4         5         6 
1.9642025 1.2887343 1.3033753 1.3995826 2.4560884 0.8783207 

为了基于拟合模型模拟数据,我们提取参数:

Theta=fit$theta
Means=predict(fit,type="count")
Zero_p = predict(fit,type="prob")[,1]

具有模拟计数的功能:

simulateCounts = function(mu,theta,zero_p){
N = length(mu)
x = rnbinom(N,mu=mu,size=THETA)
x[runif(x)<zero_p] = 0
x
}

因此,多次运行此模拟以获得值的范围:

set.seed(100)
simulated = replicate(10,simulateCounts(Means,Theta,Zero_p))
simulated = unlist(simulated)

par(mfrow=c(1,2))
hist(bioChemists$art,main="Observed")
hist(simulated,main="simulated")

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM