gpt4 book ai didi

r - 在 R 中设计多元密度图

转载 作者:行者123 更新时间:2023-12-03 22:34:37 25 4
gpt4 key购买 nike

我使用 Tikz 看到了一个吸引人的多元密度图,想知道是否有办法在 R 中用我自己的数据复制这个图。我不熟悉 Tikz,但我发现这个引用似乎暗示我可以使用R 中的此功能。http://www.texample.net/tikz/examples/tikzdevice-demo/

简而言之,使用提供的两个数据样本生成与下面显示的图非常相似(当然分布不同)的图的最佳方法是什么?

以下是一些可用于创建分布图的示例数据。

# Sample data
var1 <- exp(rlnorm(100000, meanlog=0.03, sdlog=0.15))/100
var2 <- 1-(var1 + rnorm(100000, 0, 0.01))

这是我找到原始图表的引用页面

https://tex.stackexchange.com/questions/31708/draw-a-bivariate-normal-distribution-in-tikz

enter image description here

最佳答案

您可以从 persp 开始函数来绘制 3 维图(如果您从数据而不是公式中执行此操作,那么您需要首先使用某种形式的密度估计,示例图看起来足够平滑,它可能基于公式而不是根据数据估计)。然后使用来自 persp 的返回值投影额外的绘图信息。

可能还有一个使用 rgl 包的选项,我似乎记得它有一种方法可以将绘图投影到轴平面上。

编辑

下面是一些示例代码,可帮助您入门。它使用参数分布,但可以适应使用 kde2d从 MASS 或其他从数据估计密度的方法:

x <- seq( -3, 3, length=25 )
y <- seq( -3, 3, length=25 )

z <- outer( x, y, function(x,y) dnorm(x,0,0.5)*dnorm(y,0,1) )
zl <- c(0,4*max(z))

## persp plot
trmat <- persp(x,y,z, theta=120, zlim=zl, box=FALSE, shade=0.5)

## x grid
for( i in seq(-3,3, by=0.5 ) ) {
lines( trans3d( c(i,i), c(-3,-3), zl, trmat ), col='grey' )
}
for( i in seq(0,zl[2], length=7) ) {
lines( trans3d( c(-3,3), c(-3,-3), c(i,i), trmat ), col='grey' )
}

## marginal for x

lines( trans3d( seq(-3,3,length=100), -3, dnorm(seq(-3,3,length=100),0,.5),
trmat), lwd=2, col='blue' )

## y grid
for( i in seq(-3,3, by=0.5 ) ) {
lines( trans3d( c(-3,-3), c(i,i), zl, trmat ), col='grey' )
}
for( i in seq(0,zl[2], length=7) ) {
lines( trans3d( c(-3,-3), c(-3,3), c(i,i), trmat ), col='grey' )
}

## marginal for y

lines( trans3d( -3, seq(-3,3,length=100), dnorm(seq(-3,3,length=100),0,1),
trmat), lwd=2, col='blue' )

enter image description here

关于r - 在 R 中设计多元密度图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22545245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com