This is a brief techy note on compounding in models, prompted by some recent work on financial functions, i.e. compound interest. It’s something you probably know, but don’t think about much. That’s because it’s irrelevant most of the time, except once in a while when it decides to bite you.
Suppose you’re translating someone’s discrete time model, and you decide to translate it to continuous time, because Discrete Time Stinks. The original has:
bank balance(t+1) = bank balance(t) * (1+0.1)
So you translate as:
interest rate = 0.1 ~ fraction/year earning = interest rate * bank balance ~ $/year bank balance = INTEG( earning, initial bank balance ) ~ $
So far, so good. But then you discover numerical issues in other parts of the model, and decide to reduce the time step from 1 to 0.125 as a remedy. That introduces a small discrepancy in the rate of growth of the bank balance from compounding. The compounded interest after a year will now be:
(1 + interest rate * TIME STEP)^(one year/TIME STEP) (1+0.1*0.125)^(1/0.125) = 1.104486
where the 1 in the numerator of the exponent represents 1 year, preserving dimensional consistency. In other words, where the discrete model had simple interest at 10%/year, you now have (roughly) continuous compounded interest at 10.4%/year. To match the original model, you need to adjust the interest rate to yield the 10% simple interest, with a finer time step. If the time step is small (approximately continuous time), this is just the force of interest:
.0953 = ln( 1 + 0.1 ) / 1.0
Otherwise, you can explicitly account for compounding, solving as above:
1.1 = (1 + interest rate * TIME STEP)^(one year/TIME STEP) (1+interest rate*0.125) = 1.1^0.125 interest rate = .09588
Another situation where this kind of issue crops up is calibration to data. Suppose you have data on the bank balance, and want to estimate the interest rate. The model is continuous, but the data is discrete, with a longish interval between points. If you calibrate to the bank balance, you’ll automatically get an interest rate that compensates for any compounding differences between the model and the data. But if you use an interest rate that’s estimated externally with a different time step, you could get some mismatch.
Most of the time, this doesn’t make a lot of difference, but you can always compute a sanity check. If the simple rate is i (in time units of the model), the ratio of continuous compounding to simple interest is:
R = e^it / (1+i)^t ln(R) = i - ln(1+i)
At 10%/yr interest, the difference is modest, as above:
.1 - ln(1.1) = .00496
No big deal – but if you have a credit card at 400%/yr, watch out!