Skip to content

[BUG] AcyclicGraphGenerator doubles expected_degree in erdos mode #168

@Jose-De-Miguel

Description

@Jose-De-Miguel

🐛 Bug: Wrong expected degree in init_dag for dag_type='erdos'

In init_dag, we currently have:

elif self.dag_type == 'erdos':
    nb_edges = self.expected_degree * self.nodes

However, it should be:

nb_edges = (self.expected_degree * self.nodes) / 2

The current implementation roughly doubles the expected number of edges per node.

Example:

import numpy as np
import networkx as nx
from cdt.data import AcyclicGraphGenerator

def avg_undirected_degree(G: nx.DiGraph) -> float:
    """Average degree of the undirected version of a directed graph."""
    Gu = G.to_undirected()
    return sum(dict(Gu.degree()).values()) / Gu.number_of_nodes()


obs = []
for _ in range(100):
        gen = AcyclicGraphGenerator(
            causal_mechanism='linear',
            dag_type='erdos',
            nodes=100,
            expected_degree=5,
            npoints=1,          
           )
        _, G = gen.generate()   
        obs.append(avg_undirected_degree(G))
       
print(float(np.mean(obs)))

Expected: ≈ 5
Observed ≈ 10

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions