In [1]:
%run basics
%matplotlib
import scipy.odr
import statsmodels.api as sm


Using matplotlib backend: Qt4Agg

In [2]:
def linear_function(B,x):
    """
    Purpose:
     Linear function for use with orthogonal distance regression.
    Usage:
     linear = scipy.odr.Model(qcutils.linear_function)
     where B is a list of slope and offset values
           x is an array of x values
    """
    return B[0]*x + B[1]

In [3]:
x = numpy.arange(0,1000)+500*numpy.random.rand(1000)
y = numpy.arange(0,1000)+500*numpy.random.rand(1000)

In [4]:
fig=plt.figure()
plt.plot(x,y,'b.')
plt.show()

In [5]:
linear = scipy.odr.Model(linear_function)
mydata = scipy.odr.Data(x,y)
myodr = scipy.odr.ODR(mydata,linear,beta0=[1,0])
myoutput = myodr.run()
myoutput.pprint()


Beta: [  1.03201009 -30.81500167]
Beta Std Error: [  0.02211227  17.80683259]
Beta Covariance: [[  2.34221816e-08  -1.75327056e-05]
 [ -1.75327056e-05   1.51891762e-02]]
Residual Variance: 20875.6079062
Inverse Condition #: 4.57840336807e-05
Reason(s) for Halting:
  Sum of squares convergence

In [6]:
resols = sm.OLS(y,sm.add_constant(x,prepend=False)).fit()
print resols


<statsmodels.regression.linear_model.RegressionResultsWrapper object at 0x7f0bc1feb190>

In [7]:
print resols.params[0],resols.params[1]


0.814638519608 131.898870958

In [11]:
myoutput.beta


Out[11]:
array([  1.03201009, -30.81500167])

In [ ]: