최소제곱 추정 방법 

  • 개체에서 발생하는 잔차에 제곱을 취하여 합을 구하는 방식 
  • 큰 절대값 잔차가 발생하지 않도록 회귀직선을 움직임. 
  • 한 개의 특이점이 회귀직선의 결정에 막중한 영향력을 가짐.

 

후버의 M-추정 

최소제곱 추정은 함수

으로 정의할 떄

를 최소화

그런데 이 추정치가 안정적이지 못한 이유는 함수가 z²에 비례하는 형태이기 때문 

 

따라서 다음의 변형을 고려한다.

|z| < c에서는 원래의 함수와 같지만 그 밖에서는 원래 함수보다 천천히 증가한다.

 

이를 반영한 후버의 M-추정량은 

로 얻어진다.

여기서 σ를 모르기 때문에 (다음 페이지의) MAD로 추정해 사용한다.

 

MAD (median of absolute deviations)

를 가정하고 σ에 대한 로버스트 추정량으로 IQR / 1.35 를 사용한다.

MAD는 또 다른 로버스트 추정량으로

라 정의한다.

 

 

목적함수  l   (z)  vs.   l (z)

ell.0 = function(z){z^2}
ell.1 = function(z){c = 1.345; ifelse(abs(z) < c, z^2, c*(2*abs(z) - c))}
z = seq(-6, 6, 0.1)
y.0 = ell.0(z)
y.1 = ell.1(z)
par(mfrow = c(1,2), pty = 's', mar = c(5, 3, 1, 3))
plot(y.0 ~ z, type = "l", lwd = 2, ylim = c(0, 30),
     ylab = expression(paste("\u2113")[0](z)))
plot(y.1 ~ z, type = "l", lwd = 2, ylim = c(0, 30),
     ylab = expression(paste("\u2113")[1](z)))
par(new = T)
plot(y.0 ~ z, type = "l", lwd = 2, lty = "dotted", ylim = c(0, 30), ylab = "")

 

코드해석: 

1. ell.0과 ell.1은 앞에서 봤던 l ₀, l ₁의 목적함수를 뜻한다. 

2. ell.1에서 ifelse는 첫 번째 조건을 만족하면 z² 을 하고 아니면 c * (2 * abs(z) - c)를 한다.

 

코드결과:

 

 

LMS/ LTS 추정 

> 자료점을

라 하고, 잔차를 

라 할 때, 최소제곱법은 

을 풀어 회귀직선을 얻는다.

 

 

LMS

> 반면에 LMS (Least Median of Squares) 회귀는 로버스트성의 관점에서 이 목적식을 

으로 개량한다.

 

> 최소제곱법은 Least Squares지만 Least Mean of Squares으로 간주 가능하다.

> LS는 선형대수적 풀이가 가능하지만 LMS는 몬테카를로 반복시행으로 해를 찾는다.

 

 

LTS

> LTS (Least Trimmed Squares; 최소절삭제곱) 회귀는

을 풀어서 회귀직선을 얻는다.

 

> q는 잔차제곱에 대한 순서통계량

에서의 순서

 

> default는 n의 50%정도에 해당하는 [n/2] + [(p+1)/2]

> n의 75% 정도에 맞추면 추정치의 정확도가 높아진다는 연구결과가 있다. 

 

비교1

library(MASS)
m0 = lm(y ~ x)  # 최소제곱추정 
m1 = rlm(y ~ x)  # 후버의 M-추정
m2 = lqs(y ~ x, method = "lms") # lms
m3 = lqs(y ~ x, method = "lts") # lts 
par(mfrow = c(1,1), mar = c(5, 3, 1, 3), pty = 's')
plot(y ~ x, ylim = c(-10, 10), cex = 2, pch = 19, col = 'darkgreen')
abline(m.truth$coefficients, lty = "dotted", lwd = 2)
abline(m0$coefficients, col = "darkcyan", lwd = 2)
abline(m1$coefficients, col = "darkblue", lwd = 2)
abline(m2$coefficients, col = "darkred", lwd = 2)
abline(m3$coefficients, col = "orange", lwd = 2)

여기서 보면 최소제곱추정 (lm)은 이상치에 민감해서 이상치쪽으로 방향이 따라간다는 걸 알 수 있다. 

lms, lts, 후버의 m-추정 모두 경향을 잘 따라가고 있다. 

 

다른 예를 통해서 조금 더 자세하게 살펴보자.

 

 

 

비교2 

1. X: 1,2,3,... , 10으로 고정

2. Y: Y = 2.5 + 0.5X + ε, ε ~ N(0,1)으로 생성 

3. 열번 째 자료점은 (100, -100)으로 수정 

  • x = 100은 '특이한' 설명변수 값
  • x = 100이 정상적인 값이라 했을 때도 y = -100은 특이값 ('회귀' 특이점)
set.seed(1234567)
x = seq(1:10)
y = 2.5 + 0.5*x + rnorm(10, 0, 1)
x[10] = 100
y[10] = -100

par(mar = C(5,3,1,3), pty = 's')
plot(y ~ x, ylim = c(-100, 10), cex = 1, pch = 19, col = 'darkgreen')
abline(m.truth$coefficients, lty = 'dotted', lwd = 2)

 

후버의 M-추정 vs. LMS

m1 = rlm(y ~ x)  # 후버의 M-추정
m2 = lqs(y ~ x, method = "lms") # lms
par(mar = c(5,3,1,3), pty = 's', mfrow = c(1,2))
plot(y ~ x, ylim = c(-100, 10), cex = 1, pch = 19, col = 'darkgreen')
abline(m.truth$coefficients, lty = 'dotted', lwd = 2)
abline(m1$coefficients, col = 'darkblue', lwd = 2)
abline(m2$coefficients, col = 'darkred', lwd = 2)

plot(y ~ x, ylim = c(-100, 10), cex = 1, pch = 19, col = 'darkgreen')
abline(m.truth$coefficients, lty = 'dotted', lwd = 2)
abline(m1$coefficients, col = 'darkblue', lwd = 5)
abline(m2$coefficients, col = 'darkred', lwd = 5)

LMS가 후버의 M-추정에 비해 더 경향을 잘 따라간다. 

 

 

LTS default vs. LTS quantile = 8

m2a = lqs(y ~ x, method = "lts")
m2b = lqs(y ~ x, method = "lts", quantile = 8)
par(mar = c(5,3,1,3), pty = 's')
plot(y ~ x, xlim = c(0, 10), ylim = c(0, 10), cex = 2, pch = 19, col = "darkgreen")
abline(m.truth$coefficients, lty = 'dotted', lwd = 2)
abline(m1$coefficients, col = 'darkcyan', lwd = 5)
abline(m2$coefficients, col = 'purple', lwd = 5)

누가 더 경향을 더 잘 따라간다고 할 수는 없다. 

'프로그래밍 > R프로그래밍' 카테고리의 다른 글

EDA - 다중선형회귀  (2) 2024.05.22
EDA - 줄기와 잎 그림  (0) 2024.04.08
R프로그래밍 - simulation (2)  (1) 2023.12.05
R프로그래밍 - 중심극한정리 확인  (1) 2023.12.04
R프로그래밍 - simulation  (0) 2023.12.04

+ Recent posts