[SciPy-User] data fitting, constraints, covariance matrix

Björn Nadrowski bjrnfrdnnd at googlemail.com
Fri Oct 23 06:01:33 EDT 2009


Hello,

is there a way of solving a problem with the following specifications?

I would like to do classical data fitting, having a set of predictor  
observations , x_i, and a set of response observations, y_i.
i goes from 1 to n; n would be the number of data points.
For the sake of simplification, let us assume that a single predictor  
datapoint and a single response datapoint is a scalar value.

I would then have a function f(p,x) that has a number of parameters p  
(let us say p is a vector of length q)
Associated with x_i and y_i , I would have a set of experimentally  
measured errors, sigma_x_i and sigma_y_i.

I would then like to perform an orthogonal distance reduction,  
minimizing the function

\sum_{i=1}^n ( ( 1 / sigma_y_i)² * (f(p, x_i + delta_i) - y_i)² + (1/ 
sigma_x_i)² * delta_i² )

by varying the p_j and the delta_i, where j goes from 1 to q.

This is classical orthogonal distance reduction with weighted input  
variables, and it is performed py scipy.odr, also for datapoints of  
multiple dimensions.
Scipy.odr nicely calculates some local minimum, and also calculates  
the covariance matrix, and asymptotic standard errors.
It also allows the user to fix some of the p_i during fitting, such  
that only a subset of the p_i is varied in order to find a local  
minimum.
What scipy.odr does not provide, and I am looking for a program that  
does that, is: there are no constraints.
There is no way to specify that the p_i should have boundaries, and  
there is no way to specify non-local constraints
such as
p_1*p_2 = p_3

In the openopt library, I have noticed that such constraints are  
routinely handled, and that there are also box constraints such as
0<p_1<10
.
What I did not find in the openopt framework, is the handling of  
weights, or errors, on the datapoints in the way I just exposed.
Neither did I find that a covariance matrix is calculated, or that  
asymptotic standard errors are being computed.

My question would be, whether there is a simple way to fit such a  
nonlinear problem using openopt, or scipy, or a combination of both,
with constraints on the parameters, errors on predictor and response  
variables, possible fixing of some of the parameters during  
minimization, calculation of the covariance matrix at the minimum and  
calculation of standard errors for the parameter values.

If there is, please tell me how a simple problem would be solved.

Thanks for any help in advance!




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20091023/516e8f5d/attachment.html>


More information about the SciPy-User mailing list