
多元正态分布
-
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])
效果如下: