2013년 12월 11일 수요일

R Graph를 이용한 금융계산

R은 통계 툴입니다.
주어진 데이터를 분석 추정하는데 사용하는 강력한 툴입니다.

그렇지만 생활에서 많이 접하는 정기예금, 단리, 복리 수익 및 대출등의 금융계산에 이용할 수도 있습니다.

R의 그래프 기능을 이용하여 아주 간단한 R 프로그램을 구성해 보겠습니다.

먼저 간단한 예로 일정금액을 일정기간동안 예치해 놓는 경우를 가정해 보겠습니다.  기간동안 이자가 발생하는데 첫번째는 금액의 이자가 단순히 기간에 비례하여 증가하는 경우(경우1)와 금액의 이자가 합산되어 증가되는 경우(경우2)를 가정해 보겠습니다.

amount 는 원금입니다.
period는 연단위 기간입니다.
rate는 연단위 이자 입니다.   이자는 월단위로 발생하는 것으로 가정하겠습니다.

경우1)
fnSimple <- function(amount,period,rate) { amount*period*rate + amount }

경우2)
fnCompound <- function(amount,period,rate) { amount*(1+rate/12)^(period*12) }

이제 조건을 정해 보겠습니다.
두 영역의 차이를 크게 하기 위해 기간과 이율을 좀 높혀서 확인해 보겠습니다.
amt 는 원금 입니다. (원 단위 만원단위는 편하게 생각하셔도 됩니다.)
px 는 기간 입니다. 1년에서 100년 까지 설정한 것입니다.
rt 는 이율 입니다.
amt <- 1000;  px <- c(1:100);  rt <- 0.12;
psy <- fnSimple(amt,px,rt)
pcy <- fnCompound(amt,px,rt)
plot(px,pcy,type='o',col='blue',tck=1);
points(px,psy,type='o',col='red');
위의 내용을 보시면 다음과 같습니다.


그래서 y축의 값을 로그로 환산하여 처리해 보았습니다.
plot(px,pcy,type='o',col='blue',log='y',tck=1);
points(px,psy,type='o',col='red');



이제 매월 일정액을 납부하여 만기일에 이자와 원금을 받는 경우를 가정해 보겠습니다.  세금납부는 제외하겠습니다.
먼저 단리의 경우입니다.  단리는 납부원금에 대해서만 발생하는데 매월 일정액이 납부되기때문에 일정한 값만큼 증가하게 됩니다. 예를 들어 10만원에 월 1% 이자 (연 12%)라면. 첫달에 1000원 둘째달에 2000원(200000×0.01) , 셋째달은 3000원이 발생합니다.
등차수열의 합을 구하는 방식을 연상해 보시면 됩니다.  (초항+마지막항)×기간/2 가 이자금액의 합이됩니다.
fnMSimple <- function(amount,period,rate) { rateM <- rate/12; (amount*rateM+amount*rateM*period*12)*period*12/2 + amount*period*12 }

복리는 원금에 이자가 합산되어 이자가 발생하는 방식입니다.
첫달은 원금*연이률/12+원금 입니다. 식으로 표현하면 amount*(1+rate/12) 입니다.
둘째달은 (첫째달 금액 + amount)*(1+rate/12) 입니다. 결국 등비수열의 합 공식으로 유도됩니다.
fnMCompound <- function(amount,period,rate) { rateM <- rate/12; amount*(1+rateM)*((1+rateM)^(period*12)-1)/(rateM) }

100년의 기간은 너무 많은 차이를 나타내기 때문에 이곳에서 20년 정도로 기간을 단축해 보겠습니다.   그리고 금액도 10 정도를 매달 저금하는 것으로 해 보겠습니다.

amt <- 10; px <- c(1:20);
psy <- fnMSimple(amt,px,rt);
pcy <- fnMCompound(amt,px,rt);
plot(px,pcy,type='o',col='blue',tck=1);
points(px,psy,type='o',col='red');
points(px,px*amt*12,type='o');




10년 정도의 기간에서는 큰 차이가 발생하지 않지만 20년 정도에는 2배 가량 차이가 나타나고 있습니다.


대출의 경우는 대개 2가지 방식으로 진행 될 수 있습니다.
매달 원금에서 동일한 금액을 상환하는 방식(원금균등상환)과 매달 동일한 금액을 상환하는 원리금균등상환 방식을 생각해 볼 수 있습니다.
전자(원금균등)의 방식이 총액에서는 이익이지만 초기에 상환해야할 금액이 커질 수 있습니다.
아래는 함수 입니다. 상환이기 때문에 기간은 월단위로 설정해 보겠습니다.

fnSLoan <- function(amount,period,rate) {
    result <- c(1:period);
    mAmt <- amount/period;
    mRate <- rate/12;
    for ( i in c(1:period) ) {
        result[i] <- amount*mRate+mAmt;
        amount <- amount-mAmt;
    }
    result;
}

fnCCalc <- function(amount,period,rate) { (amount*rate/12*(1+rate/12)^period)/((1+rate/12)^period-1) }

fnCRemain <- function(amount,period,rate,mAmt) {
    result <- c(1:period);
    mRate <- rate/12;
    for ( i in c(1:period) ) {
        mAmtR <- mAmt-amount*mRate;
        amount <- amount-mAmtR;
        result[i] <- amount
    }
    result;
}


댓글 없음:

댓글 쓰기