【发布时间】:2018-12-06 15:20:27
【问题描述】:
我的目标是生成一个 3d 直方图,表示在第一个和第二个掷硬币序列中获得一定数量正面的概率。
我的想法很简单:
用
expand.grid取第一、二序列中一定数量正面概率的笛卡尔积对笛卡尔积中的每个项目应用乘积运算,以获得第一个中有那么多正面和第二个中有那么多正面的概率。我认为问题出在这一步。
在 3d 直方图中显示它们。
但是我得到了一个非常混乱的输出,我无法理解:
我预计并在极端情况下输出条形较低(第一个 AND 在第二个中很难获得 0 个正面)而在中间较高(在第一个 AND 在第二个中更容易获得 2 个正面)。
require("plot3D")
x <- c(1, 4, 6, 4, 1)/8
y <- c(1, 4, 6, 4, 1)/8
prod <- function( arr ) { return (arr[1]*arr[1])}
z <- as.matrix(apply(expand.grid(x,y), c(1,2), prod))
print(z)
## Plot as a 3D histogram:
hist3D(z=z, border="black")
此外,expand.grid 的输出看起来过于线性,而不是作为笛卡尔积的表格应该:
Var1 Var2
1 0.125 0.125
2 0.375 0.125
3 0.375 0.125
4 0.125 0.125
5 0.125 0.375
6 0.375 0.375
7 0.375 0.375
8 0.125 0.375
9 0.125 0.375
10 0.375 0.375
11 0.375 0.375
12 0.125 0.375
13 0.125 0.125
14 0.375 0.125
15 0.375 0.125
16 0.125 0.125
【问题讨论】:
-
@Caridorc 刚刚意识到概率密度函数应该加到 1 才有效。你的 prob_x 和 prob_y 都应该是:
c(1, 4, 6, 4, 1)/16并且类似地它会产生一个等于 1 的z的总和。为了清晰起见,也为代码添加了更多细节。 -
@Mankind_008 谢谢,我之前少了一枚硬币,忘记了 *2 乘数