How to draw the pairwise marginal distribution for each pair of parameters in a grid using ggplot2

Assuming I have the posterior samples for each of the four parameters. My question is how to plot the pairwise marginal distribution on a grid of 4*4=16 with ggplot2?

The easiest solution I find is to use ggpairs() from GGally package in R.  The original post is at stackoverflow.

I paste the toy sample dataset named “df” which is a data.frame with four variables x, y, z, w below:

The code using ggpairs() is below:

library(GGally)
ggpairs(df,
 upper = list(continuous = "density"),
 lower = list(combo = "facetdensity"))

print(df)
# x y z w
#1 0.49916998 -0.07439680 0.37731097 0.0927331640
#2 0.25281542 -1.35130718 1.02680343 0.8462638556
#3 0.50950876 -0.22157249 -0.71134553 -0.6137126948
#4 0.28740609 -0.17460743 -0.62504812 -0.7658094835
#5 0.28220492 -0.47080289 -0.33799637 -0.7032576540
#6 -0.06108038 -0.49756810 0.49099505 0.5606988283
#7 0.29427440 -1.14998030 0.89409384 0.5656682378
#8 -0.37378096 -1.37798177 1.22424964 1.0976507702
#9 0.24306941 -0.41519951 0.17502049 -0.1261603208
#10 0.45686871 -0.08291032 0.75929106 0.7457002259
#11 -0.16567173 -1.16855088 0.59439600 0.6410396945
#12 0.22274809 -0.19632766 0.27193362 0.5532901113
#13 1.25555629 0.24633499 -0.39836999 -0.5945792966
#14 1.30440121 0.05595755 1.04363679 0.7379212885
#15 -0.53739075 -0.01977930 0.22634275 0.4699563173
#16 0.17740551 -0.56039760 -0.03278126 -0.0002523205
#17 1.02873716 0.05929581 -0.74931661 -0.8830775310
#18 -0.13417946 -0.60421101 -0.24532606 -0.1951831558
#19 0.11552305 -0.14462104 0.28545703 -0.2527437818
#20 0.71783902 -0.12285529 1.23488185 1.3224880574

You can see the plot produced by ggpairs() by clicking the following link:

samplePlot

The upper triangle denotes the estimated joint kernel density estimation and the lower triangle shows the scatter plot of the pair of variables and the diagonal elements shows the density estimation for each variable itself.

Advertisements

2 thoughts on “How to draw the pairwise marginal distribution for each pair of parameters in a grid using ggplot2

  1. Thank you so much for putting such a post which was so useful for me. It’s about one day that I’m looking for a way to plot such a diagram in R and I couldn’t. Finally I found your solution. Do you know how I can define confidence limits for contours? I only need two line of each contour related to 68 and 95 percent confidence limits.

    Like

  2. Hi,

    Thank you for your encouraging comments. I searched a little, for ggpair() function, I am not aware of an easy solution. However, you can achieve this goal using ggplot2 or lattice based on this post:

    http://stackoverflow.com/questions/15075157/plot-95-confidence-limits-in-scatterplot

    If you like the arrangement of ggpair() , you can custom the plot in each grid, I remember the instructions should be found from the documentation of GGally.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s