lscov
알려진 공분산을 사용한 최소제곱해(Least-squares Solution)
구문
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
의 각 열에 대해 하나의 해를 반환합니다. rank(A) < n
일 경우 lscov
는 "기저해"를 구하기 위해 최대 가능한 수의 x
요소를 0으로 설정합니다.
x = lscov(A,B,w)
는 선형 연립방정식 A*x = B
에 대한 가중 최소제곱해(Weighted Least Squares Solution)를 반환합니다(여기서 w
는 양의 실수 가중치로 구성된 벡터 길이 m임). 즉, x
는 (B - A*x)'*diag(w)*(B - A*x)
를 최소화합니다. w
는 일반적으로 횟수나 역행렬 분산을 포함합니다.
x = lscov(A,B,V)
는 V
에 비례하는 공분산 행렬을 사용하여 선형 연립방정식 A*x = B
에 대한 일반 최소제곱해(Generalized Least Squares Solution)를 반환합니다(여기서 V
는 m×m 양의 실수 정부호 대칭 행렬임). 즉, 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
에 대한 촐레스키 분해를 계산하며, 실제로 문제를 보통최소제곱해로 변환하여 인수의 역을 계산합니다. 단, V
가 준정부호일 때 lscov
는 V
의 역을 구하는 계산을 방지하는 직교 분해(Orthogonal Decomposition) 알고리즘을 사용합니다.
x = lscov(A,B,V,alg)
는 V
가 행렬인 경우 x
를 계산하는 데 사용하는 알고리즘을 지정합니다. alg
는 다음 값을 가질 수 있습니다.
'chol'
은V
의 촐레스키 분해(Cholesky Decomposition)를 사용합니다.'orth'
는 직교 분해(Orthogonal Decomposition)를 사용합니다.V
의 조건이 나쁘거나 특이 행렬인 경우 더 적합하지만 더 많은 계산량을 필요로 합니다.
[x,stdx] = lscov(...)
는 x
에 대해 추정된 표준 오차를 반환합니다. A
가 랭크가 부족한 경우 stdx
는 x
의 필수 0 요소에 대응하는 요소에 0을 포함시킵니다.
[x,stdx,mse] = lscov(...)
는 평균 제곱 오차를 반환합니다. B
가 공분산 행렬 σ2V
(또는 (σ2)×diag
(1./W
))를 가지는 것으로 간주되는 경우 mse
는 σ2의 추정값이 됩니다.
[x,stdx,mse,S] = lscov(...)
는 x
에 대해 추정된 공분산 행렬을 반환합니다. A
가 랭크가 부족한 경우 S
는 x
의 필수 0 요소에 대응하는 행과 열에 0을 포함시킵니다. 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) 추정값을 계산하여 선형 회귀를 수행할 수 있습니다. lscov
를 사용하면 이와 동일한 OLS 추정값을 계산할 수 있습니다. 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 — 가중 최소제곱해(Weighted Least Squares) 계산
상대 관측값 가중치로 구성된 벡터를 lscov
에 제공하여 가중 최소제곱해(WLS) 피팅을 계산할 수 있습니다. 예를 들어, 신뢰할 수 없는 관측값이 피팅에 미치는 영향을 낮추고자 할 수 있습니다.
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 — 일반 최소제곱해(General Least Squares) 계산
관측값 공분산 행렬을 lscov
에 제공하여 일반 최소제곱해(GLS)를 계산할 수 있습니다. 예를 들어, 사용자 데이터가 독립적이지 않을 수 있습니다.
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 이전에 개발됨