Annuity factor table tool

Is anyone aware of a free tool that can produce a table of life annuity factors?

I know the SOA has an annuity factor calculator but it only produces a single factor at a time. I am looking for something that would allow me to generate a table for multiple ages without having to create my own.

@serena @meep

Free tool?

No, I am not aware of a free tool.

I’ve created my own tools from first principles that loop through various ages and mortality/interest assumptions using vba. It was a bit time consuming but it was a useful project for my job. I suppose those are considered proprietary since I made them on company resources.

1 Like

I’m not aware of anything free.

I’d be happy to create a spreadsheet for you with factors - but I’d charge you in advance for it. The software to generate it is expensive. As is the time involved to have it checked and properly documented.

Hmu if I can help.

Or you can create your own as NA suggested.

1 Like

Thanks for the offer. I am not looking for a table of factors, I am looking for a tool to create the factors.

I can build one myself from first principles like NA (if needed before I get around to buying the software that does it for me), but figured I would see if there was something that could make my life easier.

Not for free there isn’t :woman_shrugging:

Here is a Julia script that will calculate annuity factors using JuliaActuary packages using any mortality table or rates that you want:

using MortalityTables
using LifeContingencies
using DataFrames

# pick any table name from mort.soa.org
table_name = "2001 VBT Residual Standard Select and Ultimate - Male Nonsmoker, ANB"

# load the table
mortality = MortalityTables.table(table_name)

age_range = 20:80
yield_range = 0.01:0.0025:0.06

# map over the ages and rates to calculate the annuity factors
factors = map(Iterators.product(age_range,yield_range)) do (age,rate)

	# create a life contingency which is the combination of a life (or JointLife)
	# and a yield (can be a curve, but this example uses a single rate)
	
	lc = LifeContingency(
		SingleLife(mort = mortality.select, issue_age = age),
		rate
	)
	
	(
		age = age,
		yield = rate,
		ä = LifeContingencies.ä(lc), # can be type with `a + \ddot[tab]`
		a = LifeContingencies.a(lc),

	)
end
		
# convert into a dataframe. `vec` converts the multi-dimensional factor array into a vector
DataFrame(vec(factors)) 

This creates a dataframe of rates you can use:
image

To run this interactively in a notebook of your own:

  1. Download Julia (julialang.org)
  2. Install Pluto (github.com)
  3. Run the code above by copy and pasting the code above or putting this url in the welcome screen: https://gist.githubusercontent.com/alecloudenback/2e36a1aa6fc66ca30457c86a52019f92/raw/2536736804a40aca0e08b75c30be82a697961c4f/annuity_factors.jl
3 Likes

Thanks Alex. I am considering looking into learning Julia. More likely I’ll bite the bullet and buy what I need to save myself time.