関数fitting_line_given_errors マニュアル

(The documentation of function fitting_line_given_errors)

Last Update: 2021/12/1


◆機能・用途(Purpose)

個々のデータの誤差(前もって与えられているものとする)で重み付けして データを直線フィットする。
Fit a data by a straight line using given errors of individual samples as the weight.


◆形式(Format)

#include <fitting.h>
inline double ∗fitting_line_given_errors
(const int N,const double ∗x,const double ∗y, const double ∗delta)


◆引数(Arguments)

N フィットするデータ点数。
The number of data points to fit.
x フィットするデータの\(x\)の値のリスト。 \(N\)個の要素から成る配列で与える。
The list of data values of \(x\) to fit, given as an array composed of \(N\) components.
y フィットするデータの\(y\)の値のリスト。 \(N\)個の要素から成る配列で与える。
The list of data values of \(y\) to fit, given as an array composed of \(N\) components.
delta フィットするデータの\(y\)の値の誤差のリスト。 \(N\)個の要素から成る配列で与える。
The list of the errors of \(y\) of the data to fit, given as an array composed of \(N\) components.


◆戻り値(Return value)

直線の傾きを第1要素、切片を第2要素、 傾きの推定誤差を第3要素、切片の推定誤差を第4要素とする配列。
An array composed of the slope, intercept, and estimation errors of them as the 1st to 4th components, respectively.


◆使用例(Example)

double x[]={1.0,2.0,3.0,4.0,5.0};
double y[]={1.1,2.1,3.4,4.5,5.5};
double error[]={0.1,0.1,0.2,0.3,0.05};
double ∗line;
line=fitting_line_given_errors(5,x,y,error);


◆計算式とアルゴリズム (Formula and algorithm)

\((x,y)\)平面上の\(N\)個のデータ点\((x_1,y_1),\cdots,(x_N,y_N)\)を 直線\(y=ax+b\)でフィットすることを考える。 各データ\(i\)(\(=1,\cdots,N\))について\(x_i\)に誤差は無く、 \(y_i\)には既知の誤差\(\delta_i\)が含まれるものとする。
Consider a problem to fit \(N\) data points on \((x,y)\) plane, \((x_1,y_1),\cdots,(x_N,y_N)\), by a straight line \(y=ax+b\). For each data \(i\), where \(i=1,\cdots,N\), it is assumed that \(x_i\) has no error, and \(y_i\) has a given error of \(\delta_i\).

この場合、関数fitting_line_weightの計算式において 重み係数\(w_i\)として\(1/\delta_i^2\)を用いれば良い。 また関数fitting_line_weightではデータと直線のフィッティング残差を データの誤差として用いたが、 この関数の場合には個々のデータの誤差\(\delta_i\)が既知であるので それらを直接用いれば良い。
This problem can be solved by replacing the weights \(w_i\) in the formula of function fitting_line_weight by \(1/\delta_i^2\). Also, the residuals between the data and straight line were used as the errors of data in the function fitting_line_weight, whereas the errors of data \(\delta_i\) are known in this function and thus can directly be used.

関数fitting_line_weightの計算式に対してこの置き換えを行うと、傾きは \[\begin{equation} a=\frac{1}{\Delta}\left[ \left(\sum_{i=1}^N\frac{x_iy_i}{\delta_i^2}\right) \left(\sum_{i=1}^N \frac{1}{\delta_i^2}\right) -\left(\sum_{i=1}^N \frac{x_i}{\delta_i^2}\right) \left(\sum_{i=1}^N \frac{y_i}{\delta_i^2}\right) \right] \label{eq.a} \end{equation}\] 切片は \[\begin{equation} b=\frac{1}{\Delta}\left[ \left(\sum_{i=1}^N \frac{x_i^2}{\delta_i^2}\right) \left(\sum_{i=1}^N \frac{y_i}{\delta_i^2}\right) -\left(\sum_{i=1}^N \frac{x_i}{\delta_i^2}\right) \left(\sum_{i=1}^N \frac{x_iy_i}{\delta_i^2}\right) \right] \label{eq.b} \end{equation}\] 傾きの推定誤差は \[\begin{eqnarray} \sigma_a &=& \frac{1}{\Delta}\sqrt{\sum_{j=1}^N\left( \frac{x_j}{\delta_j^2}\sum_{i=1}^N \frac{1}{\delta_i^2} -\frac{1}{\delta_j^2}\sum_{i=1}^N \frac{x_i}{\delta_i^2} \right)^2\delta_j^2} \nonumber \\ &=& \frac{1}{\Delta}\sqrt{\sum_{j=1}^N\frac{1}{\delta_j^2}\left( x_j\sum_{i=1}^N \frac{1}{\delta_i^2} -\sum_{i=1}^N \frac{x_i}{\delta_i^2} \right)^2} \label{eq.sigma_a} \end{eqnarray}\] 切片の推定誤差は \[\begin{eqnarray} \sigma_b &=& \frac{1}{\Delta}\sqrt{\sum_{j=1}^N\left( \frac{1}{\delta_j^2}\sum_{i=1}^N \frac{x_i^2}{\delta_i^2} -\frac{x_j}{\delta_j^2}\sum_{i=1}^N \frac{x_i}{\delta_i^2} \right)^2\delta_j^2} \nonumber \\ &=& \frac{1}{\Delta}\sqrt{\sum_{j=1}^N\frac{1}{\delta_j^2}\left( \sum_{i=1}^N \frac{x_i^2}{\delta_i^2} -x_j\sum_{i=1}^N \frac{x_i}{\delta_i^2} \right)^2} \label{eq.sigma_b} \end{eqnarray}\] となる。ここで \[\begin{equation} \Delta= \left(\sum_{i=1}^N \frac{x_i^2}{\delta_i^2}\right) \left(\sum_{i=1}^N \frac{1}{\delta_i^2}\right) -\left(\sum_{i=1}^N \frac{x_i}{\delta_i^2}\right)^2 \label{eq.Delta} \end{equation}\] である。
Applying these replacements to the formulas of function fitting_line_weight, we obtain eqs (\ref{eq.a})-(\ref{eq.sigma_b}) for the slope \(a\), intercept \(b\), and estimation errors of the slope (\(\sigma_a\)) and intercept (\(\sigma_b\)), respectively, where \(\Delta\) is given by eq. (\ref{eq.Delta}).