硬币翻转的3d直方图得出R

时间:2018-06-27 16:38:40

标签: r plot graph 3d histogram

我的目标是生成一个3d直方图,该图表示在第一个和第二个序列(分别有4个硬币翻转)中获得一定数量的正面的概率。

我的想法很简单:

  • 使用expand.grid来计算第一和第二序列中一定数量的首部概率的笛卡尔积。

  • 对笛卡尔乘积中的每个项应用乘积运算,以获得在第一个中具有那么多的头并且在第二个中具有那么多的头的概率。我认为问题出在这一步。

  • 以3d直方图显示它们。

但是我得到的输出令人困惑,我无法理解:

Weird output

我期望并输出的条形在极端处较低(在第一个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

1 个答案:

答案 0 :(得分:2)

给出 x y 是分别来自独立二项式分布的第一和第二掷硬币序列的正面数目

您需要评估z作为 xy网格上的联合概率分布,其中 x,y €{0,1,2,3,4}

require("plot3D")

x_val <- 0:4                    # No of heads in 1st sequence of flips
y_val <- 0:4                    # No of heads in 2nd sequence of flips

px <- c(1, 4, 6, 4, 1)/16       # probability vector for no of flips 
py <- c(1, 4, 6, 4, 1)/16       # in 1st and 2nd sequence of flips

grid_prob <- mesh(px, py)
z  <- with(grid_prob, x*y)      # sum(z) should equal 1 to be a pdf

# Plot as a 3D histogram:
hist3D(z=z, border="black", x = x_val , y = y_val)

joint pdf for x and y