Describe 레만투_최적화 here 많은 통계 알고리듬은 주어진 제약조건 내에서 목적함수를 최적화시키는 방식을 통해 이뤄진다. 회귀분석에서 OLS는 잔차 제곱합을 최소화시키는 방법이고, ML은 우도를 최대화시키는 것이다. 여기서 잔차제곱합이나 우도가 목적함수가 되고 최소화나 최대화가 최적화에 해당한다. optim 함수는 이렇게 목적함수를 최적화시켜주는 함수이다. 간단한 예제를 하나 살펴보자. {{{ > x <- rnorm(100) > y <- 3*x+2+rnorm(100) > lm(y~x) Call: lm(formula = y ~ x) Coefficients: (Intercept) x 1.959 2.908 }}} 위에서는 평균 0, 표준편차 1인 정규분포로부터 100개의 값을 랜덤추출해서 변수 x에 할당하였다. 그리고 x에 기울기 3을 곱하고 절편 2를 더한다음 오차를 더해 y를 생성했다. OLS 회귀분석을 실시하여 원래의 값과 거의 비슷하게 기울기 2.908, 절편 1.959을 찾았다. (랜덤추출로 만든 데이터이므로 실시할 때마다 구체적인 값은 조금씩 다를 수 있다.) 이것과 똑같은 작업을 optim을 이용해서 해보자. 우선 OLS 함수를 만들어보자. 목적함수는 추정할 파라미터들을 하나의 벡터로 받아들인다. {{{ ols <- function(b){ t <- b[1] + b[2]*x sum( (y - t)^2 ) } }}} 이제 적당한 초기값과 함께 목적함수를 optim에 넘겨주면 된다. optim은 목적함수를 최소화시키므로 최대화시켜야할 경우에는 목적함수에 -를 붙여준다. 초기값 벡터의 길이는 파라미터의 개수와 같아야 한다. {{{ > optim(c(0,1), ols) $par [1] 1.958803 2.907654 $value [1] 89.22844 $counts function gradient 69 NA $convergence [1] 0 $message NULL }}} par는 추정한 파라미터의 값을 나타낸다. lm 함수로 실시한 OLS 회귀분석과 같은 것을 알 수 있다. value는 최적화된 목표함수의 값이다. 잔차제곱합이 약 89.22다. count는 함수 호출 회수를 나타내는 데 위에서는 69번만에 최적화가 끝났다는 것을 알 수 있다. convergence가 0이면 수렴되었다는 것을 나타낸다. 기타 자세한 내용은 도움말을 참고하라.