Hello, I apologise if someone has already answered this but I searched and googled but didn't find anything. I have a matrix which gives me the similarity of each item to each other. I would like to turn this matrix into something like what they have in the graph package with the nodes and edges. http://cran.r-project.org/doc/packages/graph.pdf . However I cannot find a method to convert my matrix to an object that graph can use. my similarity matrix looks like:> sim[1:4,]a b c d [a] 1.000000000 0.0223676 0.9723831 0.3943310 [b] 0.325141612 1.0000000 0.9644216 0.5460461 [c] 0.002109751 0.3426540 1.0000000 0.7080224 [d] 0.250153137 0.1987485 0.7391222 1.0000000 please don't get caught up with the numbers I simple made this to show. I have not produce the code yet to make my similitary matrix. Does anyone know a method to do this or do I have to write something. :( If I do any starter code :D jj. If I've read something wrong or misunderstood my apologies. cheers, Paul -- Research Technician Mass Spectrometry o The / o Scripps \ o Research / o Institute
Paul, i have no idea what functionality you need from graph, but if the igraph package can do what you want then it can easily convert this to a graph for you, basically it is just threshold <- 0.5 g <- graph.adjacency(sim>threshoold) or you can create a weighted graph: g <- graph.adjacency(sim, weighted=TRUE) or a weighted graph after a threshold: sim2 <- sim sim2[ sim<threshold ] <- 0 g <- graph.adjacency(sim2, weighted=TRUE) etc. Best, Gabor On Tue, Aug 28, 2007 at 02:25:27PM -0700, H. Paul Benton wrote:> Hello, > > I apologise if someone has already answered this but I searched and > googled but didn't find anything. > > I have a matrix which gives me the similarity of each item to each > other. I would like to turn this matrix into something like what they > have in the graph package with the nodes and edges. > http://cran.r-project.org/doc/packages/graph.pdf . However I cannot find > a method to convert my matrix to an object that graph can use. > > my similarity matrix looks like: > > sim[1:4,] > a b c d > [a] 1.000000000 0.0223676 0.9723831 0.3943310 > [b] 0.325141612 1.0000000 0.9644216 0.5460461 > [c] 0.002109751 0.3426540 1.0000000 0.7080224 > [d] 0.250153137 0.1987485 0.7391222 1.0000000 > > please don't get caught up with the numbers I simple made this to show. > I have not produce the code yet to make my similitary matrix. > > Does anyone know a method to do this or do I have to write something. :( > If I do any starter code :D jj. If I've read something wrong or > misunderstood my apologies. > > cheers, > > > Paul > > > -- > Research Technician > Mass Spectrometry > o The > / > o Scripps > \ > o Research > / > o Institute > > ______________________________________________ > 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.-- Csardi Gabor <csardi at rmki.kfki.hu> MTA RMKI, ELTE TTK
Hi Paul, "H. Paul Benton" <hpbenton at scripps.edu> writes:> I have a matrix which gives me the similarity of each item to each > other. I would like to turn this matrix into something like what they > have in the graph package with the nodes and edges. > http://cran.r-project.org/doc/packages/graph.pdf . However I cannot find > a method to convert my matrix to an object that graph can use. > > my similarity matrix looks like: >> sim[1:4,] > a b c d > [a] 1.000000000 0.0223676 0.9723831 0.3943310 > [b] 0.325141612 1.0000000 0.9644216 0.5460461 > [c] 0.002109751 0.3426540 1.0000000 0.7080224 > [d] 0.250153137 0.1987485 0.7391222 1.0000000 > > please don't get caught up with the numbers I simple made this to show. > I have not produce the code yet to make my similitary matrix. > > Does anyone know a method to do this or do I have to write something. :( > If I do any starter code :D jj. If I've read something wrong or > misunderstood my apologies.The matrix you have can be interpreted as an adjacency matrix where a value of zero means no relationship and a non-zero value indicates an edge between two nodes with edge weight determined by the value. You can create a graph object like this: library("graph") g <- new("graphAM", adjMat=sim, values=list(weight=0)) The default is to create an undirected graph and in this case you must provide a symmetric matrix. Generally I would expect a similarity matrix to be symmetric, but the similitary (sic) matrix you have above is not. In this case, you can use a directed graph: g <- new("graphAM", adjMat=sim, values=list(weight=0), edgemode="directed") To visualize your graph you can use the Rgraphviz package which will allow you to do: plot(g) You might also be interested in the RBGL package which provides many powerful graph algorithms. All of these packages are available via Bioconductor (no bio required) and can be installed as: source("http://bioconductor.org/biocLite.R") biocLite(c("RBGL", "Rgraphviz")) + seth -- Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center BioC: http://bioconductor.org/ Blog: http://userprimary.net/user/
Along with the example I gave using graphAM, you might also want to look at the help page for the distGraph class which may be more directly what you want: library("graph") class ? distGraph
Try this: # test data mat <- structure(c(1, 0.325141612, 0.002109751, 0.250153137, 0.0223676, 1, 0.342654, 0.1987485, 0.9723831, 0.9644216, 1, 0.7391222, 0.394331, 0.5460461, 0.7080224, 1), .Dim = c(4L, 4L), .Dimnames = list( c("a", "b", "c", "d"), c("a", "b", "c", "d"))) library(sna) # draw edges according to value gplot(mat, edge.lwd = mat, label = rownames(mat)) # thresholding at 0.5 gplot(mat > .5, label = rownames(mat)) On 8/28/07, H. Paul Benton <hpbenton at scripps.edu> wrote:> Hello, > > I apologise if someone has already answered this but I searched and > googled but didn't find anything. > > I have a matrix which gives me the similarity of each item to each > other. I would like to turn this matrix into something like what they > have in the graph package with the nodes and edges. > http://cran.r-project.org/doc/packages/graph.pdf . However I cannot find > a method to convert my matrix to an object that graph can use. > > my similarity matrix looks like: > > sim[1:4,] > a b c d > [a] 1.000000000 0.0223676 0.9723831 0.3943310 > [b] 0.325141612 1.0000000 0.9644216 0.5460461 > [c] 0.002109751 0.3426540 1.0000000 0.7080224 > [d] 0.250153137 0.1987485 0.7391222 1.0000000 > > please don't get caught up with the numbers I simple made this to show. > I have not produce the code yet to make my similitary matrix. > > Does anyone know a method to do this or do I have to write something. :( > If I do any starter code :D jj. If I've read something wrong or > misunderstood my apologies. > > cheers, > > > Paul > > > -- > Research Technician > Mass Spectrometry > o The > / > o Scripps > \ > o Research > / > o Institute > > ______________________________________________ > 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. >