docs: def estimate(self, significance_level=0.01):
          """
          Estimates a DAG for the data set, using the PC constraint-based
          structure learning algorithm. Independencies are identified from the
          data set using a chi-squared statistic with the acceptance threshold of
          `significance_level`. PC identifies a partially directed acyclic graph (PDAG), given
          that the tested independencies admit a faithful Bayesian network representation.
          This method returns a DAG that is a completion of this PDAG.
  
          Parameters
          ----------
          significance_level: float, default: 0.01
              The significance level to use for conditional independence tests in the data set.
  
              `significance_level` is the desired Type 1 error probability of
              falsely rejecting the null hypothesis that variables are independent,
              given that they are. The lower `significance_level`, the less likely
              we are to accept dependencies, resulting in a sparser graph.
  
          Returns
          -------
          model: DAG()-instance
              An estimate for the DAG for the data set (not yet parametrized).
  
          Reference
          ---------
          Neapolitan, Learning Bayesian Networks, Section 10.1.2, Algorithm 10.2 (page 550)
          http://www.cs.technion.ac.il/~dang/books/Learning%20Bayesian%20Networks(Neapolitan,%20Richard).pdf
  
          Examples
          --------
          >>> import pandas as pd
          >>> import numpy as np
          >>> from pgmpy.estimators import ConstraintBasedEstimator
          >>> data = pd.DataFrame(np.random.randint(0, 5, size=(2500, 3)), columns=list('XYZ'))
          >>> data['sum'] = data.sum(axis=1)
          >>> print(data)
                X  Y  Z  sum
          0     3  0  1    4
          1     1  4  3    8
          2     0  0  3    3
          3     0  2  3    5
          4     2  1  1    4
          ...  .. .. ..  ...
          2495  2  3  0    5
          2496  1  1  2    4
          2497  0  4  2    6
          2498  0  0  0    0
          2499  2  4  0    6
  
          [2500 rows x 4 columns]
          >>> c = ConstraintBasedEstimator(data)
          >>> model = c.estimate()
          >>> print(model.edges())
          [('Z', 'sum'), ('X', 'sum'), ('Y', 'sum')]
          """
  
          skel, separating_sets = self.estimate_skeleton(significance_level)
          pdag = self.skeleton_to_pdag(skel, separating_sets)
          model = self.pdag_to_dag(pdag)
          return model