Прежде всего, ваша функция верна.
Ваш метод
Применяя свои функции, вы можете увидеть распределение в формате data.frame
как показано ниже
v <- 0:6
res1 <- data.frame(s = v, prob = sapply(0:6, s_i))
так, что
> res1
s prob
1 0 0.0562500
2 1 0.4687500
3 2 0.2265625
4 3 0.1843750
5 4 0.0468750
6 5 0.0156250
7 6 0.0015625
Перекрестная проверка
В дальнейшем я генерирую весь образец пространство для проверки полученного вами распределения
space <- setNames(expand.grid(replicate(3,0:2,simplify = F)),c("X1","X2","Y"))
space$s <- rowSums(space)
space <- within(space, prob <- Vectorize(a_i)(X1)*Vectorize(a_i)(X2)*Vectorize(b_i)(Y))
, где вы можете видеть, что все пространство во фрейме данных равно
> space
X1 X2 Y s prob
1 0 0 0 0 0.0562500
2 1 0 0 1 0.0093750
3 2 0 0 2 0.0093750
4 0 1 0 1 0.0093750
5 1 1 0 2 0.0015625
6 2 1 0 3 0.0015625
7 0 2 0 2 0.0093750
8 1 2 0 3 0.0015625
9 2 2 0 4 0.0015625
10 0 0 1 1 0.4500000
11 1 0 1 2 0.0750000
12 2 0 1 3 0.0750000
13 0 1 1 2 0.0750000
14 1 1 1 3 0.0125000
15 2 1 1 4 0.0125000
16 0 2 1 3 0.0750000
17 1 2 1 4 0.0125000
18 2 2 1 5 0.0125000
19 0 0 2 2 0.0562500
20 1 0 2 3 0.0093750
21 2 0 2 4 0.0093750
22 0 1 2 3 0.0093750
23 1 1 2 4 0.0015625
24 2 1 2 5 0.0015625
25 0 2 2 4 0.0093750
26 1 2 2 5 0.0015625
27 2 2 2 6 0.0015625
, тогда распределение можно суммировать как
res2 <- aggregate(prob ~ s, space,sum)
такой, что
> res2
s prob
1 0 0.0562500
2 1 0.4687500
3 2 0.2265625
4 3 0.1843750
5 4 0.0468750
6 5 0.0156250
7 6 0.0015625
, что совпадает с res1