[Ifeffit] weighting multi-data fit

Matt Newville newville at cars.uchicago.edu
Tue Jun 19 13:38:00 CDT 2007


Hi Jörg,

On Tuesday 19 June 2007, Jörg Haug wrote:
> Dear all,
>
> I have a question regarding the weighting for a multiple data set fitting.
> I found that there is the parameter Epsilon to do this in Artemis. But in
> the help file there is no description how to use this parameter. Which
> value did I have to use to set the weighting to (for example) double or
> half? Best regards

It's a little bit convoluted -- probably more so than it should be --
to modify the weightings for different data sets in a fit using
multiple data sets.   It's also poorly documented.  It is discussed in
some detail in the older Feffit documentation that's on the Ifeffit
web site.

The approach is to specify epsilon_r or epsilon_k for each data set.
The two values are related and specifying either one is sufficient for
the feffit() command to calculate the appropriate one.  For fits in R
space, epsilon_r is used as the weighting factor:  For a single data
set, the quantity minimized in the best fit is
   chi_square = (1 / N ) Sum_i=1^N   {   [Data_i - Fit_i]^2 / epsilon_r^2  }

where the sum is over N R-space points.  The data spacing for chi(R)
is set by the Fourier transform range and k-grid, so that points in R
space are ~0.03Ang apart.   Since we really ought to be careful about
how much information is in our data, the sum might be better (though
less stable) if the spacing were given by the spectral resolution (see
other recent discussions!) of pi/(2*Delta k), which would make the sum
go to N_idp instead of N.

We take that into account, and also assume that there is no R
dependence of epsilon_r,  so that  chi_square becomes
   chi_square = N_idp / (N epsilon_r^2)  Sum_i=1^N   [ Data_i - Fit_i]^2

for one data set.   For multiple data sets, there's an outer sum, so
the weighting factors applied
actually take N_idp and N (for each data set!) into account.  For a
fit with M data sets,
   chi_square = SUM_j=1^M   {  N_idp_j /(N_j epsilon_r_j^2)
Sum_i=1^N_j  [ Data_ij - Fit_ij]^2  }


The upshot is that if you want "equal weighting" to spectra with
different k- and  R-ranges and/or different noise levels,  you might
have to be a little careful in how you set epsilon_r (or, equivalently
epsilon_k) for each data set.      For the simplest case of the
different data sets having equal k- and R- ranges, you can just double
an epsilon_k for a particular data set to mean "accept a fit that's
twice as bad for this data set".

Cheers,

--Matt



More information about the Ifeffit mailing list