【问题标题】:How to improve a Zero-Inflated Negative Binomial regression model?如何改进零膨胀负二项式回归模型?
【发布时间】:2020-01-19 00:30:51
【问题描述】:

大家!

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

但是,无论我获得的模型多么重要,它都很少反映那些分布特征(见下文)。例如,峰值始终在 4 左右,没有预测值超过 20。

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


P。 S。 我还尝试了逻辑回归来仅预测零/非零。但是没有一个拟合模型比简单地猜测所有情况下的零更好。

【问题讨论】:

标签: r regression glm


【解决方案1】:

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

我们可以使用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")

如前所述,在这个跨栏模型中,您看到的拟合值是预测均值乘以为零的比率(请参阅more here):

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")

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 2013-04-28
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2021-08-21
    • 2020-06-12
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多