예를 들어 선형 모델을 수행하지만 데이터 가 복잡 하다고 가정하십시오 .
모든 숫자가 ( a + b i ) 형식 이므로 내 데이터 세트는 복잡 합니다. 그러한 데이터로 작업 할 때 절차 상 다른 것이 있습니까?
나는 복잡한 공분산 행렬을 얻고 복잡한 값을 갖는 통계를 테스트하기 때문에 묻습니다.
최소 제곱을 수행 할 때 전치 대신 켤레 전치를 사용해야합니까? 복잡한 값 공분산이 의미가 있습니까?
예를 들어 선형 모델을 수행하지만 데이터 가 복잡 하다고 가정하십시오 .
모든 숫자가 ( a + b i ) 형식 이므로 내 데이터 세트는 복잡 합니다. 그러한 데이터로 작업 할 때 절차 상 다른 것이 있습니까?
나는 복잡한 공분산 행렬을 얻고 복잡한 값을 갖는 통계를 테스트하기 때문에 묻습니다.
최소 제곱을 수행 할 때 전치 대신 켤레 전치를 사용해야합니까? 복잡한 값 공분산이 의미가 있습니까?
답변:
복소수 변수에 대한 최소 제곱 회귀 분석의 일반화는 간단하며 주로 일반적인 행렬 수식에서 공역 전치로 행렬 전치를 대체하는 것으로 구성됩니다. 그러나 복소수 회귀는 표준 (실제 변수) 방법을 사용하여 구하기가 훨씬 어려운 복잡한 다변량 다중 회귀에 해당합니다. 따라서 복소수 모형이 의미가있는 경우 복소수를 사용하여 해를 구하는 것이 좋습니다. 이 답변에는 데이터를 표시하고 적합치의 진단 플롯을 제시하는 몇 가지 제안 된 방법도 포함되어 있습니다.
간단히하기 위해, 쓸 수있는 일반적인 (단 변량) 회귀 분석에 대해 논의 해 봅시다.
나는 독립 변수 와 종속 변수 Z 를 명명하는 자유를 얻었습니다 . 이것은 일반적인 것입니다 (예 : Lars Ahlfors, Complex Analysis 참조 ). 다음은 모두 다중 회귀 설정으로 확장하는 것입니다.
이 모델은 쉽게 시각화 기하학적 해석을 갖는다 : 승산하여 것이다 재조정 승 J 의 계수에 의해 β (1) 과 회전 의 인수에 의해 원점 주위를 β 1 . 이어서, β 0을 첨가 하면 결과가이 양으로 변환됩니다. ε j 의 효과는 그 번역을 약간 "지터"하는 것입니다. 따라서, 회귀 의 Z J 온 w J 이와 같이하여 2 차원 포인트의 집합을 이해하기위한 노력은 ( Z의 J ) 2D 포인트들의 성상도에서 발생하는 등 공정에서 약간의 오차를 허용 이러한 변화를 통해. 아래는 "변환으로 맞추기"그림과 함께 설명되어 있습니다.
크기 조정 및 회전은 평면의 선형 변환이 아니라 기울기 변환을 배제합니다. 따라서이 모형은 4 개의 모수를 갖는 이변 량 다중 회귀와 동일하지 않습니다.
복잡한 경우와 실제 경우를 연결하려면
종속 변수의 값에 대해 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 . 또한, 합계 때문에두 회귀의 잔차 제곱을 최소화해야합니다. 일반적으로 계수 세트 중 하나가 또는 y에 대해서만 최상의 추정치를 제공하는 경우는 아닙니다 . 이것은 아래 예제에서 확인되며, 두 개의 실제 회귀를 개별적으로 수행하고 솔루션을 복잡한 회귀와 비교합니다.
이 분석을 통해 실제 부분의 관점에서 복잡한 회귀를 다시 작성하는 것은 (1) 수식을 복잡하게하고, (2) 간단한 기하학적 해석을 모호하게하며, (3) 일반화 된 다변량 다중 회귀를 필요로합니다 (변수간에 사소한 상관 관계가 있음) ) 해결하다. 우리는 더 잘할 수 있습니다.
예를 들어, 나는 복잡한 평면에서 원점 근처의 적분 지점에서 값 의 그리드를 취합니다 . 변환 된 값 w는 β가 이변 량 가우시안 분포를 갖는 IID 에러를 첨가되어 특히 에러의 실수 및 허수 부를 독립이 아니다.
통상의 산점도 그릴 어렵다 는 네 차원 포인트 구성 때문에, 복잡한 변수를. 대신 실제 부분과 가상 부분의 산점도 행렬을 볼 수 있습니다.
지금의 적합을 무시하고 맨 위 네 개의 행과 네 개의 왼쪽 열을보십시오. 이들은 데이터를 표시합니다. 의 원형 그리드는 왼쪽 상단에 분명합니다. 이는 보유 81 포인트. z 성분에 대한 w 성분의 산점도는 분명한 상관 관계를 나타냅니다. 그중 세 가지는 음의 상관 관계가 있습니다. 단지 예 (의 허수 부 (Z) ) 및 U (의 실부 w는 ) 긍정적으로 상관된다.
이러한 데이터의 실제 값 인 ( - 20 + 5 I , - 3 / 4 + 3 / 4 √. 이 팽창하여 나타내는3/2및 번역 뒤에 120도 반 시계 방향 회전(20 개)좌측 유닛과5 개단위 업. 나는비교를위해(xj)및(yj)에대한 복잡한 최소 제곱 솔루션과 두 개의 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
실수 전용 절편이 복잡한 절편의 실수 부분과 일치하고 허수 절편이 복잡한 절편의 허수 부분과 일치하는 경우가 항상 있습니다. 그러나 실제 전용 및 가상 전용 슬로프는 정확히 예측 한대로 복잡한 슬로프 계수와 서로 일치하지 않습니다.
이 결과, 그림 및 진단 그림은 모두 복잡한 회귀 수식이 올바르게 작동하고 변수의 실수 부와 허수 부의 개별 선형 회귀와 다른 것을 달성 함을 나타냅니다.
R
#
# 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 sesh 후, 나는 다른 방식으로 문제를 이해하는 것에 관한 관련 정보를 찾았습니다. 통계적 신호 처리에서 비슷한 문제가 다소 흔하다는 것이 밝혀졌습니다. 실제 데이터의 선형 최소 제곱에 해당하는 가우스 가능성으로 시작하는 대신 다음과 같이 시작합니다.
http://en.wikipedia.org/wiki/Complex_normal_distribution
이 위키 백과 페이지는이 개체에 대한 만족스러운 요약을 제공합니다.
내가 찾은 또 다른 출처는 whuber와 같은 결론에 도달하지만 최대 가능성과 같은 다른 추정기를 탐색합니다. Yan et al.의 "부적절한 선형 회귀 모델 추정".
@ whuber는 아름답게 설명되고 잘 설명 된 답변을 가지고 있지만 복잡한 공간의 힘을 간과하는 단순화 된 모델이라고 생각합니다.
복잡한 선형 회귀 분석은 다음과 같이 정의하는 것이 좋습니다.
두 가지 주요 차이점이 있습니다.
실제 모형으로 되돌아 가면, 최소 최소 제곱 솔루션은 손실을 최소화하여 나오며, 이는 음의 로그 가능성입니다. 정규 분포의 경우 포물선입니다.
여기서
복소수 모형으로 돌아 가면 음의 로그 우도는
복잡한 정규 분포 밀도의 이미지는 다음과 같습니다.
솔루션이 여전히 분석적이라고 확신하지만 회귀를 복잡하게 만듭니다. 하나의 입력의 경우 문제를 해결했으며 여기에 솔루션을 작성하게되어 기쁘지만 whuber가 일반적인 경우를 해결할 수 있다고 생각합니다.
이 문제는 Mathematica StackExchange 에서 다시 나타 났 으며 @ 답변 / 확장 된 의견에 @whuber의 탁월한 답변을 따라야합니다.
내 대답은 오류 구조를 좀 더 명확하게 만들어 @whuber의 대답을 조금 확장하려는 시도입니다. 제안 된 최소 제곱 추정기는 이변 량 오차 분포가 실수 성분과 허수 성분 사이에 상관이없는 경우에 사용하는 것입니다. (그러나 생성 된 데이터의 오류 상관 관계는 0.8입니다.)
상징적 대수 프로그램에 액세스 할 수 있으면 모수 ( "고정 된"효과 및 공분산 구조 모두)의 최대 우도 추정치를 구성하는 일부 지저분 함을 제거 할 수 있습니다. 아래에서는 @whuber의 답변과 동일한 데이터를 사용하고 하여 최대 가능성 추정치를 구성합니다. . 나는 Mathematica를 사용 했지만 다른 상징적 대수 프로그램이 비슷한 것을 할 수 있다고 생각합니다. (그리고 나는 단지 텍스트를 사용하는 것처럼 Mathematica 코드를 볼 수 없기 때문에 코드의 그림과 출력 다음에 부록의 실제 코드가 게시되었습니다 .)
이제 가정 한 최대 우도 추정치
우리는 최대 가능성 추정치가
이제 데이터가 추정치를 결정하도록합니다.
이 모든 것의 제 요점은 적합하고있는 모델을 완전히 명시해야하고 상징적 인 대수 프로그램이 혼란을 완화시키는 데 도움이 될 수 있다는 것입니다. (물론, 최대 우도 추정치는 최소 제곱 추정기가 가정하지 않는 이변 량 정규 분포를 가정합니다.)
부록 : 전체 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}} *)