class_docstr: Test contingency.py.
docstr: Test function chi2_mcnemar.
code: def test_chi2_mcnemar(self):
      """Test function chi2_mcnemar."""
      # Setup
      np.random.seed(42)
      mean, cov = [0.5, 0.5], [(1, 0.6), (0.6, 1)]
      x, y = np.random.multivariate_normal(mean, cov, 30).T
      data = pd.DataFrame({"x": x, "y": y})
      mask_class_1 = data > 0.5
      data[mask_class_1] = 1
      data[~mask_class_1] = 0
  
      # Testing validations
      def expect_assertion_error(*params):
          with pytest.raises(AssertionError):
              pg.chi2_mcnemar(*params)
  
      expect_assertion_error(1, "x", "y")  # Not a pd.DataFrame
      expect_assertion_error(data, x, "y")  # Not a string
      expect_assertion_error(data, "x", y)  # Not a string
      expect_assertion_error(data, "x", "z")  # Not a column of data
  
      # Testing happy-day
      pg.chi2_mcnemar(data, "x", "y")
  
      # Testing NaN incompatibility
      data.iloc[0, 0] = np.nan
      with pytest.raises(ValueError):
          pg.chi2_mcnemar(data, "x", "y")
  
      # Testing invalid dichotomous value
      data.iloc[0, 0] = 3
      with pytest.raises(ValueError):
          pg.chi2_mcnemar(data, "x", "y")
  
      # Testing error when b == 0 and c == 0
      data = pd.DataFrame(
          {"x": [0, 0, 0, 1, 1, 1], "y": [0, 0, 0, 1, 1, 1]}
      )
      with pytest.raises(ValueError):
          pg.chi2_mcnemar(data, "x", "y")
  
      # Comparing results with R
      # 2 x 2 contingency table (dof = 1)
      # >>> tbl = table(df$treatment_X, df$treatment_Y)
      # >>> mcnemar.test(tbl, correct = TRUE)
      _, stats = pg.chi2_mcnemar(
          df_mcnemar, "treatment_X", "treatment_Y"
      )
      assert round(stats.at["mcnemar", "chi2"], 3) == 20.021
      assert stats.at["mcnemar", "dof"] == 1
      assert np.isclose(stats.at["mcnemar", "p-approx"], 7.66e-06)
      # Results are compared to the exact2x2 R package
      # >>> exact2x2(tbl, paired = TRUE, midp = FALSE)
      assert np.isclose(stats.at["mcnemar", "p-exact"], 3.305e-06)
  
file_path: pingouin/pingouin/tests/test_contingency.py
imports: import pytest
  import numpy
  import pandas
  import pingouin
  from unittest import TestCase
  from scipy.stats import chi2_contingency
label_desc: Use image node_id 2 for calling the TestContingency obj's underlying member method code with example usage: obj.test_chi2_mcnemar() without return types