对某些观察值的偏移变量为 0 的计数数据进行建模

机器算法验证 广义线性模型 计数数据 抵消
2022-03-27 17:28:07

我正在尝试帮助一位同事的学生。学生在实验装置中观察并计算鸟类的行为(叫声次数)。无法确定每次实验期间特定观察到的鸟类的叫声数量,但计算有助于记录的叫声数量的鸟类数量是可能的。因此,我最初的建议是在 Poisson GLM 模型中包含鸟类数量作为偏移项,因此我们将拟合每只鸟类的预期呼叫次数。

这样做的问题是,在许多观察场合中,没有观察到鸟类(因此也没有观察到叫声)。软件(在这种情况下为 R)抱怨是因为(R 抱怨包含数据,但这纯粹是存在的结果log(0)=infy-Infoffset(log(nbirds))-Inf

我实际上怀疑我们需要一个障碍模型(或类似模型),其中我们有一个单独的二项式模型用于“观察到的呼叫”?(或不)和在有呼叫的情况下呼叫数量(每只鸟)的截断计数模型,其中我们仅在模型的计数部分包含偏移项。

使用 R 中的pscl包尝试过这个,但我仍然遇到同样的错误:

mod1 <- hurdle(NumberCallsCOPO ~ Condition * MoonVis +
               offset(log(NumberCOPO)) | 1, data = Data,
               dist = "poisson")

因为相同的 R 代码(glm.fit在内部hurdle()用于拟合计数模型部分)正在检查,-Inf即使我认为它不会影响模型对这些观察的拟合。(这是一个正确的假设吗?)

NumberCOPO我可以通过向(例如)添加一个小数字来使模型适合,0.0001但这充其量只是一个软糖。

在实践中添加这个小的连续性校正可以吗?如果不是,在处理数据时我们应该考虑哪些其他方法,我们可能希望在 Poisson 模型中使用偏移量,其中偏移量变量可以取值 0?我遇到的所有示例都是针对偏移变量不可能为 0 的情况。

3个回答

因此,您要建模的响应是“每只鸟的呼叫次数”,而麻烦的线条是您没有观察到任何鸟的地方?只需删除这些行。它们不会向您尝试建模的事物添加任何信息。

在泊松 GLM 中,偏移量只是对正在建模的泊松率的乘法缩放——而泊松率为零的泊松没有帮助甚至没有意义......

这就是为什么Spacedman是正确的!

只需尝试手动完成(跨栏)“(用于“教学/体操”目的):拆分为二项式部分和 cout 部分,并分别进行拟合 logit 和 cout 回归!或使用标准跨栏模型(+ Vuong 测试)泊松/ negBin / Gamma ...,GAM。在我看来,这里不需要“偏移”变量。;-)