欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/5/22 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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)) > Aa  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]]) > mytable7 8 9 10 11 12 13 14 153  0 1 1  0  0  0  0  0  012 0 0 0  0  0  0  1  0  014 0 0 0  0  0  1  0  0  015 0 0 1  0  0  0  0  0  017 0 0 0  0  0  0  0  0  120 0 0 0  1  1  0  0  0  021 1 0 0  0  0  0  0  0  022 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) > v3 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语言:求二维变量数学期望的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。