>
> I am trying to use Adehabitat to analyze the home range and movement
> patterns of fish (manta rays, sharks, and various species of reef
> fish) in Hawaii, but have not found a way to clip land area out of
> the animals home range.  Most of the fish I study stay fairly close
> to shore, moving along a sinuous coastline.  I have used adehabitat
> to estimate their home range (I am mostly interested in kernel
> HR's), but need to either limit the calculations to only include
> water areas during the calculation or clip out the land area after
> the kernel has been calculated.  Is there a way to use a shapefile
> or other projected map file to either limit the kernel or to clip
> out the area post-processing?  I am fairly new to R and adehabitat,
> and am working in Windows. 


Actually, the main issue with the (classical) kernel method is that it
does not allow boundary constraints. I have heard about extensions of
the kernel method allowing to take into account boundary extensions,
but they are not implemented in adehabitat (and I do not remember the
corresponding references) . If your aim is just to estimate a home
range (i.e. if an utilization distribution is not desired), and if you
do not want to compare your results with previous home-range sizes
estimated in the literature, the kernel method is probably not the
best choice (as noted by Maren, NNCH would probably be a better
choice, as it fits more closely the relocations). 

However, if you really need to estimate a kernel home range, I may
suggest you a tricky solution: to estimate the UD for each animal,
then to set the UD to 0 in the pixels located outside the water, to
standardise the modified UD so that the volume under the UD is equal
to 1, and finally to estimate the home range from this modified UD.

mhm... Ok... not that clear. I take an example (just copy and paste to
R):

## prepare the data
data(puechabon)
locs <- puechabon$locs[,c("Name","X","Y")]
map <- getkasc(puechabon$kasc, 1)

## show the data
image(map)
points(locs[,c("X","Y")], col=as.numeric(locs$Name))


This map shows the relocations of four wild boars on an elevation
map. But imagine that they represent the location of four fishes in a
lake (unmapped white areas - NA on this map - are corresponding to the
land). Consider the red and black points: they are close to the
shore. If we estimate a home range, a large proportion of the home
range will cover the land:


## Note here that we use the map as the grid on which the UD is
## estimated
kud <- kernelUD(locs[,c("X","Y")], locs$Name, grid=map)
ver <- getverticeshr(getvolumeUD(kud))
plot(ver, add=TRUE)


So a possible way would be to set to zero all the pixels of the UD
located on the land, and then to standardise the result. That is:

for (i in 1:length(kud)) {
    kud[[i]]$UD[is.na(map)] <- 0
    kud[[i]]$UD <- kud[[i]]$UD/(sum(kud[[i]]$UD)*(attr(map, "cellsize")^2))
}
ver2 <- getverticeshr(getvolumeUD(kud))


And the resulting home range is:

image(map)
points(locs[,c("X","Y")], col=as.numeric(locs$Name))
plot(ver2, add=TRUE)

the home range does not cover the land. And the point is that the
object kud represents the UD corrected so that the land is
characterized by a probability of occurrence equal to zero (i.e., it
is not the home range that is corrected, but the UD). But this
solution implies that you are able to derive a raster map from your
shapefile where land is represented by NA. Another alternative,
already pointed out by Paolo would be to use a GIS (such 
as qGIS) to clip the home-range polygons after the estimation.

Hope this helps,


Clément Calenge
-- 
Clément CALENGE
Office national de la chasse et de la faune sauvage
Saint Benoist - 78610 Auffargis
tel. (33) 01.30.46.54.14
_______________________________________________
AniMov mailing list
[email protected]
http://lists.faunalia.it/cgi-bin/mailman/listinfo/animov

Reply via email to