Local clustering coefficient normalization
Hi Tiago, I have extensively used graph-tool, and I find it very nice and efficient so, first of all, congratulations for your work. I write to you because of a suspected bug in the local clustering coefficient, which results normalized in [0, 2] instead than in [0,1] for one of my datasets. This issue is probably due to the fact that the network was obtained by "simmetrization" of a previously directed one, by using g.set_directed(False). Best wishes.
On 08.02.2016 10:28, Danilo Giuffrida wrote:
I write to you because of a suspected bug in the local clustering coefficient, which results normalized in [0, 2] instead than in [0,1] for one of my datasets. This issue is probably due to the fact that the network was obtained by "simmetrization" of a previously directed one, by using g.set_directed(False).
Could you please give us an example that shows the problem? Best, Tiago -- Tiago de Paula Peixoto <tiago@skewed.de>
Yes. For example in the original directed network I have the triangle: (1)<--(2)<-->(3)-->(1) then I obtain the undirected network by means of g.set_directed(False) and evaluate the local clustering of node 1, finding C(1)=2 (instead of C(1)=1). This happens for all the nodes in this network, i.e. their local clustering is always between 0 and 2. Of course I could simply divide by two, but I would like to understand what is going wrong. I know that for directed/undirected network the normalization is different, hence I guess that something is not going on with the set_directed method. Thank you. 2016-02-08 11:04 GMT+01:00 Tiago de Paula Peixoto <tiago@skewed.de>:
On 08.02.2016 10:28, Danilo Giuffrida wrote:
I write to you because of a suspected bug in the local clustering coefficient, which results normalized in [0, 2] instead than in [0,1] for one of my datasets. This issue is probably due to the fact that the network was obtained by "simmetrization" of a previously directed one, by using g.set_directed(False).
Could you please give us an example that shows the problem?
Best, Tiago
-- Tiago de Paula Peixoto <tiago@skewed.de>
_______________________________________________ graph-tool mailing list graph-tool@skewed.de http://lists.skewed.de/mailman/listinfo/graph-tool
On 08.02.2016 11:31, Danilo Giuffrida wrote:
Yes. For example in the original directed network I have the triangle: (1)<--(2)<-->(3)-->(1) then I obtain the undirected network by means of g.set_directed(False) and evaluate the local clustering of node 1, finding C(1)=2 (instead of C(1)=1). This happens for all the nodes in this network, i.e. their local clustering is always between 0 and 2. Of course I could simply divide by two, but I would like to understand what is going wrong. I know that for directed/undirected network the normalization is different, hence I guess that something is not going on with the set_directed method.
This is because if you make the network undirected, it becomes a multigraph, i.e. there are _two_ edges between 2 and 3. The clustering coefficient is normalized only for _simple_ graphs, with at most one edge between nodes. If you want to transform the network into a multigraph, you can filter the parallel edges out: u = GraphView(g, efilt=logical_not(label_parallel_edges(g, mark_only=True).fa)) or remove them with remove_parallel_edges(). Best, Tiago -- Tiago de Paula Peixoto <tiago@skewed.de>
Thank you, this solved my problems! Best wishes. 2016-02-08 11:38 GMT+01:00 Tiago de Paula Peixoto <tiago@skewed.de>:
On 08.02.2016 11:31, Danilo Giuffrida wrote:
Yes. For example in the original directed network I have the triangle: (1)<--(2)<-->(3)-->(1) then I obtain the undirected network by means of g.set_directed(False) and evaluate the local clustering of node 1, finding C(1)=2 (instead of C(1)=1). This happens for all the nodes in this network, i.e. their local clustering is always between 0 and 2. Of course I could simply divide by two, but I would like to understand what is going wrong. I know that for directed/undirected network the normalization is different, hence I guess that something is not going on with the set_directed method.
This is because if you make the network undirected, it becomes a multigraph, i.e. there are _two_ edges between 2 and 3. The clustering coefficient is normalized only for _simple_ graphs, with at most one edge between nodes.
If you want to transform the network into a multigraph, you can filter the parallel edges out:
u = GraphView(g, efilt=logical_not(label_parallel_edges(g, mark_only=True).fa))
or remove them with remove_parallel_edges().
Best, Tiago
-- Tiago de Paula Peixoto <tiago@skewed.de>
_______________________________________________ graph-tool mailing list graph-tool@skewed.de http://lists.skewed.de/mailman/listinfo/graph-tool
participants (2)
-
Danilo Giuffrida -
Tiago de Paula Peixoto