Таблица Пуассона в R

Я пытаюсь создать таблицу Пуассона в R для двух событий, одно со средним значением 1,5 (лямбда1), а другое со средним значением 1,25 (лямбда2). Я хотел бы сгенерировать вероятности в обоих случаях для 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). Может кто-нибудь помочь, пожалуйста?


person clattenburg cake    schedule 05.08.2013    source источник
comment
Каков ваш предполагаемый результат для введенных вами входных значений?   -  person Thomas    schedule 05.08.2013
comment
Извините, я забыл упомянуть. Результатом будет P(X=x, Y=y). Так, например, вероятность завершения события X=1 для первого события и Y=2 для второго события. Фактический расчет производится для результата матча в футболе, т. е. вероятности того, что матч завершится со счетом 1:0, 2:0, 1:3 и т. д.   -  person clattenburg cake    schedule 05.08.2013


Ответы (1)


Я предполагаю, что эти события независимы. Вот один из способов создания таблицы совместной PMF.

Во-первых, вот имена, которые вы определили, вместе с лямбда-выражениями:

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))

Еще лучшим способом может быть создание функции, которая делает это с любой лямбдой.

Затем вы просто берете внешний продукт (действительно то же самое, что вы делаете вручную, вне 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

Вы могли бы также использовать цикл, как вы изначально подозревали, но это более окольный путь к тому же решению.

person Peyton    schedule 05.08.2013