✅ 操作成功!

多元正态分布

发布时间:2023-06-16 作者:admin 来源:文学

多元正态分布

多元正态分布

-

2023年3月19日发(作者:橘子花开)

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(r(max(zorder)))[zorder])

效果如下:

👁️ 阅读量:0