The gt.assortativity still seems to be wrong to me. I tried calculating the
degree-assortativity using gt.assortativity and gt.scalar_assortativity as
well as manually. My code:

import graph_tool.all as gt

# Load a graph
g = gt.collection.data['karate']

# Get the adjacency matrix
adj_mat = gt.adjacency(g).todense()

# Calculate S values
S1 = sum([v.out_degree() for v in g.vertices()])

S2 = sum([(v.out_degree())**2 for v in g.vertices()])

S3 = sum([(v.out_degree())**3 for v in g.vertices()])

Se = 0

for i in range(g.num_vertices()-1):
    for j in range(i+1, g.num_vertices()):
        Se += adj_mat[i, j] * g.vertex(i).out_degree() *
g.vertex(j).out_degree()

Se *= 2


# Calculate the assortativity coefficient

print((S1*Se-S2**2)/(S1*S3-S2**2))
print(gt.assortativity(g, deg = 'out'))
print(gt.scalar_assortativity(g, deg = 'out'))

Results are:

-0.475613097685
(-0.07774502579218864, 0.024258508125118667)
(-0.4756130976846143, 0.1669286053081143)

Am I missing something?

Thank you
Snehal Shekatkar



On Wed, Oct 4, 2017 at 8:57 PM, Snehal Shekatkar <[email protected]>
wrote:

> Thanks for the clarification and the quick modification.
>
> Snehal
>
> On Wed, Oct 4, 2017 at 7:04 PM, Tiago de Paula Peixoto <[email protected]>
> wrote:
>
>> On 04.10.2017 14:26, Snehal Shekatkar wrote:
>> > Thanks for the quick reply. It is indeed true that variance should be
>> NaN
>> > but assortativity would be zero if I understand it correctly.
>>
>> No, that is not correct. The variance is not NaN, it is zero. Just look at
>> the formula for scalar assortativity: If the variance is zero, the value
>> of
>> the coefficient is undefined, as I explained.
>>
>> > Now, when
>> > instead of 'float', I use 'int' as the type for the property map, I do
>> get 0
>> > value for the assortativity. Thus I guess that the values are wrong and
>> it
>> > is a bug. Am I right? From your reply, it isn't clear to me if this is
>> a bug.
>>
>> It is not a bug. The reason why you get different answers is due to
>> numerical instability. Instead of a variance of zero, what ends up
>> computed
>> instead is a very small number due to limited numerical precision.
>>
>> I've modified the version in git to always return NaN in such cases,
>> instead
>> of this unstable behavior.
>>
>> --
>> Tiago de Paula Peixoto <[email protected]>
>>
>>
>> _______________________________________________
>> graph-tool mailing list
>> [email protected]
>> https://lists.skewed.de/mailman/listinfo/graph-tool
>>
>>
>
>
> --
> Snehal M. Shekatkar
> Pune
> India
>



-- 
Snehal M. Shekatkar
Pune
India
_______________________________________________
graph-tool mailing list
[email protected]
https://lists.skewed.de/mailman/listinfo/graph-tool

Reply via email to