# RE: st: 3D surface plot of joint density

 From "Mak, Timothy" <[email protected]> To "[email protected]" <[email protected]> Subject RE: st: 3D surface plot of joint density Date Thu, 3 Sep 2009 14:41:20 +0100

```Nice graph!

Tim

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of maurizio.pisati
Sent: 03 September 2009 08:19
To: [email protected]
Subject: Re: st: 3D surface plot of joint density

In Stata, you can draw 2D surface plots using a
combination of  user-written programs. Here's an example
taken from the help file of the  user-written program
-spkde-, available from the Boston SSC Archive:

-spkde- can be used also for estimating the joint
probability density  function of any pair of quantitative
variables (for an alternative, see  Stata program
-kdens2-, written by Christopher F. Baum and available
from the Boston SSC Archive). The user-written program
-spmap-  (available from the Boston SSC Archive) can then
be used to draw the  corresponding 2D density plot. To
this purpose, it is advised to make  use of -mylabels-, a
Stata program written by Nicholas J. Cox and  available
from the Boston SSC Archive.

As an example, let us estimate and plot the bivariate
probability  density function for two of the variables
included in the auto dataset:  -mpg- and -price-. This can
be done in four steps as follows:

* 1. Normalize variables in the range [0,1]

sysuse "auto.dta", clear
summarize price mpg
clonevar x = mpg
clonevar y = price
replace x = (x-0) / (50-0)
replace y = (y-0) / (20000-0)
mylabels 0(10)50, myscale((@-0) / (50-0)) local(XLAB)
mylabels 0(5000)20000, myscale((@-0) / (20000-0))
local(YLAB)
keep x y
save "xy.dta", replace

* 2. Generate a 100x100 grid

spgrid, shape(hexagonal) xdim(100)   ///
xrange(0 1) yrange(0 1)            ///
dots replace                       ///
cells("2D-GridCells.dta")          ///
points("2D-GridPoints.dta")

* 3. Estimate the bivariate probability density function

spkde using "2D-GridPoints.dta",   ///
xcoord(x) ycoord(y)              ///
bandwidth(fbw) fbw(0.1) dots     ///
saving("2D-Kde.dta", replace)

* 4. Draw the density plot

use "2D-Kde.dta", clear
recode lambda (.=0)
spmap lambda using "2D-GridCells.dta",      ///
id(spgrid_id) clnum(20) fcolor(Rainbow)   ///
ocolor(none ..) legend(off)               ///
point(data("xy.dta") x(x) y(y))           ///
freestyle aspectratio(1)                  ///
xtitle(" " "Mileage (mpg)")               ///
xlab(`XLAB')                              ///
ytitle("Price" " ")                       ///
ylab(`YLAB', angle(0))

Best wishes,
Maurizio Pisati

dgill wrote:
I am trying to generate a graph of the joint density of
two variables (bmi and age).
I am aware of the 3 variable graphing packages such
as scat3 and gr39, but those ask for 3 separate variables.
I want my 3rd dimension to be the joint density, not
another variable.

My data are individuals followed over time. So I have
their age and their body mass for each year of their
life.

Can anyone point me in the right direction?

-Donna Gilleskie

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```