igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] clustering coefficient in bipartite network


From: Gábor Csárdi
Subject: Re: [igraph] clustering coefficient in bipartite network
Date: Sat, 27 Nov 2010 00:30:27 +0100

Hi Simone,

On Fri, Nov 26, 2010 at 12:10 PM, Simone Gabbriellini
<address@hidden> wrote:
> HI Gabor,
>
> thanks very much, yes that is the right direction for me!
>
> what I have to reproduce is, according to Latapy:
>
> for each bottom node v:
>        for each bottom node u, 2-dist-neighbor of v:
>                 find the number of (shared top nodes of u and v) / (total top 
> nodes neighbors of u AND v)

ccBip <- function(g) {
  if (! "name" %in% list.vertex.attributes(g)) {
    V(g)$name <- seq_len(vcount(g))
  }
  neib <- get.adjlist(g)
  names(neib) <- V(g)$name
  proj <- bipartite.projection(g)
  lapply(proj, function(x) {
    el <- get.edgelist(x)
    sapply(V(x)$name, function(v) {
      subs <- el[,1]==v | el[,2]==v
      f <- function(un, vn) length(union(un, vn))
      vals <- E(x)[subs]$weight /
        mapply(f, neib[el[subs,1]], neib[el[subs,2]])
      mean(vals)
    })
  })
}

I think this does exactly what you want, assuming I understood the
definition correctly. I have only tested it with igraph 0.6, for which
the nightly builds are available again at
http://code.google.com/p/igraph/downloads/list

Please tell me if something is not clear.

Best,
Gabor

> then to find the local clustering of v, I have to average the list of values 
> obtained.
>
> and conversely for top nodes... it's a bit tricky for me with R...
>
> thanks a lot,
> simone
>
> Il giorno 26/nov/2010, alle ore 11.34, Gábor Csárdi ha scritto:
>
>> Hi Simone,
>>
>> a couple of comments.
>>
>> On Thu, Nov 25, 2010 at 5:22 PM, Simone Gabbriellini
>> <address@hidden> wrote:
>>> Hello List,
>>>
>>> I am trying to reproduce the clustering measures detailed in Latapy et al. 
>>> Social Networks, 30 (2008).
>>>
>>> I attempted successfully to reproduce the ccN(G) clustering, which is 
>>> basically an extension for bipartite networks of the global transitivity 
>>> measure.
>>>
>>> I am stuck with the cc. measure of clustering coefficient, an extension of 
>>> local transitivity for bipartite network - a reprise of what Borgatti and 
>>> Everett have already suggested in 1997.
>>>
>>> I have to find, for each distance-2 neighbors of a node (which are still 
>>> nodes of the same set), how many nodes of the other set they have in common.
>>>
>>> This is not all of what is needed to implement this measure, but it would 
>>> be a great step for me...
>>>
>>> In order to find distance-2 neighbors for each node, I can use a partition, 
>>> as Tamas suggested in a previous thread.
>>>
>>> V(g)[type==FALSE]$neibi<-neighborhood(bipartite.projection(g)[[1]], 1)
>>>
>>> V(g)[type==TRUE]$neibi<-neighborhood(bipartite.projection(g)[[2]], 1)
>>
>> it is actually better to use vertex names to be sure that you assign
>> the second neighbors to the right vertices. While your solution works
>> if the order of the vertices is kept in the projections, this is not
>> documented for bipartite.projection, so you cannot take it for
>> granted.
>>
>> Anyway, I think an easier way to get the second neighbors is to simply
>> subtract the 1-neighborhood from the 1-2-neighborhood, this works for
>> bipartite graphs.
>>
>> nei12 <- neighborhood(g, 2)
>> nei1 <- neighborhood(g, 1)
>> nei2 <- mapply(setdiff, nei12, nei1)
>>
>>> While in order to find neighbors in the bipartite, I can simply use:
>>>
>>> V(g)$nei<-neighborhood(g, 1)
>>>
>>> now, how can I confront a node with every nodes listed in its neibi 
>>> attribute in order to find if there are duplicates in each nei attributes? 
>>> this is the hardest part I cannot solve.
>>
>> If you have two numeric or character vectors, 'v1' and 'v2', then
>> 'intersection(v1, v2)' treats them as sets and gives a vector that is
>> their intersection. Is this what you need?
>>
>> G.
>>
>>> any help more than welcome!
>>>
>>> thanks in advance,
>>> Simone
>>> _______________________________________________
>>> igraph-help mailing list
>>> address@hidden
>>> http://lists.nongnu.org/mailman/listinfo/igraph-help
>>>
>>
>>
>>
>> --
>> Gabor Csardi <address@hidden>     UNIL DGM
>>
>> _______________________________________________
>> igraph-help mailing list
>> address@hidden
>> http://lists.nongnu.org/mailman/listinfo/igraph-help
>
>
> _______________________________________________
> igraph-help mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/igraph-help
>



-- 
Gabor Csardi <address@hidden>     UNIL DGM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]