[R-sig-eco] altitudinal overlap

Sargeant, Glen gsargeant at usgs.gov
Wed Jul 15 02:31:26 CEST 2015


Oops!  Tally the entire matrix, not just the upper triangular portion.
Adding the code in red (4th line from top) should rectify the error.

for(i in 1:(nrow(x)-1)){
    for(j in (i+1):nrow(x)){
      mat[i,j] <- x$min[j] <= x$max[i]
      *mat[j,i] <- mat[i,j]*
    }
}






On Tue, Jul 14, 2015 at 7:02 PM, Sargeant, Glen <gsargeant at usgs.gov> wrote:

> Here you go.
>
> > #Data.  Each row gives altitudinal limits for a species
> >
> > x <- matrix(runif(20),10,2)
>
> > x <- t(apply(x,1,sort))
>
> > dimnames(x) <- list(NULL, c("min","max"))
>
> > species <- paste("species",1:10,sep="")
>
> > x <- data.frame(species,x)
>
> > x
>      species        min       max
> 1   species1 0.20903724 0.8232747
> 2   species2 0.25137925 0.7794901
> 3   species3 0.09128804 0.2311824
> 4   species4 0.07792821 0.8668317
> 5   species5 0.34627541 0.5385044
> 6   species6 0.14072631 0.3356345
> 7   species7 0.52154781 0.9216631
> 8   species8 0.03126684 0.3382409
> 9   species9 0.43925482 0.4398011
> 10 species10 0.41146614 0.4611622
>
> > #Order by min and then by max within min
> > x <- x[order(x$min,x$max),]
>
> > x
>      species        min       max
> 8   species8 0.03126684 0.3382409
> 4   species4 0.07792821 0.8668317
> 3   species3 0.09128804 0.2311824
> 6   species6 0.14072631 0.3356345
> 1   species1 0.20903724 0.8232747
> 2   species2 0.25137925 0.7794901
> 5   species5 0.34627541 0.5385044
> 10 species10 0.41146614 0.4611622
> 9   species9 0.43925482 0.4398011
> 7   species7 0.52154781 0.9216631
>
> > #Compare each minimum to preceding maxima.
>
> > #This is where the reordering comes in.
> > #The only way two species can overlap is if
> > #the minimum for the second one is less than
> > #or equal to the maximum for the first one.
> > mat <- matrix(NA,nrow(x),nrow(x))
>
> > dimnames(mat) <- list(x$species,x$species)
>
> > for(i in 1:(nrow(x)-1)){
> +   for(j in (i+1):nrow(x)){
> +     mat[i,j] <- x$min[j] <= x$max[i]
> +   }
> + }
>
> > mat
>           species8 species4 species3 species6 species1 species2 species5
> species10 species9 species7
> species8        NA     TRUE     TRUE     TRUE     TRUE     TRUE
> FALSE     FALSE    FALSE    FALSE
> species4        NA       NA     TRUE     TRUE     TRUE     TRUE
> TRUE      TRUE     TRUE     TRUE
> species3        NA       NA       NA     TRUE     TRUE    FALSE
> FALSE     FALSE    FALSE    FALSE
> species6        NA       NA       NA       NA     TRUE     TRUE
> FALSE     FALSE    FALSE    FALSE
> species1        NA       NA       NA       NA       NA     TRUE
> TRUE      TRUE     TRUE     TRUE
> species2        NA       NA       NA       NA       NA       NA
> TRUE      TRUE     TRUE     TRUE
> species5        NA       NA       NA       NA       NA       NA
> NA      TRUE     TRUE     TRUE
> species10       NA       NA       NA       NA       NA       NA
> NA        NA     TRUE    FALSE
> species9        NA       NA       NA       NA       NA       NA
> NA        NA       NA    FALSE
> species7        NA       NA       NA       NA       NA       NA
> NA        NA       NA       NA
>
> > apply(mat,1,sum,na.rm=TRUE)
>  species8  species4  species3  species6  species1  species2  species5
> species10  species9  species7
>         5         8         2         2         5         4
> 3         1         0         0
>
> On Tue, Jul 14, 2015 at 6:37 PM, Karla Shikev <karlashikev at gmail.com>
> wrote:
>
>> Ok, here's another (a bit more challenging) question.
>>
>> Imagine that I have a S species and a S x 2 matrix of altitudinal limits
>> (min and max elevation). How would you compute the number of co-occurring
>> species for each of the S species?
>>
>> Thanks again for your assistance.
>>
>> Karla
>>
>> On Tue, Jul 14, 2015 at 5:14 AM, Stefano Leonardi <
>> stefano.leonardi at unipr.it
>> > wrote:
>>
>> >
>> > The first think that came to my mind:
>> >
>> > overlap <- function(v1,v2) {
>> > ov <-min(max(v1), max(v2)) - max(min(v1), min(v2))
>> > ifelse(ov > 0, ov, 0)
>> > }
>> >
>> > overlap(dat[1,], dat[2,])
>> > [1] 0.5
>> >
>> >
>> > Ciao
>> > Stefano
>> >
>> > On 14/07/2015 01:03, Karla Shikev wrote:
>> >
>> >> Hi there,
>> >>
>> >> This is a newbie question, and I'm sure there are simple ways to do
>> this,
>> >> but I've spent my entire afternoon and I couldn't get it to work.
>> >>
>> >> Imagine that I got the altitudinal range of different species. For
>> >> instance:
>> >>
>> >>  dat<-matrix(c(1,3,2.5,4), ncol=2, byrow=TRUE)
>> >>> dat
>> >>>
>> >>       [,1] [,2]
>> >> [1,]  1.0    3
>> >> [2,]  2.5    4
>> >>
>> >>
>> >> The first line indicates that this species is found between 1 and 3,
>> >> whereas the second species was found between 2.5 and 4.
>> >>
>> >> I need a simple way to calculate the overlap of their extents (0.5 in
>> this
>> >> case). This way should provide 0 if there is no overlap, and it should
>> >> also
>> >> work in the case where one subject is found only within the extent of
>> the
>> >> second subject.
>> >>
>> >> Any help will be greatly appreciated.
>> >>
>> >> Karla--
>> >>
>> > ======================================================================
>> >  Stefano Leonardi
>> >  Dipartimento di Bioscienze
>> >  Universita` di Parma
>> >  Viale Usberti 11a                             Phone : +39-0521-905659
>> >  43124 PARMA  (Italy)                          Fax   : +39-0521-905402
>> >
>> >  Il mio photoblog:                http://stefanoleonardi.wordpress.com
>> > ======================================================================
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-ecology mailing list
>> R-sig-ecology at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
>>
>
>
>
> --
> Glen Sargeant, Ph.D.
> Research Wildlife Biologist/Statistician
> USGS Northern Prairie Wildlife Research Center
> E-mail: gsargeant at usgs.gov
> Phone: (701) 253-5528
>



-- 
Glen Sargeant, Ph.D.
Research Wildlife Biologist/Statistician
USGS Northern Prairie Wildlife Research Center
E-mail: gsargeant at usgs.gov
Phone: (701) 253-5528

	[[alternative HTML version deleted]]



More information about the R-sig-ecology mailing list