And now the full code…


Using Bayesian Inference to calculate uncertainty around ellipses

So far these still just point-metrics that describe the width of the isotopic niche. That is, they are single numbers for each group, which means that we can’t compare one group to another in a statisical sense as we lack a measure of the uncertainty around each estimate. This is where we can use Bayesian Inference to quantify the error associated with fitting these ellipses to each group, that arises from both the number of samples we have, and also their distribution.

Essentially, what the MCMC algorithm does is generate a distribution of covariance matrices that to a greater or lesser extent (in terms of likelihood) describe the observed data. It does so, as is the general case in Bayesian Inference, by combing the prior probability with the likelihood of the data for a given covariance matrix.

SIBER uses the jags package to fit the Bayesian model and so we need to specify the parameters of the simulation run, including: run length, burn-in period, number of chains etc…


# options for running jags
parms <- list()
parms$n.iter <- 2 * 10^4   # number of iterations to run the model for
parms$n.burnin <- 1 * 10^3 # discard the first set of values
parms$n.thin <- 10     # thin the posterior by this many
parms$n.chains <- 2        # run this many chains

# define the priors
priors <- list()
priors$R <- 1 * diag(2)
priors$k <- 2
priors$tau.mu <- 1.0E-3

# fit the ellipses which uses an Inverse Wishart prior
# on the covariance matrix Sigma, and a vague normal prior on the 
# means. Fitting is via the JAGS method.
ellipses.posterior <- siberMVN(siber.example, parms, priors)
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 20
   Unobserved stochastic nodes: 3
   Total graph size: 35

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 20
   Unobserved stochastic nodes: 3
   Total graph size: 35

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 20
   Unobserved stochastic nodes: 3
   Total graph size: 35

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 20
   Unobserved stochastic nodes: 3
   Total graph size: 35

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 8
   Unobserved stochastic nodes: 3
   Total graph size: 23

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 8
   Unobserved stochastic nodes: 3
   Total graph size: 23

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 8
   Unobserved stochastic nodes: 3
   Total graph size: 23

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 8
   Unobserved stochastic nodes: 3
   Total graph size: 23

Initializing model


  |                                                        
  |                                                  |   0%
  |                                                        
  |*                                                 |   2%
  |                                                        
  |**                                                |   4%
  |                                                        
  |***                                               |   6%
  |                                                        
  |****                                              |   8%
  |                                                        
  |*****                                             |  10%
  |                                                        
  |******                                            |  12%
  |                                                        
  |*******                                           |  14%
  |                                                        
  |********                                          |  16%
  |                                                        
  |*********                                         |  18%
  |                                                        
  |**********                                        |  20%
  |                                                        
  |***********                                       |  22%
  |                                                        
  |************                                      |  24%
  |                                                        
  |*************                                     |  26%
  |                                                        
  |**************                                    |  28%
  |                                                        
  |***************                                   |  30%
  |                                                        
  |****************                                  |  32%
  |                                                        
  |*****************                                 |  34%
  |                                                        
  |******************                                |  36%
  |                                                        
  |*******************                               |  38%
  |                                                        
  |********************                              |  40%
  |                                                        
  |*********************                             |  42%
  |                                                        
  |**********************                            |  44%
  |                                                        
  |***********************                           |  46%
  |                                                        
  |************************                          |  48%
  |                                                        
  |*************************                         |  50%
  |                                                        
  |**************************                        |  52%
  |                                                        
  |***************************                       |  54%
  |                                                        
  |****************************                      |  56%
  |                                                        
  |*****************************                     |  58%
  |                                                        
  |******************************                    |  60%
  |                                                        
  |*******************************                   |  62%
  |                                                        
  |********************************                  |  64%
  |                                                        
  |*********************************                 |  66%
  |                                                        
  |**********************************                |  68%
  |                                                        
  |***********************************               |  70%
  |                                                        
  |************************************              |  72%
  |                                                        
  |*************************************             |  74%
  |                                                        
  |**************************************            |  76%
  |                                                        
  |***************************************           |  78%
  |                                                        
  |****************************************          |  80%
  |                                                        
  |*****************************************         |  82%
  |                                                        
  |******************************************        |  84%
  |                                                        
  |*******************************************       |  86%
  |                                                        
  |********************************************      |  88%
  |                                                        
  |*********************************************     |  90%
  |                                                        
  |**********************************************    |  92%
  |                                                        
  |***********************************************   |  94%
  |                                                        
  |************************************************  |  96%
  |                                                        
  |************************************************* |  98%
  |                                                        
  |**************************************************| 100%

What we end up with is a range of ellipses that could explain the data, with more of them clustered around the most likely solution. However, one cannot simply take an average across these covariance matrices, as there are strict mathematical properties that must be maintained. The result of this is that it is not possible to plot a mean, median or modal Bayesian Standard Ellipse; instead we must calculate each one of the ellipse’s area, and then present summary statistics of this derived measurement. SIBER contains a function that will automatically loop over all the groups and do this.

The plots below represent the posterior distribution of the SEA_B fitted to each of the 4 groups in our dataset.


Comparing the posterior distributions

In order to test whether one group’s ellipse is smaller or larger than another, we can simply calculate the probability that its posterior distribution is smaller (or larger). This is acheived by comparing each pair of posterior draws for both groups, and dtermining which is smaller in magnitude. We then find the proportion of draws that are smaller, and this is a direct proxy for the probability that one group’s posterior distribution (of ellipse size in this case) is smaller than the other.

Here, we first calculate the proportion, and hence probability, of the SEA.B for group 1 being smaller than the SEA.B for group 2.

Pg1.lt.g2 <- sum( SEA.B[,1] < SEA.B[,2] ) / nrow(SEA.B)
print(Pg1.lt.g2)
[1] 1

So, in this case, all of the estimates for groups 1’s ellipse are smaller than for group 2; although we could probably guess at this given that there appears to be no overlap between then 95% credible intervals of the two groups (see the figure above).

Then we can do exactly the same for groups 1 and 3.

Pg1.lt.g3 <- sum( SEA.B[,1] < SEA.B[,3] ) / nrow(SEA.B)
print(Pg1.lt.g3 )
[1] 1

And then for the other pairings:

Pg1.lt.g4 <- sum( SEA.B[,1] < SEA.B[,4] ) / nrow(SEA.B)
print(Pg1.lt.g4)
[1] 1
Pg2.lt.g3 <- sum( SEA.B[,2] < SEA.B[,3] ) / nrow(SEA.B)
print(Pg2.lt.g3)
[1] 1
Pg3.lt.g4 <- sum( SEA.B[,3] < SEA.B[,4] ) / nrow(SEA.B)
print(Pg3.lt.g4)
[1] 0.011
Pg5.lt.g7 <- sum( SEA.B[,5] < SEA.B[,7] ) / nrow(SEA.B)
print(Pg5.lt.g7)
[1] 0.5715

Overlap Between Ellipses

One can calculate the overlap between two (or more) ellipses. In the first instance, this overlap is simply the area, in units of per mil squared, contained by the shape that lies within the overlapping region. This overlap is most easily calculated by using the SEAc of each ellipse.

The overlap between the SEAc for groups 3 and 4 in Community 1 is given by:

```r

overlap.G3.G4 <- maxLikOverlap(\1.3\, \1.4\, siber.example, p = 0.95, n =100)

<!-- rnb-source-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->



And the overlap between SEAc of groups 1.2 and 2.1 is given by:


<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxub3ZlcmxhcC5DMUcyLkMyRzEgPC0gbWF4TGlrT3ZlcmxhcChcIjEuMlwiLCBcIjIuMVwiLCBzaWJlci5leGFtcGxlLCBwID0gMC45NSwgbiA9IDEwMClcbmBgYCJ9 -->

```r
overlap.C1G2.C2G1 <- maxLikOverlap("1.2", "2.1", siber.example, p = 0.95, n = 100)

One might then wish to calculate the proportion overlap; athough one then runs into a choice as to what the demoninator will be in the equation. You could for instance calculate the proportion of A that overlaps with B, the proporiton of B that overlaps with A, or the proportion of A and B that overlap with each other.

print(prop.of.both)
[1] 0.1024213

A problem with this simple overlap calculation is that it yields a point-estimate of overlap based on the maximum likelihood estimated SEA_c. One can instead calculate a distribution of overlap based on the posterior distirbutions of the fitted ellipses. It can be a bit slow to calculate this overlap, so you may want to drop the number of draws if your computer is slow.

bayes.overlap.G3.G4 <- bayesianOverlap("1.3", "1.4",
                                       ellipses.posterior, 
                                       draws = 100, 
                                       p.interval = 0.95,
                                       n = 360)
print(bayes.overlap.G3.G4)
NA
NA

And summarise the credible intervals of the Bayesian overlap output. Note that this code does not work well on the small number of posterior draws we are using for this basic example - for one it returns negative values which is not possible, but is arising as the smoother has not got enough information to stay close to or within the positive number range.

# and we can calculate the corresponding credible intervals using
# our code from above again
# call to hdrcde:hdr using lapply()
overlap.credibles <- lapply(
  as.data.frame(bayes.overlap.G3.G4), 
  function(x,...){tmp<-hdrcde::hdr(x)$hdr},
  prob = cr.p)

print(overlap.credibles)
$area1
        [,1]     [,2]
99%  82.2966 329.4816
95% 133.5036 274.6043
50% 175.8780 230.8007

$area2
        [,1]     [,2]
99% 31.74017 164.1592
95% 54.65753 140.3323
50% 83.00921 111.4760

$overlap
           [,1]     [,2]
99% -15.3116934 78.72149
95%   0.4820691 55.66641
50%  17.6210416 35.53631
LS0tCnRpdGxlOiAidGVzdGluZyBzaWJlciB3aXRoIHRleHQgbGFiZWxzIGZvciBncm91cHMgYW5kIGNvbW11bml0aWVzIgphdXRob3I6ICJBbmRyZXcgTCBKYWNrc29uIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkFuZCBub3cgdGhlIGZ1bGwgY29kZS4uLgoKYGBge3IgaW1wb3J0LWRhdGEsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSA2fQoKIyBybShsaXN0ID0gbHMoKSkgIyBjbGVhciB0aGUgbWVtb3J5IG9mIG9iamVjdHMKCiMgbG9hZCB0aGUgc2lhciBwYWNrYWdlIG9mIGZ1bmN0aW9ucwpsaWJyYXJ5KFNJQkVSKQoKIyByZWFkIGluIHRoZSBkYXRhCiMgcmVhZCBpbiB0aGUgZGF0YQpteWRhdGEgPC0gcmVhZC5jc3YoIi4uL2RhdGEvZXhhbXBsZV9sYXltYW5fZGF0YV9hbGwuY3N2IiwKICAgICAgICAgICAgICAgICAgIGhlYWRlcj1UUlVFKQoKIyBjcmVhdGUgdGhlIHNpYmVyIG9iamVjdApzaWJlci5leGFtcGxlIDwtIGNyZWF0ZVNpYmVyT2JqZWN0KG15ZGF0YSkKCiMgQ3JlYXRlIGxpc3RzIG9mIHBsb3R0aW5nIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgb253YXJkcyB0byBlYWNoIAojIG9mIHRoZSB0aHJlZSBwbG90dGluZyBmdW5jdGlvbnMuCmNvbW11bml0eS5odWxscy5hcmdzIDwtIGxpc3QoY29sID0gMSwgbHR5ID0gMSwgbHdkID0gMSkKZ3JvdXAuZWxsaXBzZXMuYXJncyAgPC0gbGlzdChuID0gMTAwLCBwLmludGVydmFsID0gMC45NSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHR5ID0gMSwgbHdkID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGwuc2FtcGxlID0gVFJVRSkKZ3JvdXAuaHVsbC5hcmdzICAgICAgPC0gbGlzdChsdHkgPSAyLCBjb2wgPSAiZ3JleTIwIikKCgojIGVsbGlwc2VzIGFuZCBncm91cC5odWxscyBhcmUgc2V0IHRvIFRSVUUgb3IgVCBmb3Igc2hvcnQgdG8gZm9yY2UKIyB0aGVpciBwbG90dGluZy4gCnBhcihtZnJvdz1jKDEsMSkpCnBsb3RTaWJlck9iamVjdChzaWJlci5leGFtcGxlLAogICAgICAgICAgICAgICAgICBheC5wYWQgPSAyLCAKICAgICAgICAgICAgICAgICAgaHVsbHMgPSBGQUxTRSwgY29tbXVuaXR5Lmh1bGxzLmFyZ3MsIAogICAgICAgICAgICAgICAgICBlbGxpcHNlcyA9IFRSVUUsIGdyb3VwLmVsbGlwc2VzLmFyZ3MsCiAgICAgICAgICAgICAgICAgIGdyb3VwLmh1bGxzID0gVFJVRSwgZ3JvdXAuaHVsbC5hcmdzLAogICAgICAgICAgICAgICAgICBidHkgPSAiTCIsCiAgICAgICAgICAgICAgICAgIGlzby5vcmRlciA9IGMoMSwyKSwKICAgICAgICAgICAgICAgICAgeGxhYiA9IGV4cHJlc3Npb24oe2RlbHRhfV4xMypDfidcdTIwMzAnKSwKICAgICAgICAgICAgICAgICAgeWxhYiA9IGV4cHJlc3Npb24oe2RlbHRhfV4xNSpOfidcdTIwMzAnKQogICAgICAgICAgICAgICAgICApCgoKIyBZb3UgY2FuIGFkZCBtb3JlIGVsbGlwc2VzIGJ5IGRpcmVjdGx5IGNhbGxpbmcgcGxvdC5ncm91cC5lbGxpcHNlcygpCiMgQWRkIGFuIGFkZGl0aW9uYWwgcC5pbnRlcnZhbCAlIHByZWRpY3Rpb24gZWxsaWxwc2UKcGxvdEdyb3VwRWxsaXBzZXMoc2liZXIuZXhhbXBsZSwgbiA9IDEwMCwgcC5pbnRlcnZhbCA9IDAuNTAsCiAgICAgICAgICAgICAgICAgICAgbHR5ID0gMSwgbHdkID0gMiwgc21hbGwuc2FtcGxlID0gVFJVRSkKCiMgb3IgeW91IGNhbiBhZGQgdGhlIFhYJSBjb25maWRlbmNlIGludGVydmFsIGFyb3VuZCB0aGUgYml2YXJpYXRlIG1lYW5zCiMgYnkgc3BlY2lmeWluZyBjaS5tZWFuID0gVCBhbG9uZyB3aXRoIHdoYXRldmVyIHAuaW50ZXJ2YWwgeW91IHdhbnQuCnBsb3RHcm91cEVsbGlwc2VzKHNpYmVyLmV4YW1wbGUsIG4gPSAxMDAsIHAuaW50ZXJ2YWwgPSAwLjk1LAogICAgICAgICAgICAgICAgICBjaS5tZWFuID0gVFJVRSwgbHR5ID0gMSwgbHdkID0gMikKCgojIENhbGN1bGF0ZSBzdW1hbXJ5IHN0YXRpc3RpY3MgZm9yIGVhY2ggZ3JvdXA6IFRBLCBTRUEgYW5kIFNFQWMKZ3JvdXAuTUwgPC0gZ3JvdXBNZXRyaWNzTUwoc2liZXIuZXhhbXBsZSkKcHJpbnQoZ3JvdXAuTUwpCgojIGFkZCBhIGxlZ2VuZApsZWdlbmQoInRvcHJpZ2h0IiwgY29sbmFtZXMoZ3JvdXAuTUwpLCAKICAgICAgIHBjaCA9IGMoMSwxLDEsMSwyLDIsMiwyKSwgY29sID0gYygxOjQsIDE6NCksIGx0eSA9IDEpCgpgYGAKCioqKgoKIyMgVXNpbmcgQmF5ZXNpYW4gSW5mZXJlbmNlIHRvIGNhbGN1bGF0ZSB1bmNlcnRhaW50eSBhcm91bmQgZWxsaXBzZXMKU28gZmFyIHRoZXNlIHN0aWxsIGp1c3QgcG9pbnQtbWV0cmljcyB0aGF0IGRlc2NyaWJlIHRoZSB3aWR0aCBvZiB0aGUgaXNvdG9waWMgbmljaGUuIFRoYXQgaXMsIHRoZXkgYXJlIHNpbmdsZSBudW1iZXJzIGZvciBlYWNoIGdyb3VwLCB3aGljaCBtZWFucyB0aGF0IHdlIGNhbid0IGNvbXBhcmUgb25lIGdyb3VwIHRvIGFub3RoZXIgaW4gYSBzdGF0aXNpY2FsIHNlbnNlIGFzIHdlIGxhY2sgYSBtZWFzdXJlIG9mIHRoZSB1bmNlcnRhaW50eSBhcm91bmQgZWFjaCBlc3RpbWF0ZS4gVGhpcyBpcyB3aGVyZSB3ZSBjYW4gdXNlIEJheWVzaWFuIEluZmVyZW5jZSB0byBxdWFudGlmeSB0aGUgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIGZpdHRpbmcgdGhlc2UgZWxsaXBzZXMgdG8gZWFjaCBncm91cCwgdGhhdCBhcmlzZXMgZnJvbSBib3RoIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB3ZSBoYXZlLCBhbmQgYWxzbyB0aGVpciBkaXN0cmlidXRpb24uCgpFc3NlbnRpYWxseSwgd2hhdCB0aGUgTUNNQyBhbGdvcml0aG0gZG9lcyBpcyBnZW5lcmF0ZSBhIGRpc3RyaWJ1dGlvbiBvZiBjb3ZhcmlhbmNlIG1hdHJpY2VzIHRoYXQgdG8gYSBncmVhdGVyIG9yIGxlc3NlciBleHRlbnQgKGluIHRlcm1zIG9mIGxpa2VsaWhvb2QpIGRlc2NyaWJlIHRoZSBvYnNlcnZlZCBkYXRhLiBJdCBkb2VzIHNvLCBhcyBpcyB0aGUgZ2VuZXJhbCBjYXNlIGluIEJheWVzaWFuIEluZmVyZW5jZSwgYnkgY29tYmluZyB0aGUgcHJpb3IgcHJvYmFiaWxpdHkgd2l0aCB0aGUgbGlrZWxpaG9vZCBvZiB0aGUgZGF0YSBmb3IgYSBnaXZlbiBjb3ZhcmlhbmNlIG1hdHJpeC4KClNJQkVSIHVzZXMgdGhlIGphZ3MgcGFja2FnZSB0byBmaXQgdGhlIEJheWVzaWFuIG1vZGVsIGFuZCBzbyB3ZSBuZWVkIHRvIHNwZWNpZnkgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHNpbXVsYXRpb24gcnVuLCBpbmNsdWRpbmc6IHJ1biBsZW5ndGgsIGJ1cm4taW4gcGVyaW9kLCBudW1iZXIgb2YgY2hhaW5zIGV0Yy4uLgoKYGBge3IgZml0LWJheWVzfQoKIyBvcHRpb25zIGZvciBydW5uaW5nIGphZ3MKcGFybXMgPC0gbGlzdCgpCnBhcm1zJG4uaXRlciA8LSAyICogMTBeNCAgICMgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcnVuIHRoZSBtb2RlbCBmb3IKcGFybXMkbi5idXJuaW4gPC0gMSAqIDEwXjMgIyBkaXNjYXJkIHRoZSBmaXJzdCBzZXQgb2YgdmFsdWVzCnBhcm1zJG4udGhpbiA8LSAxMCAgICAgIyB0aGluIHRoZSBwb3N0ZXJpb3IgYnkgdGhpcyBtYW55CnBhcm1zJG4uY2hhaW5zIDwtIDIgICAgICAgICMgcnVuIHRoaXMgbWFueSBjaGFpbnMKCiMgZGVmaW5lIHRoZSBwcmlvcnMKcHJpb3JzIDwtIGxpc3QoKQpwcmlvcnMkUiA8LSAxICogZGlhZygyKQpwcmlvcnMkayA8LSAyCnByaW9ycyR0YXUubXUgPC0gMS4wRS0zCgojIGZpdCB0aGUgZWxsaXBzZXMgd2hpY2ggdXNlcyBhbiBJbnZlcnNlIFdpc2hhcnQgcHJpb3IKIyBvbiB0aGUgY292YXJpYW5jZSBtYXRyaXggU2lnbWEsIGFuZCBhIHZhZ3VlIG5vcm1hbCBwcmlvciBvbiB0aGUgCiMgbWVhbnMuIEZpdHRpbmcgaXMgdmlhIHRoZSBKQUdTIG1ldGhvZC4KZWxsaXBzZXMucG9zdGVyaW9yIDwtIHNpYmVyTVZOKHNpYmVyLmV4YW1wbGUsIHBhcm1zLCBwcmlvcnMpCgpgYGAKCldoYXQgd2UgZW5kIHVwIHdpdGggaXMgYSByYW5nZSBvZiBlbGxpcHNlcyB0aGF0IGNvdWxkIGV4cGxhaW4gdGhlIGRhdGEsIHdpdGggbW9yZSBvZiB0aGVtIGNsdXN0ZXJlZCBhcm91bmQgdGhlIG1vc3QgbGlrZWx5IHNvbHV0aW9uLiBIb3dldmVyLCBvbmUgY2Fubm90IHNpbXBseSB0YWtlIGFuIGF2ZXJhZ2UgYWNyb3NzIHRoZXNlIGNvdmFyaWFuY2UgbWF0cmljZXMsIGFzIHRoZXJlIGFyZSBzdHJpY3QgbWF0aGVtYXRpY2FsIHByb3BlcnRpZXMgdGhhdCBtdXN0IGJlIG1haW50YWluZWQuIFRoZSByZXN1bHQgb2YgdGhpcyBpcyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwbG90IGEgbWVhbiwgbWVkaWFuIG9yIG1vZGFsIEJheWVzaWFuIFN0YW5kYXJkIEVsbGlwc2U7IGluc3RlYWQgd2UgbXVzdCBjYWxjdWxhdGUgZWFjaCBvbmUgb2YgdGhlIGVsbGlwc2UncyBhcmVhLCBhbmQgdGhlbiBwcmVzZW50IHN1bW1hcnkgc3RhdGlzdGljcyBvZiB0aGlzIGRlcml2ZWQgbWVhc3VyZW1lbnQuIFNJQkVSIGNvbnRhaW5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vcCBvdmVyIGFsbCB0aGUgZ3JvdXBzIGFuZCBkbyB0aGlzLgoKVGhlIHBsb3RzIGJlbG93IHJlcHJlc2VudCB0aGUgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU0VBX0IgZml0dGVkIHRvIGVhY2ggb2YgdGhlIDQgZ3JvdXBzIGluIG91ciBkYXRhc2V0LgoKYGBge3IgcGxvdC1kYXRhLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDZ9CiMgCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFBsb3Qgb3V0IHNvbWUgb2YgdGhlIGRhdGEgYW5kIHJlc3VsdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIFRoZSBwb3N0ZXJpb3IgZXN0aW1hdGVzIG9mIHRoZSBlbGxpcHNlcyBmb3IgZWFjaCBncm91cCBjYW4gYmUgdXNlZCB0bwojIGNhbGN1bGF0ZSB0aGUgU0VBLkIgZm9yIGVhY2ggZ3JvdXAuClNFQS5CIDwtIHNpYmVyRWxsaXBzZXMoZWxsaXBzZXMucG9zdGVyaW9yKQoKc2liZXJEZW5zaXR5UGxvdChTRUEuQiwgeHRpY2tsYWJlbHMgPSBjb2xuYW1lcyhncm91cC5NTCksIAogICAgICAgICAgICAgICAgeGxhYiA9IGMoIkNvbW11bml0eSB8IEdyb3VwIiksCiAgICAgICAgICAgICAgICB5bGFiID0gZXhwcmVzc2lvbigiU3RhbmRhcmQgRWxsaXBzZSBBcmVhICIgKCdcdTIwMzAnIF4yKSApLAogICAgICAgICAgICAgICAgYnR5ID0gIkwiLAogICAgICAgICAgICAgICAgbGFzID0gMSwKICAgICAgICAgICAgICAgIG1haW4gPSAiU0lCRVIgZWxsaXBzZXMgb24gZWFjaCBncm91cCIsCiAgICAgICAgICAgICAgICBjdCA9ICJtZWRpYW4iCiAgICAgICAgICAgICAgICApCgojIEFkZCByZWQgeCdzIGZvciB0aGUgTUwgZXN0aW1hdGVkIFNFQS1jCnBvaW50cygxOm5jb2woU0VBLkIpLCBncm91cC5NTFszLF0sIGNvbD0icmVkIiwgcGNoID0gIngiLCBsd2QgPSAyKQoKIyBDYWxjdWxhdGUgc29tZSBjcmVkaWJsZSBpbnRlcnZhbHMgCmNyLnAgPC0gYygwLjk1LCAwLjk5KSAjIHZlY3RvciBvZiBxdWFudGlsZXMKCiMgY2FsbCB0byBoZHJjZGU6aGRyIHVzaW5nIGxhcHBseSgpClNFQS5CLmNyZWRpYmxlcyA8LSBsYXBwbHkoCiAgYXMuZGF0YS5mcmFtZShTRUEuQiksIAogIGZ1bmN0aW9uKHgsLi4uKXt0bXA8LWhkcmNkZTo6aGRyKHgpJGhkcn0sCiAgcHJvYiA9IGNyLnApCgpwcmludChTRUEuQi5jcmVkaWJsZXMpCgojIGRvIHNpbWlsYXIgdG8gZ2V0IHRoZSBtb2RlcywgdGFraW5nIGNhcmUgdG8gcGljayB1cCBtdWx0aW1vZGFsIHBvc3RlcmlvcgojIGRpc3RyaWJ1dGlvbnMgaWYgcHJlc2VudApTRUEuQi5tb2RlcyA8LSBsYXBwbHkoCiAgYXMuZGF0YS5mcmFtZShTRUEuQiksIAogIGZ1bmN0aW9uKHgsLi4uKXt0bXA8LWhkcmNkZTo6aGRyKHgpJG1vZGV9LAogIHByb2IgPSBjci5wLCBhbGwubW9kZXM9VCkKCnByaW50KFNFQS5CLm1vZGVzKQpgYGAKCioqKgoKIyMgQ29tcGFyaW5nIHRoZSBwb3N0ZXJpb3IgZGlzdHJpYnV0aW9ucwoKSW4gb3JkZXIgdG8gdGVzdCB3aGV0aGVyIG9uZSBncm91cCdzIGVsbGlwc2UgaXMgc21hbGxlciBvciBsYXJnZXIgdGhhbiBhbm90aGVyLCB3ZSBjYW4gc2ltcGx5IGNhbGN1bGF0ZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBpdHMgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiBpcyBzbWFsbGVyIChvciBsYXJnZXIpLiBUaGlzIGlzIGFjaGVpdmVkIGJ5IGNvbXBhcmluZyBlYWNoIHBhaXIgb2YgcG9zdGVyaW9yIGRyYXdzIGZvciBib3RoIGdyb3VwcywgYW5kIGR0ZXJtaW5pbmcgd2hpY2ggaXMgc21hbGxlciBpbiBtYWduaXR1ZGUuIFdlIHRoZW4gZmluZCB0aGUgcHJvcG9ydGlvbiBvZiBkcmF3cyB0aGF0IGFyZSBzbWFsbGVyLCBhbmQgdGhpcyBpcyBhIGRpcmVjdCBwcm94eSBmb3IgdGhlIHByb2JhYmlsaXR5IHRoYXQgb25lIGdyb3VwJ3MgcG9zdGVyaW9yIGRpc3RyaWJ1dGlvbiAob2YgZWxsaXBzZSBzaXplIGluIHRoaXMgY2FzZSkgaXMgc21hbGxlciB0aGFuIHRoZSBvdGhlci4KCgpIZXJlLCB3ZSBmaXJzdCBjYWxjdWxhdGUgdGhlIHByb3BvcnRpb24sIGFuZCBoZW5jZSBwcm9iYWJpbGl0eSwgb2YgdGhlIFNFQS5CIGZvciBncm91cCAxIGJlaW5nIHNtYWxsZXIgdGhhbiB0aGUgU0VBLkIgZm9yIGdyb3VwIDIuCgpgYGB7ciBwcm9iLWRpZmYtZzEyfQpQZzEubHQuZzIgPC0gc3VtKCBTRUEuQlssMV0gPCBTRUEuQlssMl0gKSAvIG5yb3coU0VBLkIpCnByaW50KFBnMS5sdC5nMikKYGBgCgpTbywgaW4gdGhpcyBjYXNlLCBhbGwgb2YgdGhlIGVzdGltYXRlcyBmb3IgZ3JvdXBzIDEncyBlbGxpcHNlIGFyZSBzbWFsbGVyIHRoYW4gZm9yIGdyb3VwIDI7IGFsdGhvdWdoIHdlIGNvdWxkIHByb2JhYmx5IGd1ZXNzIGF0IHRoaXMgZ2l2ZW4gdGhhdCB0aGVyZSBhcHBlYXJzIHRvIGJlIG5vIG92ZXJsYXAgYmV0d2VlbiB0aGVuIDk1JSBjcmVkaWJsZSBpbnRlcnZhbHMgb2YgdGhlIHR3byBncm91cHMgKHNlZSB0aGUgZmlndXJlIGFib3ZlKS4KClRoZW4gd2UgY2FuIGRvIGV4YWN0bHkgdGhlIHNhbWUgZm9yIGdyb3VwcyAxIGFuZCAzLgoKYGBge3IgcHJvYi1kaWZmLWcxM30KUGcxLmx0LmczIDwtIHN1bSggU0VBLkJbLDFdIDwgU0VBLkJbLDNdICkgLyBucm93KFNFQS5CKQpwcmludChQZzEubHQuZzMgKQpgYGAKCkFuZCB0aGVuIGZvciB0aGUgb3RoZXIgcGFpcmluZ3M6CgpgYGB7ciBwcm9iLWRpZmYtYWxsfQpQZzEubHQuZzQgPC0gc3VtKCBTRUEuQlssMV0gPCBTRUEuQlssNF0gKSAvIG5yb3coU0VBLkIpCnByaW50KFBnMS5sdC5nNCkKClBnMi5sdC5nMyA8LSBzdW0oIFNFQS5CWywyXSA8IFNFQS5CWywzXSApIC8gbnJvdyhTRUEuQikKcHJpbnQoUGcyLmx0LmczKQoKUGczLmx0Lmc0IDwtIHN1bSggU0VBLkJbLDNdIDwgU0VBLkJbLDRdICkgLyBucm93KFNFQS5CKQpwcmludChQZzMubHQuZzQpCgpQZzUubHQuZzcgPC0gc3VtKCBTRUEuQlssNV0gPCBTRUEuQlssN10gKSAvIG5yb3coU0VBLkIpCnByaW50KFBnNS5sdC5nNykKYGBgCgoqKioKCiMjIE92ZXJsYXAgQmV0d2VlbiBFbGxpcHNlcwpPbmUgY2FuIGNhbGN1bGF0ZSB0aGUgb3ZlcmxhcCBiZXR3ZWVuIHR3byAob3IgbW9yZSkgZWxsaXBzZXMuIEluIHRoZSBmaXJzdCBpbnN0YW5jZSwgdGhpcyBvdmVybGFwIGlzIHNpbXBseSB0aGUgYXJlYSwgaW4gdW5pdHMgb2YgcGVyIG1pbCBzcXVhcmVkLCBjb250YWluZWQgYnkgdGhlIHNoYXBlIHRoYXQgbGllcyB3aXRoaW4gdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbi4gVGhpcyBvdmVybGFwIGlzIG1vc3QgZWFzaWx5IGNhbGN1bGF0ZWQgYnkgdXNpbmcgdGhlIFNFQWMgb2YgZWFjaCBlbGxpcHNlLgoKVGhlIG92ZXJsYXAgYmV0d2VlbiB0aGUgU0VBYyBmb3IgZ3JvdXBzIDMgYW5kIDQgaW4gQ29tbXVuaXR5IDEgaXMgZ2l2ZW4gYnk6CgpgYGB7ciBNTC1vdmVybGFwfQoKb3ZlcmxhcC5HMy5HNCA8LSBtYXhMaWtPdmVybGFwKCIxLjMiLCAiMS40Iiwgc2liZXIuZXhhbXBsZSwgcCA9IDAuOTUsIG4gPTEwMCkKCmBgYAoKCkFuZCB0aGUgb3ZlcmxhcCBiZXR3ZWVuIFNFQWMgb2YgZ3JvdXBzIDEuMiBhbmQgMi4xIGlzIGdpdmVuIGJ5OgoKYGBge3J9Cm92ZXJsYXAuQzFHMi5DMkcxIDwtIG1heExpa092ZXJsYXAoIjEuMiIsICIyLjEiLCBzaWJlci5leGFtcGxlLCBwID0gMC45NSwgbiA9IDEwMCkKYGBgCgpPbmUgbWlnaHQgdGhlbiB3aXNoIHRvIGNhbGN1bGF0ZSB0aGUgcHJvcG9ydGlvbiBvdmVybGFwOyBhdGhvdWdoIG9uZSB0aGVuIHJ1bnMgaW50byBhIGNob2ljZSBhcyB0byB3aGF0IHRoZSBkZW1vbmluYXRvciB3aWxsIGJlIGluIHRoZSBlcXVhdGlvbi4gWW91IGNvdWxkIGZvciBpbnN0YW5jZSBjYWxjdWxhdGUgdGhlIHByb3BvcnRpb24gb2YgQSB0aGF0IG92ZXJsYXBzIHdpdGggQiwgdGhlIHByb3Bvcml0b24gb2YgQiB0aGF0IG92ZXJsYXBzIHdpdGggQSwgb3IgdGhlIHByb3BvcnRpb24gb2YgQSBhbmQgQiB0aGF0IG92ZXJsYXAgd2l0aCBlYWNoIG90aGVyLgoKYGBge3IgTUwtb3ZlcmxhcC1wcm9wb3J0aW9uc30KcHJvcC5vZi5maXJzdCA8LSBhcy5udW1lcmljKG92ZXJsYXAuRzMuRzRbIm92ZXJsYXAiXSAvIG92ZXJsYXAuRzMuRzRbImFyZWEuMSJdKQpwcmludChwcm9wLm9mLmZpcnN0KQoKcHJvcC5vZi5zZWNvbmQgPC0gYXMubnVtZXJpYyhvdmVybGFwLkczLkc0WyJvdmVybGFwIl0gLyBvdmVybGFwLkczLkc0WyJhcmVhLjIiXSkKcHJpbnQocHJvcC5vZi5zZWNvbmQpCgpwcm9wLm9mLmJvdGggPC0gYXMubnVtZXJpYyhvdmVybGFwLkczLkc0WyJvdmVybGFwIl0gLyAob3ZlcmxhcC5HMy5HNFsiYXJlYS4xIl0gKyBvdmVybGFwLkczLkc0WyJhcmVhLjIiXSkpCnByaW50KHByb3Aub2YuYm90aCkKCnByb3Aub2YuYm90aC5sZXNzLm92ZXJsYXAgPC0gYXMubnVtZXJpYyhvdmVybGFwLkczLkc0WyJvdmVybGFwIl0gLyAob3ZlcmxhcC5HMy5HNFsiYXJlYS4xIl0gKyBvdmVybGFwLkczLkc0WyJhcmVhLjIiXSAtIG92ZXJsYXAuRzMuRzRbIm92ZXJsYXAiXSkpCnByaW50KHByb3Aub2YuYm90aC5sZXNzLm92ZXJsYXApCmBgYAoKQSBwcm9ibGVtIHdpdGggdGhpcyBzaW1wbGUgb3ZlcmxhcCBjYWxjdWxhdGlvbiBpcyB0aGF0IGl0IHlpZWxkcyBhIHBvaW50LWVzdGltYXRlIG9mIG92ZXJsYXAgYmFzZWQgb24gdGhlIG1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0ZWQgU0VBX2MuIE9uZSBjYW4gaW5zdGVhZCBjYWxjdWxhdGUgYSBkaXN0cmlidXRpb24gb2Ygb3ZlcmxhcCBiYXNlZCBvbiB0aGUgcG9zdGVyaW9yIGRpc3RpcmJ1dGlvbnMgb2YgdGhlIGZpdHRlZCBlbGxpcHNlcy4gSXQgY2FuIGJlIGEgYml0IHNsb3cgdG8gY2FsY3VsYXRlIHRoaXMgb3ZlcmxhcCwgc28geW91IG1heSB3YW50IHRvIGRyb3AgdGhlIG51bWJlciBvZiBgZHJhd3NgIGlmIHlvdXIgY29tcHV0ZXIgaXMgc2xvdy4KCmBgYHtyIGJheWVzaWFuLW92ZXJsYXB9CmJheWVzLm92ZXJsYXAuRzMuRzQgPC0gYmF5ZXNpYW5PdmVybGFwKCIxLjMiLCAiMS40IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzZXMucG9zdGVyaW9yLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd3MgPSAxMDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmludGVydmFsID0gMC45NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDM2MCkKcHJpbnQoYmF5ZXMub3ZlcmxhcC5HMy5HNCkKCgpgYGAKCkFuZCBzdW1tYXJpc2UgdGhlIGNyZWRpYmxlIGludGVydmFscyBvZiB0aGUgQmF5ZXNpYW4gb3ZlcmxhcCBvdXRwdXQuIE5vdGUgdGhhdCB0aGlzIGNvZGUgZG9lcyBub3Qgd29yayB3ZWxsIG9uIHRoZSBzbWFsbCBudW1iZXIgb2YgcG9zdGVyaW9yIGRyYXdzIHdlIGFyZSB1c2luZyBmb3IgdGhpcyBiYXNpYyBleGFtcGxlIC0gZm9yIG9uZSBpdCByZXR1cm5zIG5lZ2F0aXZlIHZhbHVlcyB3aGljaCBpcyBub3QgcG9zc2libGUsIGJ1dCBpcyBhcmlzaW5nIGFzIHRoZSBzbW9vdGhlciBoYXMgbm90IGdvdCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gc3RheSBjbG9zZSB0byBvciB3aXRoaW4gdGhlIHBvc2l0aXZlIG51bWJlciByYW5nZS4KCmBgYHtyfQojIGFuZCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIGNyZWRpYmxlIGludGVydmFscyB1c2luZwojIG91ciBjb2RlIGZyb20gYWJvdmUgYWdhaW4KIyBjYWxsIHRvIGhkcmNkZTpoZHIgdXNpbmcgbGFwcGx5KCkKb3ZlcmxhcC5jcmVkaWJsZXMgPC0gbGFwcGx5KAogIGFzLmRhdGEuZnJhbWUoYmF5ZXMub3ZlcmxhcC5HMy5HNCksIAogIGZ1bmN0aW9uKHgsLi4uKXt0bXA8LWhkcmNkZTo6aGRyKHgpJGhkcn0sCiAgcHJvYiA9IGNyLnApCgpwcmludChvdmVybGFwLmNyZWRpYmxlcykKYGBgCgoKCgo=