Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix error in plot method #257

Closed
drbenvincent opened this issue Oct 16, 2023 · 4 comments · Fixed by #258
Closed

fix error in plot method #257

drbenvincent opened this issue Oct 16, 2023 · 4 comments · Fixed by #258
Labels
bug Something isn't working plotting Improve or fix plotting

Comments

@drbenvincent
Copy link
Collaborator

drbenvincent commented Oct 16, 2023

When calling result.plot() we are getting an error:

ValueError: 
CI_{94%}
  • This seems to affect the PyMC difference in difference models. For example, see the documentation notebooks did_pymc_banks.ipynb, did_pymc.ipynb.
  • We'd also want to check that any solution doesn't break the doctests.
  • Ideally we'd add some sort of test(s) that result.plot() executes ok.
@drbenvincent drbenvincent added bug Something isn't working plotting Improve or fix plotting labels Oct 16, 2023
@juliangardin
Copy link

I think there is a general issue withe the plot function for difference in differences class

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[169], line 1
----> 1 result.plot()

File /opt/conda/lib/python3.10/site-packages/causalpy/pymc_experiments.py:567, in DifferenceInDifferences.plot(self, round_to)
    564 fig, ax = plt.subplots()
    566 # Plot raw data
--> 567 sns.scatterplot(
    568     self.data,
    569     x=self.time_variable_name,
    570     y=self.outcome_variable_name,
    571     hue=self.group_variable_name,
    572     alpha=1,
    573     legend=False,
    574     markers=True,
    575     ax=ax,
    576 )
    578 # Plot model fit to control group
    579 time_points = self.x_pred_control[self.time_variable_name].values

File /opt/conda/lib/python3.10/site-packages/seaborn/_decorators.py:46, in _deprecate_positional_args.<locals>.inner_f(*args, **kwargs)
     36     warnings.warn(
     37         "Pass the following variable{} as {}keyword arg{}: {}. "
     38         "From version 0.12, the only valid positional argument "
   (...)
     43         FutureWarning
     44     )
     45 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 46 return f(**kwargs)

File /opt/conda/lib/python3.10/site-packages/seaborn/relational.py:808, in scatterplot(x, y, hue, style, size, data, palette, hue_order, hue_norm, sizes, size_order, size_norm, markers, style_order, x_bins, y_bins, units, estimator, ci, n_boot, alpha, x_jitter, y_jitter, legend, ax, **kwargs)
    793 @_deprecate_positional_args
    794 def scatterplot(
    795     *,
   (...)
    804     legend="auto", ax=None, **kwargs
    805 ):
    807     variables = _ScatterPlotter.get_semantics(locals())
--> 808     p = _ScatterPlotter(
    809         data=data, variables=variables,
    810         x_bins=x_bins, y_bins=y_bins,
    811         estimator=estimator, ci=ci, n_boot=n_boot,
    812         alpha=alpha, x_jitter=x_jitter, y_jitter=y_jitter, legend=legend,
    813     )
    815     p.map_hue(palette=palette, order=hue_order, norm=hue_norm)
    816     p.map_size(sizes=sizes, order=size_order, norm=size_norm)

File /opt/conda/lib/python3.10/site-packages/seaborn/relational.py:587, in _ScatterPlotter.__init__(self, data, variables, x_bins, y_bins, estimator, ci, n_boot, alpha, x_jitter, y_jitter, legend)
    571 def __init__(
    572     self, *,
    573     data=None, variables={},
   (...)
    581     # the kind of plot to draw, but for the time being we need to set
    582     # this information so the SizeMapping can use it
    583     self._default_size_range = (
    584         np.r_[.5, 2] * np.square(mpl.rcParams["lines.markersize"])
    585     )
--> 587     super().__init__(data=data, variables=variables)
    589     self.alpha = alpha
    590     self.legend = legend

File /opt/conda/lib/python3.10/site-packages/seaborn/_core.py:605, in VectorPlotter.__init__(self, data, variables)
    603 def __init__(self, data=None, variables={}):
--> 605     self.assign_variables(data, variables)
    607     for var, cls in self._semantic_mappings.items():
    608 
    609         # Create the mapping function
    610         map_func = partial(cls.map, plotter=self)

File /opt/conda/lib/python3.10/site-packages/seaborn/_core.py:668, in VectorPlotter.assign_variables(self, data, variables)
    666 else:
    667     self.input_format = "long"
--> 668     plot_data, variables = self._assign_variables_longform(
    669         data, **variables,
    670     )
    672 self.plot_data = plot_data
    673 self.variables = variables

File /opt/conda/lib/python3.10/site-packages/seaborn/_core.py:903, in VectorPlotter._assign_variables_longform(self, data, **kwargs)
    898 elif isinstance(val, (str, bytes)):
    899 
    900     # This looks like a column name but we don't know what it means!
    902     err = f"Could not interpret value `{val}` for parameter `{key}`"
--> 903     raise ValueError(err)
    905 else:
    906 
    907     # Otherwise, assume the value is itself data
    908 
    909     # Raise when data object is present and a vector can't matched
    910     if isinstance(data, pd.DataFrame) and not isinstance(val, pd.Series):

ValueError: Could not interpret value `y` for parameter `y`

@drbenvincent
Copy link
Collaborator Author

drbenvincent commented Mar 15, 2024

Hi @juliangardin. Would you be able to create a new issue with a minimum working example - i.e. what steps you took which resulted in the error? And clarify which version of CausalPy you are running.

@juliangardin
Copy link

@drbenvincent I was running the did-pymc example here: https://causalpy.readthedocs.io/en/stable/notebooks/did_pymc.html

Version = 0.2.2

@drbenvincent
Copy link
Collaborator Author

So I re-ran the notebook using the development version of CausalPy and no errors.

To see if it's a bug that was fixed between 0.2.2 and the development version I created a new environment and ran the commands from that notebook in ipython.

set up env

conda create -c conda-forge -n causalpydebug "pymc>=5" "causalpy==0.2.2"
conda activate causalpydebug
ipython

Then in that ipython session I ran

import arviz as az
import causalpy as cp
import matplotlib.pyplot as plt
seed = 42

df = cp.load_data("did")

result = cp.pymc_experiments.DifferenceInDifferences(
    df,
    formula="y ~ 1 + group*post_treatment",
    time_variable_name="t",
    group_variable_name="group",
    model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
)

fig, ax = result.plot()
plt.show()

and the image appeared fine.

There is a bug with result.summary(), but that is fixed in the development version and will filter through into 0.2.3 when we release it soonish.

Sorry, but I can't reproduce the bug so far. Feel free to create an issue with all the steps to see if we can reproduce the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working plotting Improve or fix plotting
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants