Re: [R] How to extract diagonals

From: Birgit Lemcke <birgit.lemcke_at_systbot.uzh.ch>
Date: Wed, 20 Jun 2007 18:24:50 +0200

Hello Gavin!

I thank you so much that you help me here. Only to answer your questions there are 452 samples (species) in A and the same number in B.
Unfortunately I will get the book from Legendre & Legendre only in 2 days (small library) but I think for the moment I am busy to try and learn with the codes you gave me here.
For me it seems that this will solve all the problems I have at the moment.
Now it is my turn to learn about it.

Once again: thanks

Greetings

Birgit

Am 20.06.2007 um 18:02 schrieb Gavin Simpson:

> On Wed, 2007-06-20 at 15:09 +0200, Birgit Lemcke wrote:
>> Hello Gavin and thanks for your answer.
>>
>> Your completely right I dont need the diagonal that is the bisecting
>> line of the angle.
>>
>> I need another diagonal of the (now) matrix.
>>
>> A1 A2 A3 A4 B1 B2 B3 B4
>> A1
>> A2
>> A3
>> A4
>> B1 X
>> B2 X
>> B3 X
>> B4 X
>>
>
> Not easily, especially without knowing how many samples are in A or B,
> although all that is really needed is some careful subsetting of the
> dist object and a minor amount of programming - unfortunately after
> close to two weeks intensive teaching my brain isn't up to doing that
> just now.
>
> One simple way to do this is to use the distance() function in my
> analogue package (on CRAN). distance() can calculate the
> dissimilarities
> between one group of samples and another. Here is a simple example
> using
> some dummy data, from ?distance:
>
> ## simple example using dummy data
> train <- data.frame(matrix(abs(runif(200)), ncol = 10))
> rownames(train) <- LETTERS[1:20]
> colnames(train) <- as.character(1:10)
> fossil <- data.frame(matrix(abs(runif(100)), ncol = 10))
> colnames(fossil) <- as.character(1:10)
> rownames(fossil) <- letters[1:10]
>
> ## calculate distances/dissimilarities between train and fossil
> ## samples
> test <- distance(train, fossil)
>
> test is now a matrix, the diagonal elements of which are the values
> that
> you appear to want:
>
> diag(test)
>
> if I'm reading your diagram correctly. Note that for this, you need to
> be comparing row 1 from matrix A with row 1 from matrix B - if they
> are
> in some other order, then this won't work.
>
> distance() has a version of Gower's coefficient for mixed that allows
> you to specify weights. The function is just about clever enough to
> allow missing values if you use method = "mixed" in distance(). Be
> sure
> to read up about Gower's mixed coefficient in his 1971 paper (Gower,
> 1971, Biometrics 23; 623--637) and the use that weights and the range
> parameter Rj are put to, or see the relevant section in Legendre &
> Legendre (1998).
>
>> I need for example the diagonal that compares A1 with B1.
>> Do you have an idea how I can handle this?
>>
>> What is the effect of this code?
>>
>> all.equal(diags, diag(as.matrix(dis.bc)))
>
> This was showing you that the diagonals of the dissimilarity matrix
> are
> just a vector of zeroes. all.equal tests equality of its arguments.
>
>>
>> Thanks a lot and sorry for my inability to solve my problems on my
>> own.
>
> You're welcome. Using R is a learning experience. You only need to
> grovel and apologise if you have not done your homework before posting
> and not read the FAQ, the documentation or searched the archives, or
> followed the posting guide. Which is not the case here.
>
> HTH
>
> G
>
>>
>> Am 20.06.2007 um 14:11 schrieb Gavin Simpson:
>>
>>> On Wed, 2007-06-20 at 13:26 +0200, Birgit Lemcke wrote:
>>>> Hello,
>>>>
>>>> I am using Mac OS X on a power book and R 2.5.0
>>>>
>>>> I try to extract a diagonal from a dissimilarity matrix made with
>>>> dsvdis, with this code:
>>>>
>>>> diag(DiTestRR)
>>>>
>>>> But I get this error message:
>>>>
>>>> Fehler in array(0, c(n, p)) : 'dim' spezifiziert ein zu groes Array
>>>>
>>>> english:
>>>>
>>>> Error in array(0, c(n, p)) : 'dim' specifies a too big array.
>>>>
>>>> Is there a limit to extract diagonals?
>>>
>>> The returned object is not a matrix, but an object of class "dist"
>>> which
>>> doesn't store the diagonals or the upper triangle of the
>>> dissimilarity
>>> matrix to save memory. You need to convert the dist object to a
>>> matrix
>>> first, then extract the diagonal. But, as this shows:
>>>
>>>> require(labdsv)
>>>> ?dsvdis
>>>> data(bryceveg)
>>>> ?dsvdis
>>>> dis.bc <- dsvdis(bryceveg,index="bray/curtis")
>>> Warning in symbol.For("dsvdis") : 'symbol.For' is not needed: please
>>> remove it
>>>> diag(as.matrix(dis.bc))
>>>
>>> This is meaningless as the diagonals are all zero, as they should
>>> be;
>>> this is the distance between a site and itself.
>>>
>>>>
>>>> I hope somebody will help me!
>>>
>>> So perhaps you could explain why you want the diagonal. It would be
>>> easier to just do:
>>>
>>> diags <- rep(0, length = nrow(bryceveg))
>>>
>>> That will be without the sample labels, but that is easily rectified
>>>
>>>> names(diags) <- rownames(bryceveg)
>>>> all.equal(diags, diag(as.matrix(dis.bc)))
>>> [1] TRUE
>>>
>>> So you'll have to reformulate your question if this is not what you
>>> wanted.
>>>
>>> A word of warning, do not do diag(dis.bc)) on the above as it
>>> brought my
>>> Linux box to it's knees trying to do something silly - easily
>>> recoverable, but beware.
>>>
>>> HTH
>>>
>>> G
>>>
>>>>
>>>> Greetings
>>>>
>>>> Birgit Lemcke
>>>
>>> --
>>> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~
>>> %~%
>>> 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
>>> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~
>>> %~%
>>>
>>
>> Birgit Lemcke
>> Institut fr Systematische Botanik
>> Zollikerstrasse 107
>> CH-8008 Zrich
>> Switzerland
>> Ph: +41 (0)44 634 8351
>> birgit.lemcke_at_systbot.uzh.ch
>>
>>
>>
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help_at_stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-
>> guide.html
>> and provide commented, minimal, self-contained, reproducible code.
> --
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> 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
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>

Birgit Lemcke
Institut für Systematische Botanik
Zollikerstrasse 107
CH-8008 Zürich
Switzerland
Ph: +41 (0)44 634 8351
birgit.lemcke_at_systbot.uzh.ch

        [[alternative HTML version deleted]]



R-help_at_stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Wed 20 Jun 2007 - 17:01:10 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 20 Jun 2007 - 18:32:11 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.