이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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에 대한 보통최소제곱해(Ordinary Least Squares Solution)를 반환합니다. 즉, x는 제곱 오차 (B - A*x)'*(B - A*x)의 합을 최소화하는 nx1 벡터이며, 여기서 A는 mxn이고, B는 mx1입니다. B는 mxk 행렬일 수도 있으며, lscovB의 각 열에 대해 하나의 해를 반환합니다. rank(A) < n일 경우 lscov는 "기저해(Basic Solution)"를 구하기 위해 최대 가능한 수의 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는 mxm 양의 실수 정부호 대칭 행렬임). 즉, x(B - A*x)'*inv(V)*(B - A*x)를 최소화합니다.

일반적으로, V는 양의 준정부호일 수 있으며, lscovA*x + T*e = B 조건 하에 e'*e를 최소화하는 x를 반환합니다. 여기서 최소화는 xe에 대해 수행되며, T*T' = V입니다. V가 준정부호일 경우 이 문제는 BAV와 일치하는 경우(즉, B[A T]의 열 공간에 있음)에만 해를 가집니다. 그렇지 않으면 lscov는 오류를 반환합니다.

기본적으로 lscovV에 대한 촐레스키 분해를 계산하며, 실제로 문제를 보통최소제곱해로 변환하여 인수의 역을 계산합니다. 단, V가 준정부호일 때 lscovV의 역을 구하는 계산을 방지하는 직교 분해(Orthogonal Decomposition) 알고리즘을 사용합니다.

x = lscov(A,B,V,alg)V가 행렬인 경우 x를 계산하는 데 사용하는 알고리즘을 지정합니다. alg는 다음 값을 가질 수 있습니다.

  • 'chol'V의 촐레스키 분해(Cholesky Decomposition)를 사용합니다.

  • 'orth'는 직교 분해(Orthogonal Decomposition)를 사용합니다. V의 조건이 나쁘거나 특이 행렬인 경우 더 적합하지만 더 많은 계산량을 필요로 합니다.

[x,stdx] = lscov(...)x에 대해 추정된 표준 오차를 반환합니다. A가 랭크가 부족한 경우 stdxx의 필수 0 요소에 대응하는 요소에 0을 포함시킵니다.

[x,stdx,mse] = lscov(...)는 평균 제곱 오차를 반환합니다. B가 공분산 행렬 σ2V(또는 (σ2diag(1./W))를 가지는 것으로 간주되는 경우 mse는 σ2의 추정값이 됩니다.

[x,stdx,mse,S] = lscov(...)x에 대해 추정된 공분산 행렬을 반환합니다. A가 랭크가 부족한 경우 Sx의 필수 0 요소에 대응하는 행과 열에 0을 포함시킵니다. lscov는 우변에서 여러 번 호출되는 경우, 즉 size(B,2) > 1인 경우 S를 반환할 수 없습니다.

AV가 완전 랭크인 경우 이러한 정량에 대한 표준 식은 다음과 같습니다.

  • 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는 더 빠르고 안정적인 메서드를 사용하며, 랭크가 부족한 경우에 적용할 수 있습니다.

lscovB의 공분산 행렬을 스케일링 인자를 통해서만 확인할 수 있다고 가정합니다. mse는 알 수 없는 스케일링 인자의 추정값이며, lscov는 출력 인수 Sstdx를 적절히 스케일링합니다. 그러나 VB의 공분산 행렬과 정확히 일치한다고 확인되면 스케일링이 불필요합니다. 이 경우 적절한 추정값을 구하려면 Sstdx를 각각 1/msesqrt(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 이전에 개발됨