在零中没有从零的物体预测零?

时间:2014-03-11 01:51:54

标签: r logistic-regression

我创建了一个零膨胀的负二项模型,并想调查有多少零被分区为采样或结构零。我如何在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下面列出了样本量?感谢

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家酒吧(红线)。

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