Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #54353
| Newsgroups | comp.lang.python |
|---|---|
| Date | 2013-09-17 21:25 -0700 |
| References | <73ee6fa3-baa6-4178-8596-5f88bbd0bfa2@googlegroups.com> |
| Message-ID | <d57f881d-3166-4ecc-adce-41d124728aac@googlegroups.com> (permalink) |
| Subject | Re: linregress and polyfit |
| From | Josef Pktd <josef.pktd@gmail.com> |
On Tuesday, September 17, 2013 10:34:39 PM UTC-4, Krishnan wrote: > I created an xy pair > > > > y = slope*x + intercept > > > > then I added some noise to "y" using > > > > numpy.random.normal - call it z > > > > I could recover the slope, intercept from (x,y) using linregress > > BUT cannot calculate the slope, intercept from (x, z) > > > > What is puzzling is that for both pairs (x,y) and (x,z) the > > polyfit (order 1) works just fine (gives me the slope, intercept) > > ---------------------------------------------------------------------- > > import numpy as np > > import scipy > > # create a straight line, y= slope*x + intercept > > x = np.linspace(0.0,10.0,21) > > slope = 1.0 > > intercept = 3.0 > > y = [] > > for i in range(len(x)): > > y.append(slope*x[i] + intercept) > > # now create a data file with noise > > z= [] > > for i in range(len(x)): > > z.append(y[i] + 0.1*np.random.normal(0.0,1.0,1)) When z is converted to a numpy array then it has an extra dimension that linregress cannot handle, because np.random.normal(0.0,1.0, 1) returns an array and not a scalar. much easier: use vectorized numpy instead of loop z = y + 0.1*np.random.normal(0.0,1.0, len(y)) which is a one dimensional array and works with linregress Josef > > # now calculate the slope, intercept using linregress > > from scipy import stats > > # No error here this is OK, works for x, y > > cslope, cintercept, r_value, p_value, std_err = stats.linregress(x,y) > > print cslope, cintercept > > # I get an error here > > #ValueError: array dimensions must agree except for d_0 > > nslope, nintercept, nr_value, np_value, nstd_err = stats.linregress(x,z) > > print nslope, nintercept > > # BUT polyfit works fine, polynomial or order 1 with both data sets > > ncoeffs = scipy.polyfit(x,z,1) > > print ncoeffs > > coeffs = scipy.polyfit(x,y,1) > > print coeffs
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
linregress and polyfit Krishnan <chitturk@uah.edu> - 2013-09-17 19:34 -0700
Re: linregress and polyfit Josef Pktd <josef.pktd@gmail.com> - 2013-09-17 21:25 -0700
Re: linregress and polyfit chitturk@uah.edu - 2013-09-18 06:38 -0700
Re: linregress and polyfit Dave Angel <davea@davea.name> - 2013-09-18 19:57 +0000
Re: linregress and polyfit Oscar Benjamin <oscar.j.benjamin@gmail.com> - 2013-09-19 15:37 +0100
Re: linregress and polyfit chitturk@uah.edu - 2013-09-19 04:32 -0700
csiph-web