簡體   English   中英

在R中設計多變量密度圖

[英]Designing multivariate density plot in R

我看到了使用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

在此輸入圖像描述

您可以從persp函數開始繪制三維圖(如果您從數據而不是公式執行此操作,則需要首先使用某種形式的密度估計,示例圖看起來足夠平滑,可能基於公式而不是從數據估計)。 然后使用persp的返回值來投影其他繪圖信息。

可能還有一個使用rgl包的選項,我似乎記得它有一種方法將繪圖投影到軸平面上。

編輯

這里有一些示例代碼可以幫助您入門。 它使用參數分布,但可以適用於使用MASS中的kde2d或其他估算數據密度的方法:

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' )

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM