我正在尝试在R中为两个事件生成泊松表,一个事件的平均值为1.5(lambda1),另一个事件的平均值为1.25(lambda2)。我想在x = 0到x = 7 +(7或更多)的两种情况下生成概率。这可能很简单,但我似乎无法弄清楚该怎么做!我已经设法为表创建了一个数据框,但是我真的不知道如何输入参数,因为我之前从未写过函数:
name <- c("0","1","2","3","4","5","6","7+")
zero <- mat.or.vec(8,1)
C <- data.frame(row.names=name,
"0"=zero,
"1"=zero,
"2"=zero,
"3"=zero,
"4"=zero,
"5"=zero,
"6"=zero,
"7+"=zero)
我猜我将需要一些“ For”循环,并且dpois(x,lambda1)
在某些时候会涉及到。有人可以帮忙吗?
我假设这些事件是独立的。这是生成联合PMF表的一种方法。
首先,这是您定义的名称以及lambda:
name <- c("0","1","2","3","4","5","6","7+")
lambda1 <- 1.5
lambda2 <- 1.25
我们可以通过使用获得0-6的边际概率dpois
,并使用7+边缘概率ppois
和lower.tail=FALSE
:
p.x <- c(dpois(0:6, lambda1), ppois(7, lambda1, lower.tail=FALSE))
p.y <- c(dpois(0:6, lambda2), ppois(7, lambda2, lower.tail=FALSE))
更好的方法可能是创建一个在给定lambda的情况下执行此操作的函数。
然后,您只需获取外部乘积(实际上,您将在R之外手动执行相同的操作)并设置名称:
p.xy <- outer(p.x, p.y)
rownames(p.xy) <- colnames(p.xy) <- name
现在您完成了:
0 1 2 3 4 5
0 6.392786e-02 7.990983e-02 4.994364e-02 2.080985e-02 6.503078e-03 1.625770e-03
1 9.589179e-02 1.198647e-01 7.491546e-02 3.121478e-02 9.754617e-03 2.438654e-03
2 7.191884e-02 8.989855e-02 5.618660e-02 2.341108e-02 7.315963e-03 1.828991e-03
3 3.595942e-02 4.494928e-02 2.809330e-02 1.170554e-02 3.657982e-03 9.144954e-04
4 1.348478e-02 1.685598e-02 1.053499e-02 4.389578e-03 1.371743e-03 3.429358e-04
5 4.045435e-03 5.056794e-03 3.160496e-03 1.316873e-03 4.115229e-04 1.028807e-04
6 1.011359e-03 1.264198e-03 7.901240e-04 3.292183e-04 1.028807e-04 2.572018e-05
7+ 4.858139e-05 6.072674e-05 3.795421e-05 1.581426e-05 4.941955e-06 1.235489e-06
6 7+
0 3.387020e-04 1.094781e-05
1 5.080530e-04 1.642171e-05
2 3.810397e-04 1.231628e-05
3 1.905199e-04 6.158140e-06
4 7.144495e-05 2.309303e-06
5 2.143349e-05 6.927908e-07
6 5.358371e-06 1.731977e-07
7+ 2.573935e-07 8.319685e-09
您可能也曾使用过一个循环,就像您最初怀疑的那样,但这是相同解决方案的一种更round回的方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句