Подтвердить что ты не робот

Проектирование многомерной плотности в 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/info/31708/draw-a-bivariate-normal-distribution-in-tikz

enter image description here

4b9b3361

Ответ 1

Вы можете начать с функции persp, чтобы нарисовать трехмерный график (если вы делаете это по данным, а не по формуле, тогда вам нужно сначала использовать некоторую форму оценки плотности, примерный график выглядит достаточно гладко, вероятно, основанный на формуле, а не на основании данных). Затем используйте возвращаемое значение из persp, чтобы спроектировать дополнительную информацию о графике.

Также может быть опция с использованием пакета rgl, я, кажется, помню, что у него есть способ проецировать график на плоскости осей.

Edit

Вот пример кода, чтобы вы начали. Он использует параметрическое распределение, но может быть адаптирован для использования 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' )

enter image description here