title: Python Distribution Fitting with Sum of Square Error (SSE)
body: <p>I am trying to find an optimal distribution curve fit to my data consisting of </p>
  
  <pre><code>y-axis = [0, 0, 0, 0, 0.24, 0.53, 0.49, 0.64, 0.54, 0.78, 0.59, 0.44, 
            0.34, 0.88, 0.2, 0.49, 0.39, 0.39, 0.29, 0.2, 0.05, 0.05, 
            0.25, 0.05, 0.1, 0.15, 0.1, 0.1, 0.1, 0, 0, 0, 0, 0]
  </code></pre>
  
  <p>y-axis are probabilities of an event occurring in x-axis time bins:</p>
  
  <pre><code>x-axis = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 
            12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 
            22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 
            32.0, 33.0, 34.0]
  </code></pre>
  
  <p>I am doing this in python following example provided on <a href="https://stackoverflow.com/questions/6620471/fitting-empirical-distribution-to-theoretical-ones-with-scipy-python">Fitting empirical distribution to theoretical ones with Scipy (Python)?</a></p>
  
  <p>Specifically I am attempting to recreate the part called 'Distribution Fitting with Sum of Square Error (SSE)', where you run through the different distributions to find the right fit to the data. </p>
  
  <p>How can I modify that example in order to make this work on my data inputs? answered</p>
  
  <p>Update version based on Bill's response, but now trying to plot the fitted curve against the data and seeing something off: </p>
  
  <pre><code>%matplotlib inline
  import matplotlib.pyplot as plt
  import scipy
  import scipy.stats
  import numpy as np
  from scipy.stats import gamma, lognorm, loglaplace
  from scipy.optimize import curve_fit
  
  x_axis = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0]
  y_axis = [0, 0, 0, 0, 0.24, 0.53, 0.49, 0.64, 0.54, 0.78, 0.59, 0.44, 0.34, 0.88, 0.2, 0.49, 0.39, 0.39, 0.29, 0.2, 0.05, 0.05, 0.25, 0.05, 0.1, 0.15, 0.1, 0.1, 0.1, 0, 0, 0, 0, 0]
  
  matplotlib.rcParams['figure.figsize'] = (16.0, 12.0)
  matplotlib.style.use('ggplot')
  
  def f(x, a, loc, scale):
      return gamma.pdf(x, a, loc, scale)
  
  result, pcov = curve_fit(f, x_axis, y_axis)
  
  # get curve shape, location, scale
  shape = result[:-2]
  loc = result[-2]
  scale = result[-1]
  
  # construct the curve
  x = np.linspace(0, 36, 100)
  y = f(x, *result)
  
  plt.bar(x_axis, y_axis, width, alpha=0.75)
  plt.plot(x, y, c='g')
  </code></pre>