# 32 Savings Simulations

In this chapter we present a fairly simple example in financial math in which we apply some of the programming concepts covered so far.

## 32.1 Do you regularly save some money?

**How much do you tend to save, and how often?** A dollar per day? A few dollars
per week? Maybe a few hundred dollars per year?

**For what purpose(s) do you save?** For traveling and vacations? For
entertainment? For your retirement? To buy a house?

**Where do you keep/invest (some of) your savings?** Obviously this is a tricky
question and the answer heavily depends on your savings goals.

The overarching aim of this chapter revolves around the following question:

**If you were to save some of your annual income for a number of years, how much money could you expect to accumulate under different saving-investing cases (ignoring inflation)?**

#### Some Considerations

In this chapter we will write code in R to simulate a handful of relatively basic savings investing/scenarios (ignoring inflation).

From the analytical point of view, you will practice writing functions, as well as implementing control flow structures such as conditionals and loops.

We will write functions using Roxygen comments to document what the function
does (`@title`

, `@description`

), its parameters (`@param`

), and the expected
output (`@return`

).

We won’t use functions from any Finance (or other external) R packages.

## 32.2 Future Value Function

Suppose you want to invest $1000 in a financial product (e.g. Savings Account, Money Market, Certificate of Deposit) that has an annual return rate of 5%. And you will keep this investment for 10 years. How much money would you expect to get at the end of this period?

To answer this question, you can use a simplified version of the **Future Value** formula, assuming compound interest. Here are the ingredients:

- \(\text{PV}\) = present value amount (i.e. how much you invest)
- \(r\) = annual rate of return
- \(t\) = time (in years)
- \(\text{FV}\) = future value (i.e. what you’ll get)

\[ \text{FV} = \text{PV} (1 + r)^t \]

For example, investing \(\text{PV} = \$1000\) in an index fund that, on average, has an annual return rate of 5%, at the end of the first year, you would have:

\[ \$1000 (1 + 0.05)^1 = \$1050 \]

If you keep those $1050 invested, at the end of the second year you will have:

\[ \$1050 (1 + 0.05)^1 = \$1102.50 \]

In 10 years, your initial $1000 investment will become:

\[ \$1000 (1 + 0.05)^{10} = \$1628.895 \]

### 32.2.1 Function `future_value()`

Write a function `future_value()`

that computes the future value of an
investment, taking the following arguments

`amount`

: initial invested amount`rate`

: annual rate of return`years`

: number of years

You should be able to invoke `future_value()`

as follows:

## 32.3 Future Value of Annuity

Let’s make things a bit more interesting. Suppose that each year you decide to save $200, and deposit this amount into an account at the end of the year. Assuming that this account has a 5% rate of return, how much money will you get at the end of 10 years?

To answer this question, you can use a simplified version of the
**Future Value of Annuity** formula. Here are the ingredients:

- \(\text{C}\) = contribution (i.e. how much you deposit at the end of each year)
- \(r\) = annual rate of return
- \(t\) = time (in years)
- \(\text{FVA}\) = future value of annuity (i.e. what you’ll get)

\[ \text{FVA} = \text{C} \left [ \frac{(1 + r)^t - 1}{r} \right ] \]

For example, you begin saving \(\text{C} = \$200\) at the end of the first year. At the end of the second year, you will have:

\[ \$200 \left [ \frac{(1 + 0.05)^2 - 1}{0.05} \right ] = \$410 \]

At the end of 10 years your balance will be:

\[ \$200 \left [ \frac{(1 + 0.05)^{10} - 1}{0.05} \right ] = \$2515.579 \]

### 32.3.1 Function `annuity()`

Write a function `annuity()`

that computes the future value of annuity, taking
the following arguments

`contrib`

: contributed amount`rate`

: annual rate of return`years`

: number of years

You should be able to invoke `annuity()`

as follows:

## 32.4 Future Value of Growing Annuity

Let’s keep making things a little bit more complex. Suppose that, instead of saving a fixed amount of $200 each year, you expect to increase this amount by 3% each year, and deposit this amount into an account at the end of the year.

Assuming that this account has an annual rate of return of 5%, how much money will you get at the end of 10 years?

To answer this question, you can use a simplified version of the
**Future Value of Growing Annuity** formula. Here are the ingredients:

- \(\text{C}\) = first contribution (i.e. how much you deposit at the end of year 1)
- \(r\) = annual rate of return
- \(g\) = growth rate
- \(t\) = time (in years)
- \(\text{FVGA}\) = future value of growing annuity (i.e. what you’ll get)

\[ \text{FVGA} = \text{C} \left [ \frac{(1 + r)^t - (1 + g)^t}{r - g} \right ] \]

In this case, at the end of 10 years your balance will be:

\[ \$200 \left [ \frac{(1 + 0.05)^{10} - (1 + 0.03)^{10}}{0.05 - 0.03} \right ] = \$2849.782 \]

### 32.4.1 Function `growing_annuity()`

Write a function `growing_annuity()`

that computes the future value of growing
annuity, taking the following arguments

`contrib`

: contributed amount`rate`

: annual rate of return`growth`

: annual growth rate`years`

: number of years

You should be able to invoke `growing_annuity()`

as follows:

## 32.5 Investing Modalities

In this part of the assignment we’ll consider three savings-investing modes:

future value of $1000 (no annuity)

future value of $1000 with $200 annuity

future value of $1000 with $200 growing annuity

**In mode 1**, you invest $1000—at the beginning of the year—at an annual
rate of return of 5%, during 10 years (without any other annual contribution).

\[ \text{FV}(\$1000) = \$1628.895 \]

**In mode 2**, you begin with an initial investment of $1000—at the beginning
of the year—at an annual rate of return of 5%, but you also decide to
contribute a fixed amount of $200 at the end of every year. Assume an
investment period of 10 years.

*Hint*: it can be shown that at the end of ten years your balance will be:

\[ \text{FV}(\$1000) + \text{FVA}(\$200) = \$1628.895 + \$2515.579 = \$4144.474 \]

**In mode 3**, you begin with an initial investment of $1000—at the beginning
of the year—at an annual rate of return of 5%, but you also decide to
contribute a growing amount of $200 at the end of every year, growing at 3%
every year. Assume an investment period of 10 years.

*Hint*: it can be shown that at the end of ten years your balance will be:

\[ \text{FV}(\$1000) + \text{FVGA}(\$200) = \$1628.895 + \$2849.782 = \$4478.677 \]

### 32.5.1 For-loop and Table

Write one or more `for()`

loops to compute the annual balances of each
savings-investing modality. You can use any type of objects (vectors, matrices,
lists, data.frames, etc) to store the values of these balances.

The ultimate goal is to create a data frame called `modalities`

, containing the
annual balances in each modality (see diagram below). And display your data
frame `modalities`

.

**INSERT IMAGE (investing modalities)**

### 32.5.2 Timeline Graph

With the data obtained for each savings modality, make one graph, with lines as geometric objects, that allows you to compare the growth of these investment modes over the 10-year period.

Make sure your graph follows standard recommendations: title, axis labels, axis scales, background, legends, colors, visual attributes, etc.

## 32.6 Savings Simulation

The last part of this assignment involves a simple simulation taking into account different financial products, with “typical” rates of return.

In this simulation we’ll consider three financial products available to most consumers: a) regular savings accounts, b) high-yield savings accounts, and c) index mutual funds.

**Regular Savings Accounts**: these are the*traditional*savings accounts offered by most banks. For illustration purposes, here’s some of the annual rate of returns offered in this type of accounts (as of 03/07/2019):- Chase Savings = 0.01%
- Wells Fargo Savings = 0.01%
- Bank of America Savings = 0.03%
- Citibank Savings = 0.15%

**High Yield Savings Accounts**: these have to do with*less traditional*savings accounts offered by most online banks. For illustration purposes, here’s some of the annual rate of returns offered in this type of accounts:- Marcus by GS: 2.25%
- Synchrony Bank: 2.25%
- Ally Bank: 2.20%
- Capital One: 2.00%

**Low Cost Index Mutual Funds**: an alternative investment product has to do with mutual funds. We will take into account a specific type of mutual fund: low-cost index funds that track the US stock market. For illustration purposes, here’s the average annual rate of returns offered by the following funds (since their inception date):- Vanguard Total Stock Market Index Fund (VTSAX): 6.62%
- Fidelity Total Market Index Fund (FSKAX): 6.91%
- Schwab Total Stock Market Index Fund (SWTSX): 5.87%

### 32.6.1 Simulation Variables

In order to carry out the simulations, use the following specifications:

- Initial investment amount of $10,000
- Investment period of 15 years

Three savings-investment modalities previously considered:

- future value with no other annual contributions.
- future value with fixed annual contributions (annuity) of $2,000 at the end of every year.
- future value with annual growing contributions at 4% (growing annuity), starting with $2000 at the end of year 1.

Likewise, we will assume the following rates of return:

- regular savings: 0.10%
- high-yield savings: 2.25%
- index fund: 6.5%

### 32.6.2 Foor Loops

Use `for()`

loops to compute the annual balances of each combination of savings-mode and financial product (see table below). In other words, you will have to perform a total of:
\(9 \text{ combinations}= (3\text{ modalities} \times 3 \text{ financial products})\).

**INSERT IMAGE (simulation combinations)**

### 32.6.3 Facet Timeline Graph

Make at least one faceted graph to display the timelines of the nine different savings scenarios (see a hypothetical example below; you can experiment with other versions). Likewise, make sure your graph follows standard recommendations: title, axis labels, axis scales, background, legends, colors, visual attributes, etc.