[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