Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I was wondering if any of you happen to have any information on how to calculate the Utilization Distribution Overlap Index (UDOI) in ArcGIS 10? If I understand it correctly the UDOI takes two kernel density maps and then calculates the percent overlap between the two using a range between 0 and 1. 1 indicating 100% overlap while 0 indicates no overlap. For those that have access here is the journal article outlining the concepts behind UDOI.[1346:QHOTIO]2.0.CO;2/abstract

In the literature UDOI is always calculated using the adehabitat package in R. However, I have zero R knowledge and the code is a bit daunting to say the least. It seems to me that this could be done using tools that are already available in Arc.

share|improve this question

The formula in the R documentation is

adehabitat formula for UDOI: A_{i,j}\int_x\int_y UD_i(x,y)\times UD_j(x,y)

where "A_{i,j} is the area of the intersection between the two home ranges" and "UD_j(x,y) is the value of the utilization distribution of the animal j at the point (x,y)."

Because this expression is mathematical nonsense, I will take the liberty of rewriting it in a meaningful way as

Correct formula with dx and dy

The difference evidently is in the "dx dy" part. This is a crucial part of the integrals. Think of any such integral as an operation to perform on a grid. The values of the grid are given by the integrand, in this case "UD_i(x,y)UD_j(x,y)". This compound expression is really the product of two grids: one of them is called UD_i and its value at a location (x,y) is denoted "UD_i(x,y)"; the other is called UD_j and its value at a location (x,y) is denoted "UD_j(x,y)". The integration tells us to:

  • Slice up a region into little cells of widths dx and heights dy,

  • Multiply the integrand's value in each cell by the cell's width dx and height dy (in other words, multiply the integrand by the cell's area).

  • Sum all these products. (The integral sign looks like an ancient "S" because it is: it's a mnemonic for "sum.")

  • The UDOI is obtained by multiplying the result by A_{i,j}: that's the area of a polygonal region.

These procedures are carried out in most GISes as a local product (to form the product of UD_i and UD_j) and a zonal sum (to do the summation indicated by the integral).

I will illustrate with some (simulated) data. We begin with animal sightings: blue for one species, red for another.

Point plot

  • Compute kernel density estimates based on these data. On the left is the KDE for the blue points; on the right, the KDE for the red points.

KDE plots

Now, in the UDOI definition it is crucial that the UD_i and UD_j be probability densities: this means they must integrate to 1. If you computed them in ArcGIS, they probably do not integrate to unity. Don't worry--we'll take care of this at the end, which reduces the amount of calculation.

At this point some judgment comes in: precisely what are the "habitats" of these animals? One common way is to use a contour of the density itself. Here are the interiors of two equal-height contours which I chose arbitrarily:

Overlapping contour plots

You can create these any way you like--instead of contours, these regions might be bounded by natural barriers like rivers or mountain ranges. we will need the individual polygons later, but the key at this juncture is to

  • obtain the area of their intersection.

Do this in the usual way, such as representing them as polygons, intersecting the polygons, and requesting the area. This is the number A_{i,j}. Save it. (For this example, it equals 5.38305 squared units--the units are shown on the axes of all the plots. Imagine they are kilometers if you like, so this is 5.4 square kilometers.)

  • Now multiply the two grids, UD_i and UD_j, cell-by-cell.

Here's a plot of the result. I have drawn this plot only over the region of intersection of the two contours found previously:

Product plot

This is the integrand. To integrate it, notice that because the grid you are using has rectangles all the same size, dx dy never changes. That lets us factor it out, leaving us to just do the sum. That is,

  • compute the zonal sum of the product grid using the polygon of intersection as the zone.

This needs to be multiplied by dx (the x cellsize) and by dy (the y cellsize, usually equal to the x cellsize). For the example, I obtain a value of 0.183814.

Now it's time to remember to normalize UD_i and UD_j. To do this,

  • Compute the zonal sum of UD_i over its own habitat (the entire blue polygon) and compute the zonal sum of UD_j over its own habitat (the entire red polygon). Ideally, after multiplication by dx and dy, both should equal 1. If they do not, divide the preceding result by each of these zonal sums. This does the normalization.

In the example, my kernels integrate to 0.988069 (integral of UD_i over the blue polygon) and 0.98663 (integral of UD_j over the red polygon), so at the end I will divide the result by both these values.


  • Multiply the normalized integral of the product kernel by A_{i,j}.

In the example, that's 5.38305 times 0.183814, equal to 0.989481. Upon dividing by the normalization constants, I obtain 1.015. This is the UDOI.

Before we go on, let's review our work:

  1. We computed two KDEs (UD_i and UD_j) from point data.

  2. We obtained polygons of habitat areas, somehow.

  3. We intersected those polygons and computed the area of intersection.

  4. We multiplied the UD_i and UD_j grids to obtain UD_i * UD_j as a grid.

  5. We performed three zonal sums: UD_i over the blue polygon, UD_j over the red polygon, and UD_i * UD_j over the intersection polygon.

  6. We did a little arithmetic with the four numbers just obtained (the area of intersection and three zonal sums) together with the cellsize(s) dx and dy.

(Links are to the relevant ArcGIS 10 help pages.) That's it: six grid operations in toto. Fast and easy.

It is illuminating to work out the units of measure in this calculation:

  • A_{i,j} is an area. It is squared linear units (such as squared kilometers, km^2).

  • dx and dy are lengths (such as km).

  • UD_i and UD_j are densities. If you review how they were used, note that originally

    1. They started out as kernel densities of the animal sightings, which are counts per unit area (per km^2).

    2. They were normalized by dividing by their integrals. Their integrals gave estimated total counts over the habitats. This division, then, canceled the counts, giving units of 1/km^2.

  • Therefore, "UD_i UD_j dx dy" has units of (1/km^2 * 1/km^2 * km * km) = 1/km^2. Its integral--which just sums these things--has the same units.

  • Multiplication by A_{i,j} gives units of km^2 * 1/km^2, which is unitless.

That is exactly what is wanted from an overlap index: it should be independent of whatever units are used to measure length and area. It should not depend on the magnitudes of the animal counts that went into the KDEs. Achieving this result helps confirm the correctness of our calculations.

share|improve this answer
great answer, your bluntness amuses me to no end. The notation is indeed "mathematical nonsense", which is why I tend to take statistical papers published in JWM with a grain of salt. Perhaps you should send the authors (Fieberg & Kochanny 2005) your derivation. I am curious where their notation came from because Hurlbert (1978) is fairly clear in his notation of this metric. Are you aware of Abrams (1980) criticism of this approach? Anyway, thanks for keeping all of us honest! – Jeffrey Evans Apr 14 '15 at 18:20
Here is Hurlbert's 1982 response to Abrams. – Jeffrey Evans Apr 14 '15 at 18:25

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.