[R-sig-eco] Brownian Bridge for migratory paths

Mathieu Basille basille at ase-research.org
Fri Sep 16 05:11:59 CEST 2011


Hi Tsewang,

I'm not sure about your script, but there is a function in 
'adehabitatHR' to estimate kernel Brownian-Bridge home ranges. See:

?kernelbb

You can find additional details in section 5 of:

vignette("adehabitatHR")

Hope this helps,
Mathieu.


Le 15/09/2011 19:31, Tsewang Namgail a écrit :
> Hi everyone,
>
> I am using the Brownian Bridge Model to demarcate migratory paths of
> birds. I used the following script used for mammals. Using this I
> didn't get bridges but simply blotches of high use areas without any
> link between them. Can anyone guide me as to how can I get continuous
> bridges between all the bird locations. Any help would be highly
> appreciated.
>
> Thanks
> Tsewang
>
> BrownianBridge=function(X,Y,Time,LocationError,cell.size=50,max.lag)
>          {options(digits=20)
>
> #Alternative
> #BBMM=brownian.bridge(x=locations$X,y=locations$Y,time.lag=locations$time.lag,location.error=20,cell.size=50)
>
> #X = locsTN$X
> #Y = locsTN$Y
> #Time = locsTN$Clock
> #LocationError = locsTN$TeleError
> #cell.size = 500
>
> #max.lag = abs(min(diff(Time))+1)
> LocationError = LocationError/sqrt(pi/2)
>
> # Create grid
> xmin=(min(X) - 0.1*(max(X)-min(X)))
> xmax=(max(X) + 0.1*(max(X)-min(X)))
> ymin=(min(Y) - 0.1*(max(Y)-min(Y)))
> ymax=(max(Y) + 0.1*(max(Y)-min(Y)))
> x = seq(xmin, xmax, by=cell.size)
> y = seq(ymin, ymax, by=cell.size)
> x = rep(x, length(y))
> y = sort(rep(y, length(x)/length(y)))
> grid = data.frame(x, y)
> cat("Size of grid =", length(unique(grid$y)), "X",
> length(unique(grid$x)), fill=TRUE)
>
> 	n.locs = length(X)
>      cat("Number of animal locations =", n.locs, fill=TRUE)
>
>      #--------------------------------------------------------------
> 	#Calculate Brownian motion variance "BMvar"
>      #LocationError = rep(LocationError, length(X))
>      T.jump = alpha = ztz = ob = loc.error.1 = loc.error.2 = NULL
>      i = 2
>      while(i<  n.locs){
>      	if((Time[i+1]-Time[i-1])/ 300>  max.lag) {i = i + 1}
>      	else {
>      		ob = c(ob, i)
>      		t = Time[i+1]-Time[i-1]
>      		T.jump = c(T.jump, t)
>      		a = (Time[i]-Time[i-1]) / t
>      		alpha = c(alpha, a)
>      		u = c(X[i-1], Y[i-1]) + a*(c(X[i+1], Y[i+1]) -
>                  c(X[i-1], Y[i-1]))
>      		ztz = c(ztz, (c(X[i], Y[i]) - u)%*%(c(X[i], Y[i]) - u))
>      		loc.error.1 = c(loc.error.1, LocationError[i-1])
>      		loc.error.2 = c(loc.error.2, LocationError[i+1])
>      	}
>      	i = i + 2
>      }
>
>      #Likelihood
>      likelihood<- function(var){
>      	v = T.jump*alpha*(1-alpha)*var +
>              ((1-alpha)^2)*(loc.error.1^2) +
>      		(alpha^2)*(loc.error.2^2)
>      	l = (1/(2*pi*v))*exp(-ztz/(2*v))
>      	-sum(log(l), na.rm=T)
>      }
>      BMvar = nlminb(start=10000, likelihood, lower=10)$par
>      cat("Brownian Motion Variance (meters^2) =", round(BMvar),
>          fill=TRUE)
>      BMvar = rep(BMvar, length(X))
>
> 	#Estimate Brownian bridge
> 	#Note: 5 minute time step (dt interval in Eq.5 Horne et al. 2007) is used.
> 	Time.Diff = c(diff(Time), NA)
> 	Max.Time.Diff = max(diff(Time))
> 	T.Total = Time[n.locs] - Time[1]
> 	probability = NULL
> 	int = 0
> 	for(i in 1:(n.locs-1)){
> 		#if(Time.Diff[i]<= max.lag){
> 		if(Time.Diff[i]<= Max.Time.Diff){
> 			theta = NULL
> 			tm = 0
> 			while(tm<= Time.Diff[i]){
> 				alpha = tm/Time.Diff[i]
> 				mu.x = X[i] + alpha*(X[i+1] - X[i])
> 				mu.y = Y[i] + alpha*(Y[i+1] - Y[i])
> 				sigma.2 = Time.Diff[i]*alpha*(1-alpha)*BMvar[i] +
> 					((1-alpha)^2)*(LocationError[i]^2) +
> 					(alpha^2)*(LocationError[i+1]^2)
> 				ZTZ = (grid$x - mu.x)^2 + (grid$y - mu.y)^2
> 				theta = (1/sqrt(2*pi*sigma.2))*exp(-ZTZ/(2*sigma.2))
> 				int = int + theta
> 				tm = tm + 1800
> 			}
> 		}
> 	}
>
> _______________________________________________
> R-sig-ecology mailing list
> R-sig-ecology at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology

-- 

~$ whoami
Mathieu Basille, Post-Doc

~$ locate
Laboratoire d'Écologie Comportementale et de Conservation de la Faune
+ Centre d'Étude de la Forêt
Département de Biologie
Université Laval, Québec

~$ info
http://ase-research.org/basille

~$ fortune
``If you can't win by reason, go for volume.''
Calvin, by Bill Watterson.



More information about the R-sig-ecology mailing list