Plot Interaction of Categorical Factors
=======================================


.. _categorical_interaction_plot_notebook:

`Link to Notebook GitHub <https://github.com/statsmodels/statsmodels/blob/master/examples/notebooks/categorical_interaction_plot.ipynb>`_

.. raw:: html

   
   <div class="cell border-box-sizing text_cell rendered">
   <div class="prompt input_prompt">
   </div>
   <div class="inner_cell">
   <div class="text_cell_render border-box-sizing rendered_html">
   <p>In this example, we will vizualize the interaction between categorical factors. First, we will create some categorical data are initialized. Then plotted using the interaction_plot function which internally recodes the x-factor categories to ingegers.</p>
   </div>
   </div>
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">
   In&nbsp;[1]:
   </div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
   <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
   <span class="kn">import</span> <span class="nn">pandas</span> <span class="kn">as</span> <span class="nn">pd</span>
   <span class="kn">from</span> <span class="nn">statsmodels.graphics.factorplots</span> <span class="kn">import</span> <span class="n">interaction_plot</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">
   In&nbsp;[2]:
   </div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">12345</span><span class="p">)</span>
   <span class="n">weight</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">([</span><span class="s">&#39;low&#39;</span><span class="p">,</span> <span class="s">&#39;hi&#39;</span><span class="p">,</span> <span class="s">&#39;low&#39;</span><span class="p">,</span> <span class="s">&#39;hi&#39;</span><span class="p">],</span> <span class="mi">15</span><span class="p">),</span> <span class="n">name</span><span class="o">=</span><span class="s">&#39;weight&#39;</span><span class="p">)</span>
   <span class="n">nutrition</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">([</span><span class="s">&#39;lo_carb&#39;</span><span class="p">,</span> <span class="s">&#39;hi_carb&#39;</span><span class="p">],</span> <span class="mi">30</span><span class="p">),</span> <span class="n">name</span><span class="o">=</span><span class="s">&#39;nutrition&#39;</span><span class="p">)</span>
   <span class="n">days</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">60</span><span class="p">))</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   </div>
   <div class="cell border-box-sizing code_cell rendered">
   <div class="input">
   <div class="prompt input_prompt">
   In&nbsp;[3]:
   </div>
   <div class="inner_cell">
       <div class="input_area">
   <div class="highlight"><pre><span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>
   <span class="n">fig</span> <span class="o">=</span> <span class="n">interaction_plot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">weight</span><span class="p">,</span> <span class="n">trace</span><span class="o">=</span><span class="n">nutrition</span><span class="p">,</span> <span class="n">response</span><span class="o">=</span><span class="n">days</span><span class="p">,</span> 
                          <span class="n">colors</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;red&#39;</span><span class="p">,</span> <span class="s">&#39;blue&#39;</span><span class="p">],</span> <span class="n">markers</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;D&#39;</span><span class="p">,</span> <span class="s">&#39;^&#39;</span><span class="p">],</span> <span class="n">ms</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">)</span>
   </pre></div>
   
   </div>
   </div>
   </div>
   
   <div class="output_wrapper">
   <div class="output">
   
   
   <div class="output_area"><div class="prompt"></div>
   
   
   <div class="output_png output_subarea ">
   <img src="data:image/png;base64,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
   "
   >
   </div>
   
   </div>
   
   </div>
   </div>
   
   </div>

   <script src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"type="text/javascript"></script>
   <script type="text/javascript">
   init_mathjax = function() {
       if (window.MathJax) {
           // MathJax loaded
           MathJax.Hub.Config({
               tex2jax: {
               // I'm not sure about the \( and \[ below. It messes with the
               // prompt, and I think it's an issue with the template. -SS
                   inlineMath: [ ['$','$'], ["\\(","\\)"] ],
                   displayMath: [ ['$$','$$'], ["\\[","\\]"] ]
               },
               displayAlign: 'left', // Change this to 'center' to center equations.
               "HTML-CSS": {
                   styles: {'.MathJax_Display': {"margin": 0}}
               }
           });
           MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
       }
   }
   init_mathjax();

   // since we have to load this in a ..raw:: directive we will add the css
   // after the fact
   function loadcssfile(filename){
       var fileref=document.createElement("link")
       fileref.setAttribute("rel", "stylesheet")
       fileref.setAttribute("type", "text/css")
       fileref.setAttribute("href", filename)

       document.getElementsByTagName("head")[0].appendChild(fileref)
   }
   // loadcssfile({{pathto("_static/nbviewer.pygments.css", 1) }})
   // loadcssfile({{pathto("_static/nbviewer.min.css", 1) }})
   loadcssfile("../../../_static/nbviewer.pygments.css")
   loadcssfile("../../../_static/ipython.min.css")
   </script>