quality() and modularity values are not identical.
soodimilanlouei opened this issue · 3 comments
Hi,
Many thanks for your great work on this package. I have an unweighted undirected network and I used the ModularityVertexPartition
quality function to find communities for different values of max_comm_size
. While it's been said in 72 that for such a network quality()
and modularity
should be identical, they are not in my case. In the plot below, you can see the quality and modularity for different values of max_comm_size
(annotated on the plot). I was wondering why they are not identical. Also, can you provide the mathematical formulation for these two quantities?
The code that I'm using:
partition = la.find_partition(g, la.ModularityVertexPartition, seed = 2022, max_comm_size = i)
quality = la.SignificanceVertexPartition.FromPartition(partition).quality()
modularity = la.SignificanceVertexPartition.FromPartition(partition).modularity
Thanks!
Note that
quality = la.SignificanceVertexPartition.FromPartition(partition).quality()
calculates the significance of the partition partition
, not the modularity. On the other hand,
modularity = la.SignificanceVertexPartition.FromPartition(partition).modularity
does calculate the modularity of partition
. In fact, partition.modularity
should simply be equal to modularity
in this case, since the partitions in partition
and la.SignificanceVertexPartition.FromPartition(partition)
are identical, they are just using different quality functions.
Hopefully this explains your question!
Thanks for the response.
I also thought quality
and modularity
should be identical in this case, but as you can see in the plot that I attached above, they are not, and even the relationship between them is not linear and I'm trying to understand why.
Thanks for the response.
You're welcome!
I also thought
quality
andmodularity
should be identical in this case
Not as you have defined them above.
If you calculate
quality = partition.quality()
then yes, quality == partition.modularity
. For unweighted undirected graphs, partition.modularity == partition.quality()
if partition
is a ModularityVertexPartition
. However, you are now calculating quality
as the quality of a SignificanceVertexPartition
, so that quality
represents significance, not modularity.
Hopefully it is clear now?
If not, please post your exact script to reproduce the figure, I can then take a closer look and we can figure out what is happening.