gpt4 book ai didi

r - 从R?中的zeroinfl对象没有预测到零。

转载 作者:行者123 更新时间:2023-12-04 11:52:56 25 4
gpt4 key购买 nike

我创建了一个零膨胀负二项式模型,并想研究将多少个零分配给抽样或结构零。我如何在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下列出?谢谢

最佳答案

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


因此,在此模型下,博士学位的最近三年中预期发表的文章数量是生化学家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%的可能性成为过零,而只有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家酒吧(红线)。

Chance of #pubs for biochemist profile 29

回到问题,对于生物化学家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")


这给你:

Proportion of predicted probability of zero that is excess, across biochemists

关于r - 从R?中的zeroinfl对象没有预测到零。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com