首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的Poisson表

R中的Poisson表
EN

Stack Overflow用户
提问于 2013-08-05 10:36:53
回答 1查看 908关注 0票数 1

我试图在R中为两个事件生成泊松表,一个事件的平均值为1.5 (lambda1),另一个事件的平均值为1.25 (lambda2)。我想为x=0到x=7+ (7或更多)生成这两种情况下的概率。这可能很简单,但我似乎想不出怎么做!我已经为表创建了一个数据框架,但是我并不知道如何输入参数,因为我以前从未编写过函数:

代码语言:javascript
复制
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)。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 12:45:05

我假设这些事件是独立的。这里有一种方法可以生成一个联合PMF表。

首先,这里是您定义的名称以及lambdas:

代码语言:javascript
复制
name <- c("0","1","2","3","4","5","6","7+")
lambda1 <- 1.5
lambda2 <- 1.25

利用dpois可以得到0-6的边际概率,用ppoislower.tail=FALSE求出7+的边际概率。

代码语言:javascript
复制
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之外手工做的相同的事情),并设置名称:

代码语言:javascript
复制
p.xy <- outer(p.x, p.y)
rownames(p.xy) <- colnames(p.xy) <- name

现在你说完了:

代码语言:javascript
复制
              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

您也可以使用循环,正如您最初猜测的那样,但这是一种更迂回的方法,可以找到相同的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18056123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档