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


原文地址:https://www.cnblogs.com/xinyuyuanm/p/3072081.html