R语言与多元统计分析 —— 多元正态分布

1、如何用R语言画二元正态分布的曲面图形

下面主要用两种技术来实现:

注意:z 的列维是 y 的长度,行维是 x 的长度(即 z 包含每一种可能的 (x, y) 点 的值)

        第一种使用 persp(x, y, z)函数:下面看代码

fn = function(x, y) {
  sigma <- matrix(c(20,0,0,20), c(2,2))
  u <- c(0,0)
  sSigma <- solve(sigma)
  exp(- ((x-u[1])^2 * sSigma[1,1] + 2*(x-u[1]) * (y-u[2]) * sSigma[1,2] + (y-u[2])^2 * sSigma[2,2]) )/(2*pi*det(sigma)^0.5)

}
a = 10
x = seq(-a, a, 0.1)
y = seq(-a, a, 0.1)
#outer函数就是为每一个点(x,y)得到对应的z 即 z[i,j] = fn(x[i], y[j]),有点类似 matlab 的 meshgrid
z = outer(x, y, fn)
persp(x, y, z)

   

第二种方法是用 rgl,这也是一个画 3D 图的好工具,不过原理还是一样,贴上代码:

fn = function(x, y) {
  sigma <- matrix(c(20,0.75,0.75,20), c(2,2))
  u <- c(0,0)
  sSigma <- solve(sigma)
  exp(- ((x-u[1])^2 * sSigma[1,1] + 2*(x-u[1]) * (y-u[2]) * sSigma[1,2] + (y-u[2])^2 * sSigma[2,2]) )/(2*pi*det(sigma)^0.5)

}
a = 10
x = seq(-a, a, 0.1)
y = seq(-a, a, 0.1)
z = outer(x, y, fn)

library(rgl)
zorder = rank(z)
persp3d(x, y, z, col = rainbow(as.integer(max(zorder)))[zorder]) 

      效果如下:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值