[R-sig-eco] standard variation in dissimilarity matrix

magali proffit mafhotmail2 at gmail.com
Mon Jul 18 16:17:04 CEST 2011


Dear Gavin,

thanks a lot for your reply! 
I realized yesterday evening that I could do what you suggested. I did and it works!

thanks again!

Magali

Le 18 juil. 2011 à 12:39, Gavin Simpson a écrit :

> On Sun, 2011-07-17 at 15:51 +0200, magali proffit wrote:
>> Dear all,
>> linked to MRPP in Vegan there is a really nice function (meandist)
>> which calculates a matrix of mean of distance, based on a grouping
>> factor, from matrices of dissimilarity. I was wondering if there is an
>> equivalent function calculating the standard deviation instead of the
>> mean distance or if anyone has an idea how to do it.
>> thanks a lot!
>> Magali
> 
> meandist() computes the mean within and between block dissimilarities.
> Do you want the within block standard deviation of dissimilarities and
> the between block standard deviation of dissimilarities?
> 
> If so, you could just grab the sources for meandist and change this
> line:
> 
> out[take] <- tapply(dist, cl, mean)
> 
> to be
> 
> out[take] <- tapply(dist, cl, sd)
> 
> (or use `var` in place of `sd` if you want the variance instead of the
> standard deviation.). Here is a function that does just that, using
> `sd`:
> 
> sddist <- function (dist, grouping, ...) 
> {
>    mergenames <- function(X, Y, ...) {
>        xy <- cbind(X, Y)
>        xy <- apply(xy, 1, sort)
>        apply(xy, 2, paste, collapse = " ")
>    }
>    grouping <- factor(grouping, exclude = NULL)
>    cl <- outer(grouping, grouping, mergenames)
>    cl <- cl[lower.tri(cl)]
>    n <- table(grouping)
>    take <- matrix(TRUE, nlevels(grouping), nlevels(grouping))
>    diag(take) <- n > 1
>    take[upper.tri(take)] <- FALSE
>    out <- matrix(NA, nlevels(grouping), nlevels(grouping))
>    out[take] <- tapply(dist, cl, sd)
>    out[upper.tri(out)] <- t(out)[upper.tri(out)]
>    rownames(out) <- colnames(out) <- levels(grouping)
>    class(out) <- c("meandist", "matrix")
>    attr(out, "n") <- table(grouping)
>    out
> }
> 
> ## meandist
> require(vegan)
> data(dune)
> data(dune.env)
> dune.md <- with(dune.env, meandist(vegdist(dune), Management))
> dune.sd <- with(dune.env, sddist(vegdist(dune), Management))
> 
> HTH
> 
> G
> 
> -- 
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
> ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
> Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
> Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
> UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> 



More information about the R-sig-ecology mailing list