Half of a mortgage nomogram

Mathematics about graphical computing
Glen
Posts: 67
Joined: Fri Jan 25, 2008 4:11 am
Location: Australia

Half of a mortgage nomogram

Postby Glen » Thu Feb 07, 2008 6:05 am

The mortgage nomogram Leif was describing has two main parts.

If P is the loan amount (P stands for Principal),
m is the monthly payment,
i is the monthly interest rate,
and n is the term in months

then P/m = a = [1-(1+i)^{-n}]/i

Of course, the user wants the interest quoted as an annual rate and the term in years.

a is the value of an amount paid of 1 unit per time period at the given interest rate and term (often called an "annuity-certain", even when it's not paid annually).

I have made the right half of this equation into a nomogram (i.e. the tricky part), following largely the "one curvy scale" discussion I posted here recently. It worked pretty well for a first iteration, and the first time I've actually carried such a calculation right through.

Almost all of this work could be performed in code.

In the proof-of-concept nomogram linked below (it's not production quality by any means), the annuity value, "a" is on a log-scale. This makes the P/m=a part trivial (just a parallel-scale nomogram), so the full nomogram would simply consist of the part below with m and P scales (also logarithmic) to the left of that; you pivot about the "a" scale value.

(NB - the "a" scale itself need not have numbers or even tick marks; it's really just a pivot-scale between the P/m and the i/n halves. On the other hand, it may be of interest to have the values.)

Note that there are two values "drawn in" as a quick illustration.
15 years at 2.5% p.a. (compounded monthly)
and
40 years at 8% p.a.

The first should have a value of a=150.3, the second of a=148.3

[This means that for a 15 year loan at an annual interest rate of 2.5%, the monthly repayment will be 1/150th of the principal.]

As you can see, the first one comes out right on 150, and the second just below that. On a blown up version (400%), I was able to work out the value of the second one as 148 (to the nearest whole number).

The layout of the centre (years) scale - both the way it starts very close to the a scale, and its curvature at the high end means that there's some loss of accuracy from the highest interest rates, but with careful use on a big copy (the original file blows up well, though the jpg doesn't) the accuracy is pretty good. A well-chosen projective transformation (on the entire nomogram. including the P/m part) should help with that issue, but I haven't tried that.

Opinions? Questions?

(This image is hosted at my geocities website, so lots of views of it will max out my bandwidth there fairly quickly. I may have to put it elsewhere.)

[img]http://www.geocities.com/glenbarnett/loan.jpg[/img]
RonDoerfler
Posts: 27
Joined: Mon Feb 04, 2008 9:43 pm
Location: USA
Contact:

Re: Half of a mortgage nomogram

Postby RonDoerfler » Thu Feb 07, 2008 9:57 pm

Glenbarnett wrote:I have made the right half of this equation into a nomogram (i.e. the tricky part), following largely the "one curvy scale" discussion I posted here recently.


Hi Glen,

I understand why you might expect the a and i scales to be logarithmic, and I understand how you created the curved scale from overlays of lines of known solution, but how did you know that this form (two linear and one curved scale) would work out for this equation? Even when the logarithm is taken of both sides, it doesn't appear to align with the Genus I standard form unless I'm missing something.

I can store files on my website if that would work out better--just let me know.

Ron
Glen
Posts: 67
Joined: Fri Jan 25, 2008 4:11 am
Location: Australia

Re: Half of a mortgage nomogram

Postby Glen » Fri Feb 08, 2008 2:42 am

[quote="RonDoerfler"][quote="Glenbarnett"]I have made the right half of this equation into a nomogram (i.e. the tricky part), following largely the "one curvy scale" discussion I posted here recently. [/quote]

I understand why you might expect the a and i scales to be logarithmic,[/quote]

In fact I didn't expect a logarithmic form to work particularly well at all. I was working on powers (both fractional and inverse) and ratios of linear functions; all had some nice features, and it is conceivable all might have been made to work. I just happened to go back and give ln(a) another try, because of a feature I noticed about various power series (I forget actually, but I was playing around with power series and transformations, and noticed something-or-other and decided to try ln(a) again.

[quote] and I understand how you created the curved scale from overlays of lines of known solution, but how did you know that this form (two linear and one curved scale) would work out for this equation? Even when the logarithm is taken of both sides, it doesn't appear to align with the Genus I standard form unless I'm missing something.
[/quote]

Note that the scale for "i" is NOT a log-scale. It's close to sqrt(i), but it is different.

You're correct, the equation is not of standard Genus I form. However, it is extremely well approximated by a relation of that form. Explicitly, you can write the relationship in this form:

ln(a) = f(n) + phi(n) I(i)

but I just can't say explicitly what f(), phi() or I() are, other than "they're some kind of fairly smooth curve". It's possible to try to recover those functions - or at least approximations of them - from the nomogram (I think I have a paper relating to it somewhere, but I have yet to read it).

Here's the approach I actually used:
i) I played around with graphs of "a" vs "i" for a vectors of fixed "n" values (yielding multiple curves). Once I realized that the curves of A(a) vs I(i) for fixed n were all nearly linear when A()=ln() and I()=sqrt(), I stopped. (They were far from the only candidates! Many other combinations of A- and I- functions were nearly as good.)

ii) I simply played (by hand) with the already almost-linearizing I-transformation, by pushing "up" the low values higher than they were under the square root, rapidly getting almost perfect linearity in the plot (for most values of n I couldn't distinguish the curves from lines of best fit).

At this point I no longer had an explicit functional form for I(), just I-function values that various i-values mapped to. I didn't want to play with the a-scale (since either a log transform or a power transform made the P/m side doable directly and I already had a log-transform). Fortunately, it was almost perfectly linear already, so there was no need.

The reason we look for linearity is because of the duality between the graph and the alignment nomogram; the important bit to know for now is that if these curves are straight, then an alignment nomogram exists.

So this linearity basically told me that I had a nomogrammable relationship, even though I didn't know what it was. However, I didn't [i]need[/i] to know what it was to draw it. I had my I-scale, marked with the values of "i" that I cared about, and I had my A-scale.

iii) I simply drew A and I scales on a graph (in Excel) as vertical axes at arbitrary locations, and then constructed the n-curve empirically (well, Excel did almost all the work - it would have been tedious to do by hand on paper). I used the drawing tool in Excel to help me draw a smooth curve through the selected scale tick marks (useful hint: don't use too many knots, and put knots between rather than at tick points - it seems to give better control, since you can slide the knots about more easily and end up with a smooth result). The broad approach here is described in my "one curvy scale" discussion - it's the part about the little triangles. (Lyle describes something very similar, but I hadn't read that when I wrote the curvy-scale discussion, and didn't use his approach directly.)

All scales would be better with more tick marks, but that's just a matter of additional effort - it doesn't change the approach, which is all I was trying to illustrate.

[quote]I can store files on my website if that would work out better--just let me know.[/quote]

Thanks. There are bots crawling all over this site, judging from the hit counts. If they follow the jpg link, it will get creamed. If they don't follow it, the few of times an actual human looks at it should be no major problem. I will check the traffic in a few days and assess the situation, so I may take you up on it then.
Leif
Posts: 55
Joined: Mon Dec 31, 2007 3:03 pm
Location: Finland
Contact:

Postby Leif » Fri Feb 08, 2008 8:13 pm

Great nomogram!

How about if you would just fit coeffs for polynomials
F1,F2,G2,F3 in function

F1(a)=F2(n)+G2(n)*F3(i)

such that error would be minimized for every combination
of a,n,i in specified range ?
This is of course the approach I already proposed.
I looked my code and found that I actually fitted for N-type
nomogram:

F1(a)=F2(n)*F3(i)

so your curved scale nomogram with more degress of
freedom probably give better answers.

P/m=a part trivial (just a parallel-scale nomogram)
,

If you have transformed a to some func F1(a), then you have
to find F1(a)=F1(P/m) nomogram that is probably doable with
ladders, but maybe not trivial...

\leif
Glen
Posts: 67
Joined: Fri Jan 25, 2008 4:11 am
Location: Australia

Postby Glen » Fri Feb 08, 2008 9:23 pm

How about if you would just fit coeffs for polynomials
F1,F2,G2,F3 in function

F1(a)=F2(n)+G2(n)*F3(i)

such that error would be minimized for every combination
of a,n,i in specified range ?
This is of course the approach I already proposed.

Indeed you could attempt to fit smooth curves. In many cases there would be an advantage to doing so.

I wouldn't keep to polynomials alone, however. They're a good first thing to try, but they tend to have a problem fitting some kinds of function, where if you add enough terms to capture the shape, they wiggle about between the fitted points. One way to avoid that is to use, say cubic splines, or somesuch. (A common choice used with nomograms in the past by some engineers was ratios of linear or low-order-polynomial functions. I have found origin-shifted powers, (x-k)^s for non-integer, and possibly negative "s" to be quite good at times. There are also families of transformations widely used in some areas that can be useful, which I should write about sometime)

One problem is that it's quite tricky to see the form of nomogram that you should use at the start. The hand-anamorphosis on the intersection charts yielded near straight lines, so from that point we were at a "straight parallel scales for "a" and "i", and then something of the form F1(a)=F2(n)+G2(n)*F3(i) is obvious in some sense.

Of course (as I suggested in my "one curvy scale" post, you can just start with "lets find the best approximation of the form h(w)=f(v)+phi(v)g(u)" and see if it works, so if that's what you're suggesting, then it certainly has the potential to work in many cases, it's a very rich set of relations.

The hard part is that even with polynomials, because you're including transformations of "a" in the search space, the search over possible transformations of the response makes the overall search space *huge*. Within any transformation of a, the problem is much easier (for a given maximum degree of polynomial, it's a matter of fitting coefficients by, say L-infinity norm, a standard problem), but finding the best transformation of "a" is hard, since it's a different kind of problem. (On the other hand, if you knew the functions for the other variables, the transformation for "a" would be estimable.)

In fact, given a good transformation of "a", the problem can be done for much more general classes of functions than polynomials (the book by Khavinson addresses this for equations of the form h(z) = f(x) + g(y) - the calculation of f and g is straightforward; I don't recommend Khavinson's book unless you're prepared for some pretty solid mathematics).

If you do the hand-anamorphosis, approximate values of the transformation of "a" that you're trying to approximate can be obtained from the transformation you used; similarly for "i". So at least doing that first stage by hand can make the problem much more manageable.

If you have transformed a to some func F1(a), then you have
to find F1(a)=F1(P/m) nomogram that is probably doable with
ladders, but maybe not trivial...

I was trying to avoid ladders, since they introduce a lot more inaccuracy.

But in any case, if you're trying to get a best fit (in some sense) for both halves, you have to consider both halves of the equation at the same time.

[I avoided that consideration by restricting myself to powers of a and the log function (which fits into the "powers of a" ladder, since
lim(p->0) [a^p-1]/p = ln(a) ).

By using that restriction, I was keeping myself to things that meant P/m=a would be easily nomogrammed]

If you did go for a more general transformation of "a", you would have to look to get an approximation that worked on both sides at once. This is what I've been trying to do with the Rocket equation (I have a reasonable one, but I am hoping for something better).

(The equation in question is u/v + 1 = exp(x/y) ).

While it has some obvious similarities to the mortgage equation, it's subtly trickier.

I'm not sure that "best approximation" in the usual sense (whether L-infinity norm or something else) is the right metric. I think a more appropriate metric needs to take into account the errors from the using nomogram itself (which is not uniform across all input values). Ideally it's the error across the entire process that needs to be optimized.
Last edited by Glen on Thu Feb 25, 2010 5:11 am, edited 1 time in total.
RonDoerfler
Posts: 27
Joined: Mon Feb 04, 2008 9:43 pm
Location: USA
Contact:

Postby RonDoerfler » Sat Feb 09, 2008 4:42 am

Glen and Lief,

I just wanted to say thanks for taking the time to answer my question on the curve-fitting process in such detail and for the further discussions on minimizing the error. One of the things that strikes me about nomography is the range of freedom available for different creative designs. Another striking feature is how much mathematics and effort lies behind these seemingly simple nomograms, which to me is an indication of how effective nomograms can be in representing quite complicated formulas.

Ron
Glen
Posts: 67
Joined: Fri Jan 25, 2008 4:11 am
Location: Australia

Postby Glen » Sat Feb 09, 2008 6:23 am

The sort of "automatic identification of smooth transformations" we've just been discussing is a problem I have been worrying at for a long time, but I always failed to figure out how to automatically identify the transformation of the response variable from a fairly general smooth class (e.g. from among splines or polynomials or whatever).

[It's easy enough to pick a transformation from a finite list, of course - just try them all and see which one fits best.]

This most interesting discussion we've been having has triggered an idea (actually, thinking more about Leif's question did it). It is just possible that I may have found a way to somewhat automatically identify an approximate transformation h() in relations of the form:

h(z) = f(x) + phi(x).g(y) .

(at least given some class of flexible-but-smooth smooth functions to choose h() from among; normally you'd want h to be monotonic but I'm going to ignore it to begin with).

There are some details to work out, but if it works, it could be pretty neat. You'd supply a table of data ( x,y,z triples, or maybe a two-way table with x,y margins and z-values for each combination). You'd get back out h,f,g, etc.

After coming up with the idea, I can see one further very good reason why ratios of linear or low-order-polynomials is attractive (aside from their ability to approximate rapidly-changing functions).

[Of course, it may not work out. Probably not time to try it for a while. I will discuss it here if it does work. I will probably write some code up in R, since a lot of the stuff I'll need will be built-in there.]
Leif
Posts: 55
Joined: Mon Dec 31, 2007 3:03 pm
Location: Finland
Contact:

Re: Half of a mortgage nomogram

Postby Leif » Mon Mar 10, 2008 8:49 pm

I have been working on the PyNomo project and as an demonstration managed to make amortization nomogram with exact equation. Half of nomogram is in spirit of nomogram from d'Ocagne 1899 book page 306. The nomogram may be downloaded from:

http://pynomo.org/examples/amortization_100308.pdf

I have worked in a framework to construct nomograms made out of multiple nomograms and there is still way to go. However, basic routines seem to work. Questions are mostly how to write good code and less about mathematics, yet.

\leif
RonDoerfler
Posts: 27
Joined: Mon Feb 04, 2008 9:43 pm
Location: USA
Contact:

Re: Half of a mortgage nomogram

Postby RonDoerfler » Tue Mar 11, 2008 4:09 pm

Wow, that's a great-looking nomogram! It's so much easier, I think, to play with possible scenarios on a 4-variable nomogram like this than to keep punching numbers into a calculator to see what comes out. If you were to increase the maximum value of the loan amount and decrease the minimum number of years to 1, it would be immediately useful.

I downloaded your PyNomo program and all the associated software (I already had MiKTeX) and I'm starting to explore it. Very impressive.

Ron
Leif
Posts: 55
Joined: Mon Dec 31, 2007 3:03 pm
Location: Finland
Contact:

Re: Half of a mortgage nomogram

Postby Leif » Tue Mar 11, 2008 6:18 pm

RonDoerfler wrote:
I downloaded your PyNomo program and all the associated software (I already had MiKTeX) and I'm starting to explore it. Very impressive.

Ron


Note that I made loan nomogram with the PyNomo version under development. The Sourceforge latest version 0.1.0b1 is from October and it will take some time before I will make a new distribution. If you anyway want to play with the latest version, it can be downloaded from Sourceforge SVN. The file to look for building complex nomograms like loan calculator is found from file nomo_wrapper.py

A note to loan nomogram use: one has to find crossing of interest rate and years and draw vertical line down to bottom vertical line. This is the turning point for next line that goes through loan and monthly payment.

\leif

Return to “Mathematics”

Who is online

Users browsing this forum: No registered users and 5 guests