我创建了一个零膨胀的负二项模型,并想调查有多少零被分区为采样或结构零。我如何在R中实现这一点。在zeroinfl页面上的示例代码对我来说并不清楚。
data("bioChemists", package = "pscl")
fm_zinb2 <- zeroinfl(art ~ . | ., data = bioChemists, dist = "negbin")
table(round(predict(fm_zinb2, type="zero")))
> 0 1
> 891 24
table(round(bioChemists$art))
> 0 1 2 3 4 5 6 7 8 9 10 11 12 16 19
> 275 246 178 84 67 27 17 12 1 2 1 1 2 1 1
这告诉我什么?
当我为我的数据做同样的事情时,我得到一个读数,只是在1下面列出了样本量?感谢
答案 0 :(得分:4)
详情见Zeileis(2008)在https://www.jstatsoft.org/article/view/v027i08/v27i08.pdf
提供的论文这是一些工作(几年而你的问题仍然没有答案),以汇集predict
函数对pscl
库中每个模型所做的所有解释,以及它被隐藏(第19,23页)在似然函数的数学表达式中(方程式7,8)。我已将您的问题解释为您希望/需要知道如何使用不同的type
预测:
type="response"
)type="zero"
)type="prob"
)要读入pscl包附带的数据:
data("bioChemists", package = "pscl")
然后拟合零膨胀负二项式模型:
fm_zinb2 <- zeroinfl(art ~ . | ., data = bioChemists, dist = "negbin")
如果您希望预测预期值,则使用
predict(fm_zinb2, type="response")[29:31]
29 30 31
0.5213736 1.7774268 0.5136430
因此,根据这一模型,博士学位最近3年发表的论文预期数量为生物化学家29和31的一半,生物化学家30的近2篇。
但我相信你是在超过零的概率之后(在点质量为零)。这个命令执行此操作并打印第29行到第31行中的项目的值(是的,我去钓鱼了!):
predict(fm_zinb2, type="zero")[29:31]
它产生这个输出:
29 30 31
0.58120120 0.01182628 0.58761308
因此,第29项是超零的概率(你称之为采样零,即非结构零,因此不能用协变量解释)为58%,而第30项为1.1%,第31位是59%。因此,预计两个生物化学家的出版物数量为零,这超出了那些可以用各种协变量的负二项式回归来解释的那些。
您已在整个数据集中列出了这些预测概率
table(round(predict(fm_zinb2, type="zero")))
0 1
891 24
因此,您的输出结果告诉您,只有24位生物化学家可能是超零,即超过零的预测概率超过一半(由于四舍五入)。
如果你按照百分比等级列入10个点的箱子,可能会更容易解释
table(cut(predict(fm_zinb2, type="zero"), breaks=seq(from=0,to=1,by=0.1)))
给予
(0,0.1] (0.1,0.2] (0.2,0.3] (0.3,0.4] (0.4,0.5] (0.5,0.6]
751 73 34 23 10 22
(0.6,0.7] (0.7,0.8] (0.8,0.9] (0.9,1]
2 0 0 0
因此,您可以看到751名生物化学家不太可能成为过零,但22名生物化学家有可能在50-60%之间成为过零,而只有2名具有更高的机会(60-70%)。没有人极有可能是零过剩。 从图形上看,这可以在直方图中显示
hist(predict(fm_zinb2, type="zero"), col="slateblue", breaks=seq(0,0.7,by=.02))
您列出了每个生物化学家的实际计数数量(不需要舍入,因为这些是计数):
table(bioChemists$art)
0 1 2 3 4 5 6 7 8 9 10 11 12 16 19
275 246 178 84 67 27 17 12 1 2 1 1 2 1 1
谁是拥有19种出版物的特殊生物化学家?
most_pubs <- max(bioChemists$art)
most_pubs
extreme_biochemist <- bioChemists$art==most_pubs
which(extreme_biochemist)
你可以获得每个生物化学家有任何数量的酒吧的估计概率,正好是0到最大值,这里是令人难以置信的19!
preds <- predict(fm_zinb2, type="prob")
preds[extreme_biochemist,]
你可以看看我们的一位特殊生物化学家,他有19篇出版物(在这里使用基础R绘图,但ggplot更漂亮)
expected <- predict(fm_zinb2, type="response")[extreme_biochemist]
# barplot returns the midpoints for counts 0 up to 19
midpoints<-barplot(preds[extreme_biochemist,],
xlab="Predicted #pubs", ylab="Relative chance among biochemists")
# add 1 because the first count is 0
abline(v=midpoints[19+1],col="red",lwd=3)
abline(v=midpoints[round(expected)+1],col="yellow",lwd=3)
并且这表明尽管我们期望生物化学家915的出版量为4.73,但在这种模式下,更有可能获得2-3家酒吧,远不及实际的19家酒吧(红线)。
生物化学家29,回到问题, 过零的概率是
pzero <- predict(fm_zinb2, type="zero")
pzero[29]
29
0.5812012
总体(略微)为零的概率为
preds[29,1]
[1] 0.7320871
因此,零结构的预测概率与结构的比例(即通过回归解释)的比例是:
pzero[29]/preds[29,1]
29
0.7938962
或者零的额外概率超出零超额的可能性是:
preds[29,1] - pzero[29]
29
0.1508859
生物化学家29的实际出版物数量
bioChemists$art[29]
[1] 0
因此,生物化学家预计零出版物的原因很少被回归(20%)解释,而且大部分都没有(即过量,80%)。
总的来说,我们看到,对于大多数生物化学家来说,情况并非如此。我们的生物化学家29是不寻常的,因为他们零酒吧的机会大多是过剩的,即回归莫名其妙。我们可以通过以下方式看到:
hist(pzero/preds[,1], col="blue", xlab="Proportion of predicted probability of zero that is excess")
给你: