lscov
既知の共分散を使用した最小二乗解法
構文
x = lscov(A,B)
x = lscov(A,B,w)
x = lscov(A,B,V)
x = lscov(A,B,V,alg)
[x,stdx] = lscov(...)
[x,stdx,mse] = lscov(...)
[x,stdx,mse,S] = lscov(...)
説明
x = lscov(A,B)
は、線形方程式系 A*x = B
の通常の最小二乗解を返します。つまり、x
は二乗誤差 (B - A*x)'*(B - A*x)
の和を最小にした n 行 1 列のベクトルです。ここで、A
は m 行 n 列であり、B
は m 行 1 列です。B
は m 行 k 列の行列とすることも可能であり、lscov
は B
の各列に対して 1 つの解を返します。rank(A) < n
の場合、lscov
は基底解を得るために x
の要素の最大可能数を 0 に設定します。
w
が正の実数重みのベクトルの長さ m である x = lscov(A,B,w)
は、線形方程式 A*x = B
に対する重み付き最小二乗解を返します。つまり、x
は (B - A*x)'*diag(w)*(B - A*x)
を最小にします。w
は一般的に回数または逆行列分散を含みます。
V
が m 行 m 列の実数の対称正定値行列である x = lscov(A,B,V)
は、V
に比例した共分散行列を使用して、線形方程式 A*x = B
に対して、一般化した最小二乗解を返します。つまり、x
は (B - A*x)'*inv(V)*(B - A*x)
を最小化します。
より一般的に、V
は、半正定値になり、lscov
は A*x + T*e = B
に従って、e'*e
を最小化する x
を返します。ここで、最小化は x
と e
以上で、T*T' = V
です。V
が半定値の場合、この問題は B
が A
と V
を含む場合のみ解をもちます (つまり、B
は [A T]
列の範囲内にあります)。そうでない場合は、lscov
はエラーを返します。
既定の設定では、lscov
は V
のコレスキー分解を計算します。実際は、問題を一般的な最小二乗に変換するため、因子を反転します。しかし、lscov
が V
は半定値であると定義する場合、V
の反転を避けるために、直交分解アルゴリズムを使用します。
x = lscov(A,B,V,alg)
は、V
が行列の場合、x
の計算に使用するアルゴリズムを指定します。alg
は以下の値をもちます。
'chol'
は、V
のコレスキー分解を使用します。'orth'
は、直交分解を使用し、V
が悪条件な場合や特異な場合は、より正確になります。しかし、直交分解は計算量が大きくなります。
[x,stdx] = lscov(...)
は、x
の推定標準誤差を返します。A
がランク落ちの場合、stdx
は x
のゼロ要素に対応する要素内にゼロをもちます。
[x,stdx,mse] = lscov(...)
は、二乗平均誤差を返します。B
が 共分散行列 σ2V
(または (σ2)×diag
(1./W
)) をもつと仮定すると、mse
が σ2 の推定値となります。
[x,stdx,mse,S] = lscov(...)
は、x
の推定共分散行列を返します。A
がランク落ちの場合、S
は x
のゼロの要素に対応する行と列にゼロをもちます。lscov
は、複数の右辺から呼ばれる場合、つまり size(B,2) > 1
の場合、S
を返すことができません。
これらの計算値の標準式は、A
と V
がフル ランクの場合、以下のようになります。
x = inv(A'*inv(V)*A)*A'*inv(V)*B
mse = B'*(inv(V) - inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V))*B./(m-n)
S = inv(A'*inv(V)*A)*mse
stdx = sqrt(diag(S))
しかし、lscov
は、より速くより安定なメソッドを使用し、ランク落ちの場合でも適用できます。
lscov
は B
の共分散行列がスケール係数からわかると仮定します。mse
は、未知のスケール係数の推定であり、lscov
は、適切に出力 S
と stdx
をスケールします。しかし、V
が共分散行列 B
であると正確にわかる場合、スケーリングは失敗します。この場合正確な推定を得るには、S
と stdx
をそれぞれ 1/mse
と sqrt(1/mse)
で再スケールします。
例
例 1 — 最小二乗の計算
MATLAB® バックスラッシュ演算子 (\) を使用することで、回帰係数の最小二乗法 (OLS) 推定によって、線形回帰を実行することができます。同様の OLS 推定を計算するために、lscov
も使用できます。lscov
を使用することによって、これらの係数の標準誤差の推定を計算し、回帰誤差項の標準偏差を推定することもできます。
x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; X = [ones(size(x1)) x1 x2]; y = [.17 .26 .28 .23 .27 .34]'; a = X\y a = 0.1203 0.3284 -0.1312 [b,se_b,mse] = lscov(X,y) b = 0.1203 0.3284 -0.1312 se_b = 0.0643 0.2267 0.1488 mse = 0.0015
例 2 — 重み付き最小二乗の計算
相対観測値の重みベクトルを与えて、重み付き最小二乗 (WLS) 近似を計算するために lscov
を使用します。たとえば、信頼性の低い観測値が近似に与える影響を減らしたいとします。
w = [1 1 1 1 1 .1]'; [bw,sew_b,msew] = lscov(X,y,w) bw = 0.1046 0.4614 -0.2621 sew_b = 0.0309 0.1152 0.0814 msew = 3.4741e-004
例 3 — 一般化最小二乗の計算
観測値の共分散行列を与えて、一般化最小二乗 (GLS) 近似を計算するために、lscov
を使用します。たとえば、ユーザーのデータが独立していないとします。
V = .2*ones(length(x1)) + .8*diag(ones(size(x1))); [bg,sew_b,mseg] = lscov(X,y,V) bg = 0.1203 0.3284 -0.1312 sew_b = 0.0672 0.2267 0.1488 mseg = 0.0019
例 4 — 共分散行列の係数の推定
OLS、WLS、または GLS 近似に対する係数の共分散行列の推定を計算します。係数の標準エラーは、この共分散行列の対角上の値の平方根に等しくなります。
[b,se_b,mse,S] = lscov(X,y); S S = 0.0041 -0.0130 0.0075 -0.0130 0.0514 -0.0328 0.0075 -0.0328 0.0221 [se_b sqrt(diag(S))] ans = 0.0643 0.0643 0.2267 0.2267 0.1488 0.1488
アルゴリズム
ベクトル x
は、(A*x-B)'*inv(V)*(A*x-B)
を最小化します。この問題の古典的な線形代数解法は、次のようになります。
x = inv(A'*inv(V)*A)*A'*inv(V)*B
しかし、lscov
は、A
の QR 分解を代わりに計算し、V
を使用して Q
を修正します。
参照
[1] Strang, G., Introduction to Applied Mathematics, Wellesley-Cambridge, 1986, p. 398.
拡張機能
バージョン履歴
R2006a より前に導入