包括1和0的比例数据的Beta回归

机器算法验证 回归 混合模式 贝塔分布 零通胀 贝塔回归
2022-02-08 11:17:44

我正在尝试生成一个模型,该模型的响应变量的比例介于 0 和 1 之间,这包括相当多的 0 和 1,但也包括许多介于两者之间的值。我正在考虑尝试进行 beta 回归。我为 R (betareg) 找到的包只允许 0 到 1 之间的值,但不包括 0 或 1 它们本身。我在其他地方读到,理论上 beta 分布应该能够处理 0 或 1 的值,但我不知道如何在 RI 中处理这个问题,我看到有些人将 0.001 添加到零并从零中取 0.001,但我不是确定这是个好主意吗?

或者,我可以对响应变量进行 logit 转换并使用线性回归。在这种情况下,我对无法对数转换的 0 和 1 有同样的问题。

4个回答

您可以使用零和/或一个膨胀的 beta 回归模型,将 beta 分布与退化分布结合起来,分别将一些概率分配给 0 和 1。有关详细信息,请参阅以下参考资料:

奥斯皮纳,R.,和法拉利,SLP (2010)。膨胀的 beta 分布。统计论文,51(1),111-126。奥斯皮纳,R.,和法拉利,SLP (2012)。一类一般的零或一膨胀贝塔回归模型。计算统计和数据分析,56(6),1609 - 1623。

这些模型很容易使用 R 的 gamlss 包实现。

Rbetareg包的文档提到

如果y还假设极值 0 和 1,则在实践中有用的转换是 (y * (n−1) + 0.5) / n,其中n是样本大小。

http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf

他们给出了参考Smithson M, Verkuilen J (2006)。“更好的柠檬榨汁机?具有 Beta 分布因变量的最大似然回归。” 心理方法,11(1),54-71。

在“分析因素”中,Karen Grace-Martin 看到了一篇关于“零一膨胀 Beta 模型”的当前在线评论文章,概述了解决 0/1 发生率问题的建议解决方案(上文由 Matze O 于 2013 年指出) . 引用非技术评论的部分内容:

因此,如果客户在 30 天内有 30 天服用药物,则不会进行 beta 回归。数据集中不能有任何 0 或 1。

零一膨胀的 Beta 模型

但是,有一个版本的 beta 回归模型可以在这种情况下工作。它是理论上已经存在了一段时间的模型之一,但仅在过去几年才在(某些)主流统计软件中可用。

它被称为零一膨胀 Beta,它的工作原理非常类似于零膨胀泊松模型。

这是一种混合模型,表示实际上存在三个过程。

一个是区分零和非零的过程。这个想法是,从不服药的人与那些服药的人相比,至少在某些时候,存在一些本质上的不同。

同样,有一个过程可以区分一和非一。同样,总是服药的人与有时服药或从不服药的人在性质上有所不同。

然后还有第三个过程,它决定了一个人在某些时候服用了多少药物。

第一个和第二个过程通过逻辑回归运行,第三个过程通过 beta 回归运行。

这三个模型同时运行。他们每个人都可以有自己的一组预测变量和自己的一组系数......

根据分布的形状,您可能不需要所有三个过程。如果数据集中没有零,您可能只需要在 1 处容纳通货膨胀。

它非常灵活,并为您的数据分析工具箱添加了重要选项。”

这也是 2015 年 12 月更新的技术论文来源,用于“zoib:用于 Beta 回归和零/一膨胀 Beta 回归的贝叶斯推理的 R 包”。作者指出,当 y 从闭合单位区间 [0, 1] 中取值时,可以应用零/一膨胀 beta (ZOIB) 回归模型中的 y 变量。显然,zoib 模型假设 Yij 遵循分段分布(参见第 36 页 (1) 中描述的系统)。

您不进行 logit 变换以使变量范围从负无穷大到正无穷大吗?我不确定具有 0 和 1 的数据是否应该是一个问题。是否显示任何错误消息?顺便说一句,如果你只有比例,你的分析总是会出错。您需要使用weight=argument案例glm数量。

如果没有任何效果,您可以使用中位数拆分或四分位数拆分或您认为合适的任何切点将 DV 拆分为多个类别,然后运行序数逻辑回归。这可能会奏效。试试这些东西。

我个人不认为将 0.001 添加到零并从零中取出 0.001 是一个太糟糕的主意,但它有一些问题将在后面讨论。试想一下,为什么不加减 0.000000001(甚至更多的小数)?那将更好地代表0和1!在你看来,这并没有太大的区别。但它确实如此。

让我们看看以下内容:

> #odds when 0 is replaced by 0.00000001

> 0.00000001/(1-0.00000001)
[1] 1e-08
> log(0.00000001/(1-0.00000001))
[1] -18.42068

> #odds when 1 is replaced by (1-0.00000001):

> (1-0.00000001)/(1-(1-0.00000001))
[1] 1e+08
> log((1-0.00000001)/(1-(1-0.00000001)))
[1] 18.42068

> #odds when 0 is replaced by 0.001

> 0.001/(1-0.001)
[1] 0.001001001
> log(0.001/(1-0.001))
[1] -6.906755

> #odds when 1 is replaced by (1-0.001):

> (1-0.001)/(1-(1-0.001))
[1] 999
> log((1-0.001)/(1-(1-0.001)))
[1] 6.906755

所以,你看,你需要保持赔率接近 (0/1) 和 (1/0)。您期望从负无穷到正无穷的对数赔率。所以,要加减,你需要选择一个非常长的小数位,这样对数赔率就会接近无穷大(或非常大)!!您认为足够大的程度完全取决于您。