たとえば、線形モデルを実行しているが、データが複雑であるとします。
すべての数値は形式であるため、データセットは複雑です。そのようなデータを操作する際に手順的に異なるものはありますか?
複雑な共分散行列を取得し、複雑な値の統計をテストすることになるためです。
最小二乗を行うときに、転置ではなく共役転置を使用する必要がありますか?複素数値共分散は意味がありますか?
たとえば、線形モデルを実行しているが、データが複雑であるとします。
すべての数値は形式であるため、データセットは複雑です。そのようなデータを操作する際に手順的に異なるものはありますか?
複雑な共分散行列を取得し、複雑な値の統計をテストすることになるためです。
最小二乗を行うときに、転置ではなく共役転置を使用する必要がありますか?複素数値共分散は意味がありますか?
回答:
複素数値変数への最小二乗回帰の一般化は簡単であり、通常、通常の行列式で行列転置を共役転置に置き換えることから成ります。 ただし、複雑な値の回帰は、標準(実変数)メソッドを使用して解を得るのがはるかに難しい複雑な多変量多重回帰に対応します。したがって、複素数値モデルに意味がある場合は、複素数演算を使用して解を得ることが強く推奨されます。この回答には、データを表示し、近似の診断プロットを表示するいくつかの推奨方法も含まれています。
簡単にするために、通常の(単変量)回帰の場合について説明しましょう。
独立変数と、従来の従属変数Zに名前を付ける自由を取りました(たとえば、Lars Ahlfors、Complex Analysisを参照)。以下のすべては、重回帰設定に拡張するのは簡単です。
このモデルは、簡単に可視化、幾何学的な解釈があります乗算なり再スケールwはJの弾性率β 1と回転の引数で原点を中心にβ 1。その後、追加β 0は、この量によって、結果を変換します。効果ε jは、「ジッター」という訳に少しです。したがって、回帰Z JでW jは、このようにすると、2次元点の集合を理解するための努力である(Z jで) このような変換を介した2Dポイントのコンスタレーションから生じるため、プロセスのエラーが発生します。これを「変換としてフィット」というタイトルの図で以下に示します。
再スケーリングと回転は、プレーンの単なる線形変換ではないことに注意してください。たとえば、スキュー変換は除外されます。したがって、このモデルは、4つのパラメーターを持つ2変量の重回帰とは異なります。
複雑なケースと実際のケースを接続するには、次のように書きます。
従属変数の値に対してz j = x j + i y j
独立変数の値の場合、 w j = u j + i v j。
さらに、パラメータの書き込み
及び β 1 = γ 1 + I δ 1。
すべて導入された新しい用語の一つは、もちろん、本当である、と仮想の中のあるJ = 1 、2 、... 、n個のインデックスデータ。
OLSの発見は、β 0及びβ 1、偏差の二乗和を最小化します
形式的に、これは通常のマトリックス製剤と同一である:それを比較 私たちが見つける唯一の違いは、デザイン行列の転置ということであるXは、"によって置き換えられる共役転置X * = ˉ X "。したがって、正式な行列解は
同時に、これを純粋に実変数の問題にキャストすることで何が達成できるかを確認するために、実コンポーネントに関してOLS目標を書き出すことができます。
明らかにこれは、二つ表す連結実際の退縮を:そのうちの一つは、退行上のU及びV、他の退行のY上のU及びVを、我々はそれを必要とするのVの係数xが負であるのUの係数YおよびUのための係数X等しくVのための係数をY。また、合計2つの回帰からの残差の二乗を最小化する必要がありますが、通常、係数セットのいずれかがまたはyのみに対して最適な推定値を与えることはありません。これは、2つの実際の回帰を個別に実行し、それらの解を複素回帰と比較する以下の例で確認されます。
この分析により、実際の部分に関して複雑な回帰を書き直すと、(1)式が複雑になり、(2)単純な幾何学的解釈があいまいになり、(3)変数間の非自明な相関を伴う一般化された多変量多重回帰が必要になることが明らかになります)解決する。もっとうまくやれる
例として、複素平面の原点近くの積分点で値のグリッドを使用します。変換された値にW β変量ガウス分布を有するIIDエラーが追加される。特に、エラーの実部と虚部が独立していません。
4次元の点で構成されるため、複雑な変数のの通常の散布図を描くことは困難です。代わりに、実部と虚部の散布図マトリックスを表示できます。
今は適合を無視して、上の4行と左の4列を見てください。これらはデータを表示します。の円形グリッドは左上にはっきりと現れています。それは持っている81点。zの成分に対するwの成分の散布図は、明確な相関を示しています。それらのうち3つは負の相関があります。唯一Y(の虚部Z)及びU(の実数部Wが)正に相関しています。
これらのデータのために、真の値ある(- 20 + 5 I 、- 3 / 4 + 3 / 4 √。これは、3/2の拡張と120度の反時計回りの回転に続いて、左に20ユニット、上に5ユニットの移動を表します。比較のために、(xj)と(yj)の複素最小二乗解と2つのOLS解を個別に計算します。
Fit Intercept Slope(s)
True -20 + 5 i -0.75 + 1.30 i
Complex -20.02 + 5.01 i -0.83 + 1.38 i
Real only -20.02 -0.75, -1.46
Imaginary only 5.01 1.30, -0.92
常に、実数のみの切片が複素数切片の実数部と一致し、虚数のみの切片が複素数切片の虚数部と一致する場合があります。ただし、実数のみの勾配と虚数のみの勾配は、予測どおり正確に複素勾配係数と相互に一致しないことは明らかです。
複雑な適合の結果を詳しく見てみましょう。まず、残差のプロットは、2変量ガウス分布の指標を提供します。(基礎となる分布の周辺標準偏差はで、相関は0.8です。)次に、残差の大きさ(円形シンボルのサイズで表される)とその引数(最初のプロットとまったく同じ色で表される)をプロットできます。適合値に対して:このプロットは、サイズと色のランダムな分布のように見えるはずです。
最後に、いくつかの方法で適合を表すことができます。散布図は、散布図行列(qv)の最後の行と列に表示され、この点を詳しく見る価値があります。以下の左側では、近似は開いた青い円としてプロットされ、矢印(残差を表す)はそれらをデータに接続します(実線の赤い円として表示)。右側には、引数に対応する色で塗りつぶされた開いた黒い円として表示されます。これらは、矢印によって(z j)の対応する値に接続されます。各矢印によって膨張表すことを想起されたい3 / 2原点の周りを回転することにより120度、および翻訳によってに加え、その二変量ガウス誤差。
これらの結果、プロット、および診断プロットはすべて、複素回帰式が正しく機能し、変数の実部と虚部の個別の線形回帰とは異なる何かを達成することを示唆しています。
R
データ、フィット、およびプロットを作成するコードを以下に示します。実際の溶液ことに留意されたいβは、コードの一行で得られます。通常の最小二乗出力、適合度の分散共分散行列、標準誤差、p値などを取得するには、追加作業が必要になりますが、それほど多くは必要ありません。
#
# Synthesize data.
# (1) the independent variable `w`.
#
w.max <- 5 # Max extent of the independent values
w <- expand.grid(seq(-w.max,w.max), seq(-w.max,w.max))
w <- complex(real=w[[1]], imaginary=w[[2]])
w <- w[Mod(w) <= w.max]
n <- length(w)
#
# (2) the dependent variable `z`.
#
beta <- c(-20+5i, complex(argument=2*pi/3, modulus=3/2))
sigma <- 2; rho <- 0.8 # Parameters of the error distribution
library(MASS) #mvrnorm
set.seed(17)
e <- mvrnorm(n, c(0,0), matrix(c(1,rho,rho,1)*sigma^2, 2))
e <- complex(real=e[,1], imaginary=e[,2])
z <- as.vector((X <- cbind(rep(1,n), w)) %*% beta + e)
#
# Fit the models.
#
print(beta, digits=3)
print(beta.hat <- solve(Conj(t(X)) %*% X, Conj(t(X)) %*% z), digits=3)
print(beta.r <- coef(lm(Re(z) ~ Re(w) + Im(w))), digits=3)
print(beta.i <- coef(lm(Im(z) ~ Re(w) + Im(w))), digits=3)
#
# Show some diagnostics.
#
par(mfrow=c(1,2))
res <- as.vector(z - X %*% beta.hat)
fit <- z - res
s <- sqrt(Re(mean(Conj(res)*res)))
col <- hsv((Arg(res)/pi + 1)/2, .8, .9)
size <- Mod(res) / s
plot(res, pch=16, cex=size, col=col, main="Residuals")
plot(Re(fit), Im(fit), pch=16, cex = size, col=col,
main="Residuals vs. Fitted")
plot(Re(c(z, fit)), Im(c(z, fit)), type="n",
main="Residuals as Fit --> Data", xlab="Real", ylab="Imaginary")
points(Re(fit), Im(fit), col="Blue")
points(Re(z), Im(z), pch=16, col="Red")
arrows(Re(fit), Im(fit), Re(z), Im(z), col="Gray", length=0.1)
col.w <- hsv((Arg(w)/pi + 1)/2, .8, .9)
plot(Re(c(w, z)), Im(c(w, z)), type="n",
main="Fit as a Transformation", xlab="Real", ylab="Imaginary")
points(Re(w), Im(w), pch=16, col=col.w)
points(Re(w), Im(w))
points(Re(z), Im(z), pch=16, col=col.w)
arrows(Re(w), Im(w), Re(z), Im(z), col="#00000030", length=0.1)
#
# Display the data.
#
par(mfrow=c(1,1))
pairs(cbind(w.Re=Re(w), w.Im=Im(w), z.Re=Re(z), z.Im=Im(z),
fit.Re=Re(fit), fit.Im=Im(fit)), cex=1/2)
zapsmall
in R
)。そうでなければ、それは何かが根本的に間違っているサインです。
素敵な長いGoogleの検索の後、別の方法で問題を理解するための関連情報を見つけました。同様の問題は、統計的信号処理ではやや一般的であることが判明しています。実データの線形最小二乗に対応するガウス尤度で開始する代わりに、次のように開始します。
http://en.wikipedia.org/wiki/Complex_normal_distribution
このウィキペディアのページは、このオブジェクトに関する満足のいく要約を提供します。
具体的には、あなたの推定の分布と仮定できるならばβは、その後、複雑な通常を使用する複雑なデータ1の場合には、multivarガウスです。この推定量の共分散の計算は少し異なり、wikiページに記載されています。
whuberと同じ結論に達するが、最尤法などの他の推定量を調査する別の情報源は、Yan et al。の「不適切な線形回帰モデルの推定」です。
@whuberには美しく説明された説明のある答えがありますが、複雑な空間の力の一部を逃した単純化されたモデルだと思います。
実数の線形最小二乗回帰は、入力、パラメーターβ、およびターゲットxを使用した次のモデルと同等です。
ここで、は通常、ゼロ平均といくつかの(通常は一定の)分散で分布しています。
複雑な線形回帰を次のように定義することをお勧めします。
2つの大きな違いがあります。
まず、追加の自由度がある位相感度が可能になります。あなたはそれを望まないかもしれませんが、あなたはそれを簡単に持つことができます。
第二に、は平均がゼロで、いくらかの分散と「疑似分散」を持つ複雑な正規分布です。
実際のモデルに戻ると、負の対数尤度である損失を最小化する通常の最小二乗解が出てきます。正規分布の場合、これは放物線です。
これは、複雑な正規分布の密度の画像です。
これは回帰を複雑にしますが、ソリューションはまだ分析的であると確信しています。私は1つの入力の場合にそれを解決し、ここで自分の解決策を書きたいと思っていますが、whuberが一般的な場合を解決するかもしれないと感じています。
この問題はMathematica StackExchangeで再び取り上げられました。私の答え/拡張コメントでは、@ whuberの優れた答えに従うべきであるというものがあります。
ここでの私の答えは、エラー構造をもう少し明示的にすることで、@ whuberの答えを少しだけ拡張する試みです。提案された最小二乗推定器は、二変量誤差分布が実数成分と虚数成分との間にゼロ相関がある場合に使用するものです。(ただし、生成されたデータの誤差相関は0.8です。)
これすべての私のポイントは、フィットするモデルを完全に明示的にする必要があり、シンボリック代数プログラムが乱雑さを軽減するのに役立つことです。(そして、もちろん、最尤推定量は、最小二乗推定量が仮定しない二変量正規分布を仮定します。)
付録:完全なMathematicaコード
(* Predictor variable *)
w = {0 - 5 I, -3 - 4 I, -2 - 4 I, -1 - 4 I, 0 - 4 I, 1 - 4 I, 2 - 4 I,
3 - 4 I, -4 - 3 I, -3 - 3 I, -2 - 3 I, -1 - 3 I, 0 - 3 I, 1 - 3 I,
2 - 3 I, 3 - 3 I, 4 - 3 I, -4 - 2 I, -3 - 2 I, -2 - 2 I, -1 - 2 I,
0 - 2 I, 1 - 2 I, 2 - 2 I, 3 - 2 I,
4 - 2 I, -4 - 1 I, -3 - 1 I, -2 - 1 I, -1 - 1 I, 0 - 1 I, 1 - 1 I,
2 - 1 I, 3 - 1 I,
4 - 1 I, -5 + 0 I, -4 + 0 I, -3 + 0 I, -2 + 0 I, -1 + 0 I, 0 + 0 I,
1 + 0 I, 2 + 0 I, 3 + 0 I, 4 + 0 I,
5 + 0 I, -4 + 1 I, -3 + 1 I, -2 + 1 I, -1 + 1 I, 0 + 1 I, 1 + 1 I,
2 + 1 I, 3 + 1 I, 4 + 1 I, -4 + 2 I, -3 + 2 I, -2 + 2 I, -1 + 2 I,
0 + 2 I, 1 + 2 I, 2 + 2 I, 3 + 2 I,
4 + 2 I, -4 + 3 I, -3 + 3 I, -2 + 3 I, -1 + 3 I, 0 + 3 I, 1 + 3 I,
2 + 3 I, 3 + 3 I, 4 + 3 I, -3 + 4 I, -2 + 4 I, -1 + 4 I, 0 + 4 I,
1 + 4 I, 2 + 4 I, 3 + 4 I, 0 + 5 I};
(* Add in a "1" for the intercept *)
w1 = Transpose[{ConstantArray[1 + 0 I, Length[w]], w}];
z = {-15.83651 + 7.23001 I, -13.45474 + 4.70158 I, -13.63353 +
4.84748 I, -14.79109 + 4.33689 I, -13.63202 +
9.75805 I, -16.42506 + 9.54179 I, -14.54613 +
12.53215 I, -13.55975 + 14.91680 I, -12.64551 +
2.56503 I, -13.55825 + 4.44933 I, -11.28259 +
5.81240 I, -14.14497 + 7.18378 I, -13.45621 +
9.51873 I, -16.21694 + 8.62619 I, -14.95755 +
13.24094 I, -17.74017 + 10.32501 I, -17.23451 +
13.75955 I, -14.31768 + 1.82437 I, -13.68003 +
3.50632 I, -14.72750 + 5.13178 I, -15.00054 +
6.13389 I, -19.85013 + 6.36008 I, -19.79806 +
6.70061 I, -14.87031 + 11.41705 I, -21.51244 +
9.99690 I, -18.78360 + 14.47913 I, -15.19441 +
0.49289 I, -17.26867 + 3.65427 I, -16.34927 +
3.75119 I, -18.58678 + 2.38690 I, -20.11586 +
2.69634 I, -22.05726 + 6.01176 I, -22.94071 +
7.75243 I, -28.01594 + 3.21750 I, -24.60006 +
8.46907 I, -16.78006 - 2.66809 I, -18.23789 -
1.90286 I, -20.28243 + 0.47875 I, -18.37027 +
2.46888 I, -21.29372 + 3.40504 I, -19.80125 +
5.76661 I, -21.28269 + 5.57369 I, -22.05546 +
7.37060 I, -18.92492 + 10.18391 I, -18.13950 +
12.51550 I, -22.34471 + 10.37145 I, -15.05198 +
2.45401 I, -19.34279 - 0.23179 I, -17.37708 +
1.29222 I, -21.34378 - 0.00729 I, -20.84346 +
4.99178 I, -18.01642 + 10.78440 I, -23.08955 +
9.22452 I, -23.21163 + 7.69873 I, -26.54236 +
8.53687 I, -16.19653 - 0.36781 I, -23.49027 -
2.47554 I, -21.39397 - 0.05865 I, -20.02732 +
4.10250 I, -18.14814 + 7.36346 I, -23.70820 +
5.27508 I, -25.31022 + 4.32939 I, -24.04835 +
7.83235 I, -26.43708 + 6.19259 I, -21.58159 -
0.96734 I, -21.15339 - 1.06770 I, -21.88608 -
1.66252 I, -22.26280 + 4.00421 I, -22.37417 +
4.71425 I, -27.54631 + 4.83841 I, -24.39734 +
6.47424 I, -30.37850 + 4.07676 I, -30.30331 +
5.41201 I, -28.99194 - 8.45105 I, -24.05801 +
0.35091 I, -24.43580 - 0.69305 I, -29.71399 -
2.71735 I, -26.30489 + 4.93457 I, -27.16450 +
2.63608 I, -23.40265 + 8.76427 I, -29.56214 - 2.69087 I};
(* whuber 's least squares estimates *)
{a, b} = Inverse[ConjugateTranspose[w1].w1].ConjugateTranspose[w1].z
(* {-20.0172+5.00968 \[ImaginaryI],-0.830797+1.37827 \[ImaginaryI]} *)
(* Break up into the real and imaginary components *)
x = Re[z];
y = Im[z];
u = Re[w];
v = Im[w];
n = Length[z]; (* Sample size *)
(* Construct the real and imaginary components of the model *)
(* This is the messy part you probably don't want to do too often with paper and pencil *)
model = \[Gamma]0 + I \[Delta]0 + (\[Gamma]1 + I \[Delta]1) (u + I v);
modelR = Table[
Re[ComplexExpand[model[[j]]]] /. Im[h_] -> 0 /. Re[h_] -> h, {j, n}];
(* \[Gamma]0+u \[Gamma]1-v \[Delta]1 *)
modelI = Table[
Im[ComplexExpand[model[[j]]]] /. Im[h_] -> 0 /. Re[h_] -> h, {j, n}];
(* v \[Gamma]1+\[Delta]0+u \[Delta]1 *)
(* Construct the log of the likelihood as we are estimating the parameters associated with a bivariate normal distribution *)
logL = LogLikelihood[
BinormalDistribution[{0, 0}, {\[Sigma]1, \[Sigma]2}, \[Rho]],
Transpose[{x - modelR, y - modelI}]];
mle0 = FindMaximum[{logL /. {\[Rho] ->
0, \[Sigma]1 -> \[Sigma], \[Sigma]2 -> \[Sigma]}, \[Sigma] >
0}, {\[Gamma]0, \[Delta]0, \[Gamma]1, \[Delta]1, \[Sigma]}]
(* {-357.626,{\[Gamma]0\[Rule]-20.0172,\[Delta]0\[Rule]5.00968,\[Gamma]1\[Rule]-0.830797,\[Delta]1\[Rule]1.37827,\[Sigma]\[Rule]2.20038}} *)
(* Now suppose we don't want to restrict \[Rho]=0 *)
mle1 = FindMaximum[{logL /. {\[Sigma]1 -> \[Sigma], \[Sigma]2 -> \[Sigma]}, \[Sigma] > 0 && -1 < \[Rho] <
1}, {\[Gamma]0, \[Delta]0, \[Gamma]1, \[Delta]1, \[Sigma], \[Rho]}]
(* {-315.313,{\[Gamma]0\[Rule]-20.0172,\[Delta]0\[Rule]5.00968,\[Gamma]1\[Rule]-0.763237,\[Delta]1\[Rule]1.30859,\[Sigma]\[Rule]2.21424,\[Rho]\[Rule]0.810525}} *)