R 中没有从 Zeroinfl 对象预测零?

2024-03-16

我创建了一个零膨胀负二项式模型,并想要研究有多少零被划分为采样零或结构零。我如何在 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 https://www.jstatsoft.org/article/view/v027i08/v27i08.pdf

收集所有关于什么的解释需要一点工作(几年了,你的问题仍然没有答案)predict函数对每个模型的作用pscl库,它被隐藏在(第 19,23 页)似然函数的数学表达式中(方程 7、8)。我将你的问题解释为你想要/需要知道如何使用不同的type预测的s:

  • 预期计数是多少? (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 岁的生物化学家来说,博士最后 3 年发表的文章的预期数量是一半,对于 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 项为 1.1%。是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))) 

to give

 (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 个 pub,远低于实际的 19 个 pub(红线)。

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

这给你:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中没有从 Zeroinfl 对象预测零? 的相关文章

随机推荐

  • iframe加载时间限制使用javascript

    我需要在 5000 毫秒后停止加载我的 iframe 页面 我正在使用这些 但它每 5000 毫秒刷新一次 iframe 这是什么问题 请修复它 谢谢
  • PendingIntent 上的“requestCode”有何用途?

    背景 我通过 AlarmManager 使用 PendingIntent 来发出警报 问题 起初我认为为了取消以前的请求 我必须提供我之前用来启动警报的确切请求代码 但后来我发现我错了 因为取消API http developer andr
  • 如何将 pandas 安装到 Visual Studio Code 中?

    我想读取 Excel CSV 文件 经过研究 我意识到我需要import pandas as pd 有没有办法将其安装到 Visual Studio Code 中 我试过打字import pandas as pd 但显示一条红线 我对Pyt
  • 尝试显示位图时,一目了然的应用程序小部件图像崩溃

    当我尝试在应用程序中显示位图图像 我的应用程序图标 时 它工作正常 但当我尝试在 Widget Glance 中显示它时崩溃 这是我的位图代码 val icon packageManager getApplicationIcon com m
  • az devops 登录挂起

    我正在使用 Windows 10 Azure PowerShell Az 模块 DevOps 扩展 0 18 0 我已登录 DevOps 实例并能够运行所有相关命令 现在 我需要登录到不同的组织 项目 每次执行登录子命令时 窗口都会挂起并锁
  • 将两个表中的数据放入一个视图中

    是否可以将两个表 具有相同字段 的数据抓取到一个视图中 基本上 视图将数据视为一张表 是的 使用 UNION CREATE VIEW vw combined AS SELECT FROM TABLE1 UNION ALL SELECT FR
  • SpringBoot 与 Jakarta Validation Api 未使用 @Valid Annotation 进行验证

    我对 Spring boot 和依赖项 jakarta validation api 有疑问 实际上我有一个简单的 DTO 其中包含一些属性 但是当我在 Valid 注释中调用 REST 函数时 此属性并未得到验证 有人能发现我的错误吗 我
  • 在Python中初始化对象列表

    我希望初始化一个不为空的对象数组 列表 类构造函数生成数据 在 C 和 Java 中我会做这样的事情 Object lst new Object 100 我已经查过了 但是有没有一种Python式的方法来完成这个任务 这并不像我想象的那样工
  • 如何在android的非活动类中实现类似“完成”的功能?

    此对话框询问您是否要安装其他应用程序 因此 当单击无按钮时 它必须返回到上一个屏幕 downloadDialog setNegativeButton stringButtonNo new DialogInterface OnClickLis
  • DynamicLINQ - 在字符串内转义双引号

    我正在尝试使用动态过滤系统动态LINQ图书馆 当您执行以下操作时 我一切都会顺利进行 查找名字是鲍勃的人 Context Users Where FirstName Bob 但当我想做的时候遇到了问题 查找名字为 Bob 的人 其中 Bob
  • 如何使用c#在DataGrid(WPF)中显示列表列表

    我有一个标题列表 列 然后是数据行 并希望通过两种方式绑定在 DataGrid 中显示它 List
  • 强制 UIImagePickerController 裁剪方形图像

    我们如何强制 UIImagePickerController 裁剪方形图像 我到处寻找 但没有找到可靠的解决方案 谢谢 var imagePickerController UIImagePickerController UIImagePic
  • 为什么 char 数组必须以空字符结尾?

    为什么 chararray必须以空字符结尾 有什么理由我必须将空字符添加到每个char array 看来他们受到的待遇是一样的 char 数组不必以 null 终止 不依赖于此的标准库函数包括memcpy memmove strncpy 最
  • 数据表删除导出到 pdf 和 excel 时的列

    我在导出到 pdf excel 之前删除列时遇到问题 第二个问题是由于该列 该列的反向部分无法正常工作 这是我使用的代码 document ready function var arrayCol new Array var table ex
  • Python sqlite3在本地成功,但在Github Action上失败

    相同的 python 版本 相同的 sqlite3 版本和相同的文件 但我只是无法传递 Github Action 这是我的 github 操作 https github com CloudAurora Blog blob master g
  • Cassandra (CQL) 中的结果分页

    我想知道如何使用 Cassandra 实现分页 假设我有一个博客 该博客每页最多列出 10 篇帖子 要访问下一篇文章 用户必须单击分页菜单才能访问第 2 页 第 11 20 篇文章 第 3 页 第 21 30 篇文章 等 在 MySQL 下
  • 创建ECDSA公钥给定曲线和公共点?

    我正在努力从公钥的字符串表示形式创建 ECDSA 公钥 即 string devicePublicKey 86FB5EB3CA0507226BE7197058B9EC041D3A3758D9D9C91902ACA3391F4E58AEF13
  • 实现系统管理的ConnectionService

    我想实现此功能以添加来电和对正在进行的通话进行不同的操作 例如保持拒绝等 我已经查看并实施了以下内容 但得到了 致命异常 java lang SecurityException 未为此用户启用此 PhoneAccountHandle And
  • mysql 根据第三个字段的值从两个字段中选择任意一个字段

    我想针对名为 nosale 的字段中的值选择价格或 sale price 其中 price sale price 和 nosale 是产品表的字段 nosale 字段要么为真 要么为假 据此 我想要价格或 sale price 的值 而不是
  • R 中没有从 Zeroinfl 对象预测零?

    我创建了一个零膨胀负二项式模型 并想要研究有多少零被划分为采样零或结构零 我如何在 R 中实现这一点 zeroinfl 页面上的示例代码我不清楚 data bioChemists package pscl fm zinb2 lt zeroi