R语言:求二维变量数学期望

想做一个二维变量数学期望实验, 查看若干资料终于找到方法

先看这篇文章熟悉一下R的函数

http://www.cyclismo.org/tutorial/R/tables.html


构造数据

通过下面的函数构造了,正态分布和泊松分布的两列数据

A <- data.frame(a=round(rnorm(10,20,9)), b=rpois(10, lambda=10))

 

> A <- data.frame(a=round(rnorm(10,20,9)), b=rpois(10, lambda=10))

> A

    a  b

1  22 14

2  21  7

3  20 11

4  20 10

5  12 13

6  17 15

7  15  9

8   3  8

9  14 12

10  3  9



 

如何理解这个数据:

  可以这样来, 就是说我拿了一个零件它的长是A,宽是B, 我在a, b 填入这些数据, 我总共查看了10个零件, 就得到上面这些数据

  这样这批零件矩形的长服从正态分布 均值是20, 方差是9,  而宽服从泊松分布 lambda是 10 (我们对正态分布强行取整,编译实验)


构造频率表

用 mytable <-table(A[[1]],A[[2]]) 直接得到

 

> mytable <-table(A[[1]],A[[2]])

> mytable

    

     7 8 9 10 11 12 13 14 15

  3  0 1 1  0  0  0  0  0  0

  12 0 0 0  0  0  0  1  0  0

  14 0 0 0  0  0  1  0  0  0

  15 0 0 1  0  0  0  0  0  0

  17 0 0 0  0  0  0  0  0  1

  20 0 0 0  1  1  0  0  0  0

  21 1 0 0  0  0  0  0  0  0

  22 0 0 0  0  0  0  0  1  0






如何理解:

 

   二维随机变量 X,Y 可能值构成矩阵中所有的点, 值表示样本的出现次数


求列的边沿概率密度

v = margin.table(mytable,1) /  margin.table(mytable)

> v = margin.table(mytable,1) /  margin.table(mytable) 

> v



  3  12  14  15  17  20  21  22 

0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 


 

求数学期望

按照定义求, 先分离两个向量

 

as.vector(v) 是: 0.2 0.1 0.1 0.1 0.1 0.2 0.1 0.1 

as.integer(names(v)) 是:3  12  14  15  17  20  21  22 

 

 

求向量内积

 

> as.vector(v) %*% as.integer(names(v))

     [,1]

[1,] 14.7

 

貌似差别很大, 可能方差设置太大, 并且我很还对正态分布强行取整


如果我把样本个数调节到1000, 就与生成数据时设定的 20 很接近了


 

> A <- data.frame(a=round(rnorm(1000,20,9)), b=rpois(1000, lambda=10))

> mytable <-table(A[[1]],A[[2]])

> v = margin.table(mytable,1) /  margin.table(mytable)

> as.vector(v) %*% as.integer(names(v))

      [,1]

[1,] 19.88


 

 

你可能感兴趣的:(R语言)