최대 우도(maximum likelihood) 방법을 이용한 일련의 실험 포인트를 가장 잘 맞추는 직선을 찾아내는 해석적인 방법을 선형 회귀(linear regression) 또는 선의 최소 제곱 핏(least-squares fit for a line)이라고 한다.
우리가 측정한 실험 데이타 포인트들이 1차 함수를 따라야 한다고 하고, 이 함수를 다음과 같이 정의하자.
\[y=ax+b\]
측정값의 \(x\)의 오차는 무시할 수 있다고 가정하고, \(y\)의 오차는 진실값에서 표준편차 \(\sigma_y\)를 가지는 가우시안 분포로 존재한다고 할 때, \(i\)번째 값 \(y_i\)를 얻을 확률은 다음과 같다.
\[P(y_i)\propto\frac1\sigma_ye^{-(y_i-ax_i-b)^2/2\sigma_y^2}\]
\(N\)개의 데이타 포인트를 얻을 확률은, 각각의 확률의 곱으로 나타낼 수 있으므로,
\[P(y_1,\cdots,y_N)\propto\frac1{\sigma_y^N}e^{-\sum_i(y_i-ax_i-b)^2/2\sigma_y^2}\]
와 같이 나타낼 수 있고, 여기서 지수함수의 지수부분의 합을 다음과 같이 \(\chi^2\)로 정의한다.
\[\chi^2=\sum^N_{i=1}\frac{(y_i-ax_i-b)^2}{\sigma^2_y}\]
미정계수 \(a\)와 \(b\)의 최적 추정값은 주어진 데이타 포인트들을 얻을 확률을 가장 크게 하는, 즉 \(\chi^2\) 값을 가장 작게 하는 방식으로 얻어낸다. \(\chi^2\) 값은 2차 함수이기 때문에 임의의 0이 아닌 임의의 값 \(a\)에 대해 최소값을 항상 가지고, 이 값은 \(a\)와 \(b\)로 \(\chi^2\) 값을 미분해서 얻어낼 수 있다.
미분값이 0이 되는 \(a\), \(b\)에 관한 두 식을 적어보면,
\[\begin{split}a\textstyle\sum x_i+bN&=\textstyle\sum y_i \\ a\textstyle\sum x_i^2+b\textstyle\sum x_i &=\textstyle\sum x_iy_i \end{split}\]
와 같고, \(a\), \(b\)의 값은 다음과 같다.
\[a=\frac{N\textstyle\sum x_iy_i-\textstyle\sum x_i\textstyle\sum y_i}{N\textstyle\sum x_i^2-(\textstyle\sum x_i)^2},\quad b=\frac{\textstyle\sum x_i^2\textstyle\sum y_i-\textstyle\sum x_i\textstyle\sum x_iy_i}{N\textstyle\sum x_i^2-(\textstyle\sum x_i)^2}.\]
이렇게 얻어진 선을 데이타의 최소 제곱 핏(least-square fit) 또는 x에 대한 y의 회귀선(line of regression)이라고 한다.
-
측정값 \(\mathbf{y}\)의 표준편차 \(\mathbf{\sigma}_\mathbf{y}\)
측정값 \(y\)는 참값 주위로 가우시안 분포를 가지고 있기 때문에, 최적 추정 핏으로 얻은 값 주위로 가우시안 분포를 가지고 있다고 볼 수 있다. 따라서 표준편차는 다음과 같이 구할 수 있다.
\[\sigma_y=\sqrt{\frac1N\sum(y_i-ax_i-b)^2}.\]
하지만, 데이타 포인트들을 가지고 미정계수 2개(\(a\), \(b\))를 구해냈기 때문에, \(N\)자리에는 이 계산에서의 자유도 \(N-2\)를 넣어 다음과 같이 표준편차를 구한다.
\[\sigma_y=\sqrt{\frac1{N-2}\sum(y_i-ax_i-b)^2}.\]
-
미정계수 \(\mathbf{a}\)와 \(\mathbf{b}\)의 오차
\[a=\frac{N\textstyle\sum x_iy_i-\textstyle\sum x_i\textstyle\sum y_i}{N\textstyle\sum x_i^2-(\textstyle\sum x_i)^2},\quad b=\frac{\textstyle\sum x_i^2\textstyle\sum y_i-\textstyle\sum x_i\textstyle\sum x_iy_i}{N\textstyle\sum x_i^2-(\textstyle\sum x_i)^2}.\]
위 식에서, 각각을 오차 전파식을 사용해서 구해내면 된다. 다음과 같다.
\[\sigma_a=\sigma_y\sqrt{\frac N{N\textstyle\sum x_i^2-(\textstyle\sum x_i)^2}},\quad\sigma_b=\sigma_y\sqrt{\frac {\textstyle\sum x_i^2}{N\textstyle\sum x_i^2-(\textstyle\sum x_i)^2}}\]
-
측정값 \(y\)의 각각의 표준편차가 다를 경우
가중 최소 제곱(weighted least-squares) 방법을 사용해야 한다. 별 다른건 없고, \(\chi^2\)의 \(\sigma_y\)를 각 항에 맞는 표준편차인 \(\sigma_i\)로 바꿔준 후 계산하면 된다.
위에서 얻은 두 식을 행렬로 적어보면,
\[\left[\begin{matrix}\textstyle\sum x_i & N \\ \textstyle\sum x_i^2 & \textstyle\sum x_i \end{matrix}\right]\left[\begin{matrix} a \\ b \end{matrix}\right]=\left[\begin{matrix}\textstyle\sum y_i \\ \textstyle\sum x_iy_i\end{matrix}\right]\]
와 같이 적을 수 있고, \(a\)와 \(b\)는 내부 함수로
\[\left[\begin{matrix} a \\ b \end{matrix}\right]=\left[\begin{matrix}\textstyle\sum x_i & N \\ \textstyle\sum x_i^2 & \textstyle\sum x_i \end{matrix}\right]^{-1}\left[\begin{matrix}\textstyle\sum y_i \\ \textstyle\sum x_iy_i\end{matrix}\right]\]
을 계산하면 쉽게 얻을 수 있다.
(2013. 4. 5) 라고 생각했지만 오차까지 계산할거면 행렬보다는 단순합이 더 나은 것 같다.
- 오차가 임의적일 때 측정값 \(y\)의 표준편차는 어떻게 구할 것인가?
- 오차가 임의적이면 실험을 잘못한거다. 어떤 값이 1차함수로 피팅돼야 한다면, 참값주위에 측정값이 많이 분포할 수 밖에 없다.
- John R. Taylor, An Introduction to Error Analysis 2nd Edition, University Science Books (1997).