R distr:* 算子与随机变量的乘法

iszxjhcz  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(74)

对于模拟,我需要计算两个离散随机变量乘积的分布。虽然我可以从头开始实现它,但我认为distr包已经提供了此功能。
在包中实现的operatorsI似乎没有文档,但是,通过尝试,我已经弄清楚+代表卷积运算(独立随机变量之和):

> X <- DiscreteDistribution(supp=c(-1,0,1), prob=c(0.25,0.5,0.25))
> Y <- X + X
> attr(Y, "support")
[1] -2 -1  0  1  2
> d(Y)(attr(Y, "support"))
[1] 0.0625 0.2500 0.3750 0.2500 0.0625

字符串
虽然似乎有一个乘法运算符(至少methods(class="DiscreteDistribution")报告了一个),但它并不像预期的那样工作(实际上,它根本不工作):

> Y <- X * X
Error in apply(mixDistr.dfs, 1, all) : dim(X) must have a positive length


有没有人知道如何计算两个离散独立随机变量的乘积distr的分布?或者这个包缺少这个功能?

1hdlvixo

1hdlvixo1#

数学运算符 * 的方法 * 已记录在案。抬头看

?distr::`operators-methods`

字符串
你会发现一个关于操作符如何在包中的不同类上工作的描述。
*只有一个签名,涉及“DiscreteDistribution”类:
*签名(e1 =“DiscreteDistribution”,e2 =“numeric”)“AffLinDiscreteDistribution”类的结果
这可以通过执行以下操作来证明:

X * 2
#> Distribution Object of Class: AffLinDiscreteDistribution

yi0zb3m4

yi0zb3m42#

原来这是distr中的一个bug。
正如@allan-cameron所指出的,发行版的操作符是用?'operators-methods'来记录的。对于任意分布(AcDcLcDistribution类),列出了一个乘法运算符,这确实适用于大多数情况:

> X <- DiscreteDistribution(1:2)
> Y <- DiscreteDistribution(1:2)
> Z <- X*Y
> support(Z)
[1] 1 2 4
> prob(Z)
   1    2    4 
0.25 0.50 0.25

字符串
由于distr中的一个bug,我的示例无法工作。我已经向distr的维护者报告了这个问题,这个bug将在即将发布的2.9.3版本中得到修复。

相关问题