【问题标题】:How can I conditionally sum given a latent indicator?给定一个潜在指标,我如何有条件地求和?
【发布时间】:2020-03-21 19:50:44
【问题描述】:

我想在 R 中计算以下总和:

$\sum^K_{k=1} [(1-z_i) * log[y_i|\lambda_0] + z_i * log[y_i|\lambda_1]]$, where [y_i|\lambda_{1/2}] follows a Poisson(\lambda_{1/2}) distribution.

潜在指示变量 z_i 等于 0 或 1,它在向量 z 中提供。

我目前在我的 R 脚本中有这段代码:

sum(dpois(y,lambda0,log=TRUE)[z==0]+dpois(y,lambda1,log=TRUE)[z==1])

我收到以下错误,

longer object length is not a multiple of shorter object length

在这种情况下,我不认为这真的是我的问题。我只是不知道如何调整我的总和。我对 R 比较陌生,非常感谢您的帮助。

【问题讨论】:

  • 似乎 z 中等于 0 的元素数量与 z 中等于 1 的元素数量不同。因此,您试图将不同长度的向量相加。尝试这将产生您报告的错误。但是,由于您只需要两个向量的所有元素的总和,因此不需要将它们添加到 sum 函数中。您只需将 dpois 参数之间的 + 替换为逗号,即可得到您正在寻找的答案。
  • @AllanCameron 我明白你在说什么。是的,z 中等于 0 的元素数量与等于 1 的元素数量不同。我把逗号和加号交换了,我得到了答案。谢谢你!但是,奇怪的是,我仍然收到相同的警告。这是一个值得关注的理由吗?

标签: r statistics sum conditional-statements poisson


【解决方案1】:

如果你的yz 的长度相等,那么你可以试试下面的代码,我相信它在数学上与你的目标是等价的

sum(dpois(y,lambda0,log=TRUE)*(1-z)+dpois(y,lambda1,log=TRUE)*z)

【讨论】:

  • 我尝试了您的解决方案和 @Allan Cameron 在 cmets 中提供的建议。他们工作并提供了大致相同的解决方案。由于 y 和 z 长度相等,因此这是完美的。我很好奇为什么我必须在我原来的方法中将我的加号改为逗号,但在你的解决方案中使用加号就可以了。那里有什么见解吗?此外,您的解决方案适用于任何 z 值,而不仅仅是 1 和 0,这将是我的下一个问题,所以这真的很有帮助!但是,我仍然遇到同样的错误。我应该忽略错误吗?
  • @Edison 在我的解决方案中,如果z 中只有01,那么z 中的0 元素对总和没有任何贡献。同样,对于1-z,那些在z 中具有1s 的职位将无济于事。由于01位置是排他的,所以你可以使用1-zz作为掩码
  • 知道了 - 感谢您的帮助!真的很感激。
猜你喜欢
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2019-09-06
  • 2020-01-12
  • 1970-01-01
  • 2018-02-11
  • 2011-02-21
相关资源
最近更新 更多