繁体   English   中英

如何在R中为二元正态分布绘制密度函数的动态和可旋转3D

[英]How to plot dynamic and rotatable 3D of the density function for the bivariate normal distribution in R

install.packages("scatterplot3d")
library(scatterplot3d)
library("mvtnorm")
x1 <- x2 <- seq(-10, 10, length = 51)
dens <- matrix(dmvnorm(expand.grid(x1, x2),
                   sigma = rbind(c(3, 2), c(2, 3))),
           ncol = length(x1))
s3d <- scatterplot3d(x1, x2,
                 seq(min(dens), max(dens), length = length(x1)),
                 type = "n", grid = FALSE, angle = 70,
                 zlab = expression(f(x[1], x[2])),
                 xlab = expression(x[1]), ylab = expression(x[2]),
                 main = "Bivariate normal distribution")
text(s3d$xyz.convert(-1, 10, 0.07),
labels = expression(f(x) == frac(1, sqrt((2 * pi)^n *phantom(".") * det(Sigma[X]))) *     
phantom(".") * exp * {bgroup("(", - scriptstyle(frac(1, 2) * phantom(".")) *
(x - mu)^T * Sigma[X]^-1 * (x - mu), ")")}))
text(s3d$xyz.convert(1.5, 10, 0.05),
labels = expression("with" * phantom("m") *mu == bgroup("(", atop(0, 0), ")") * 
phantom(".") * "," *phantom(0) *
{Sigma[X] == bgroup("(", atop(3 * phantom(0) * 2,2 * phantom(0) * 3), ")")}))
for(i in length(x1):1)
s3d$points3d(rep(x1[i], length(x2)), x2, dens[i,], type = "l")
for(i in length(x2):1)
s3d$points3d(x1, rep(x2[i], length(x1)), dens[,i], type = "l")

如何为R中的二元正态分布绘制密度函数的动态和可旋转3D?

如何在http://personal.kenyon.edu/hartlaub/MellonProject/Bivariate2.html中绘制第二个图

 library(emdbook)
 library(rgl)
 curve3d(dmvnorm(c(x,y),mu=c(0,0),Sigma=diag(2)),
         sys3d="rgl",col="blue",
         xlim=c(-3,3),ylim=c(-3,3))

如果您想要线框图,则

 curve3d(dmvnorm(c(x,y),mu=c(0,0),Sigma=diag(2)),
         sys3d="rgl",front="line",back="line",
         xlim=c(-3,3),ylim=c(-3,3))

应该可以工作(请参阅?rgl.material )。

如果要向此绘图添加其他元素,请参见(例如) ?lines3d?points3d (您将需要自己计算坐标: ellipse包可能对此有用)。

绘制3D的另一种方法:

library(mnormt)               
mu <- c(0,0)
sigma <- matrix(c(1,0,0,1),2,2)                                
x<-seq(-4,4,0.1)
y<-seq(-4,4,0.1)
f<-function(x,y){dmnorm(cbind(x,y), mu, sigma)}
z<-outer(x,y,f)
persp(x,y,z, box=T,axes=T, ticktype="detailed", theta=40,phi=0)
persp(x,y,z, theta=30,phi=50)
persp(x,y,z, theta=100,phi=40,col="blue")
wireframe(z)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM