[mathjax]2次元平面上に存在する複数の点からその回帰直線を最小二乗法で求める問題はよくあるが、3次元空間に存在する複数の点からその回帰直線を最小二乗法で求める問題はあまり見ないようなので、ここにその解法を書いておきます。
原点を\(O\)とする3次元座標系において、点\({ P }_{ 0 } ({ x }_{ 0 },{ y }_{ 0 },{ z }_{ 0 })\)から点\(P (x,y,z)\)に至るベクトル\(\vec {P_0P}\)(これが求める直線)とすると、ベクトル\(\vec { OP }\)は次式で表される。
\[
\begin{array}{c}
\vec { OP } ={ \vec { O{ P }_{ 0 } } }+\vec {P_0P} \qquad (1) \\
\vec { OP } ={ \vec { O{ P }_{ 0 } } }+t\vec {e} \qquad (2)
\end{array}
\]
ここで、\(\vec {P_0P}=t\vec {e}\)であり、\(t\)はベクトル\(\vec {P_0P}\)の長さ、\(\vec {e}\)は\(\vec {P_0P}\)の単位ベクトルである。
\(\vec {e}\)の成分を\((a, b, c)\)とすると、点Pの各座標は
\[
\begin{array}{c}
x = x_0 + at \qquad (3) \\
y = y_0 + bt \qquad (4) \\
z = z_0 + ct \qquad (5)
\end{array}
\]
となる。ただし、\(a^2+b^2+c^2=1\)。
方向単位ベクトル\(\vec {e}\)のz軸方向の成分が\(0\)でない、つまり\(c≠0\)ならば式(5)から
\[t = (z_0-z) / c \qquad (6)\]となる。
もし、z軸方向の成分が\(0\)、つまり\(c=0\)ならばベクトル\(\vec { t }\)が示す直線は\(x,y\)平面上にあるので、通常の2次元平面上の直線となり、普通の最小二乗法で解を求めることができる。
さて、式(6)を(3)、(4)に代入すると式(7)、(8)が得られる。
\[
x = Az + B \qquad (7)\\
y = Cz + D \qquad (8)\\
y = Ex + F \qquad (9)
\]
式(7)、(8)から\(z\)を消去して\(x,y\)の関係式(9)を算出した。ここでは、\(A=a/c、B=(x_0-Az_0)、C=b/c、D=y_0-Bz_0\)と置き換えている。
式(7)、(8)、(9)はそれぞれ\(zx\)平面、\(zy\)平面、\(xy\)平面における直線式を表している。
この各々の2次元平面において、以前書いた擬似逆行列で回帰直線を求める方法を用いて式(7)、(8)、(9)の係数6個を求める。
つまり、3次元空間に存在する全ての点\((x,y,z)\)の中から、\((x,z)\)の座標を式(7)に入れて係数\(A,B\)を求め、\((y,z)\)の座標を式(8)に入れて係数\(C,D\)を求め、\((y,x)\)の座標を式(9)に入れて係数\(E,F\)を求める。
これにより最初に設定した\(P_0\)の未知数3個と、方向ベクトル\(\vec {P_0P}\)の3つの未知数を全て算出できる。なぜならば、\(\vec {P_0P}\)の未知数は、\(t\)の長さとその単位ベクトルの未知数2個であるからだ(\(a^2+b^2+c^2=1\)より未知数は2個)。このようにして擬似逆行列で求めた直線は各点からの距離が近い回帰直線となる。
<補足>
式(3)、(4)、(5)では、\(t\)はベクトル\(\vec {P_0P}\)の長さとし、\(\vec {e}\)を\(\vec {P_0P}\)の単位ベクトルとした。そして、単位ベクトルの条件(\(a^2+b^2+c^2=1\)から、係数を一つ消去することで、未知数が6個であると説明した。
この考え方でよいのだが、より簡単に計算するには、式(5)の\(ct\)→t’と置き換えることで式(3)、(4)、(5)は以下のように書き換えられる。
\[
\begin{array}{c}
x = x_0 + a’t’ \qquad (3′) \\
y = y_0 + b’t’ \qquad (4′) \\
z = z_0 + t’ \qquad (5′)
\end{array}
\]
この式から、未知数は\(x_0, y_0, z_0, a’, b’, t’\)の6個であることが分かる。この後は上式(6)以下と同様に変形して、未知数を算出することができ、3次元空間の回帰直線が求まる。