Fair Interest Rates

Consider a single period model in which an opportunity, X \in (\alpha,\beta) , has a random pay-off determined by a known distribution function, as discussed in Modelling Investment Opportunities. We assume there is no time-value of money (the market does not pay a risk free interest rate). An entrepreneur wishes to fund the opportunity by taking out a loan \alpha<l\ll\beta , what interest rate should a lender demand for the loan?

Employing the concept of reciprocity we can calculate the interest rate by identifying the repayment amount l^* such that

l^*=\min\left\{x>l\;\big|\;\mathbb{E}\big[\min\{X,l^*\} \big]=l \right\}

Assuming X has a continuous distribution, we can identify l^* by looking for the solution of

\int_\alpha^{l^*} x\, p(x)\, dx + l^*\int_{l^*}^\beta p(x)\,dx =l,

where p(x) is the probability density of X. This is trivial to calculate employing Newton-Raphson and there is a unique solution such that l^*>l for l>\alpha. On this basis the simple interest rate in the single period model is given by

r = \frac{l^*-l}{l} .

What is not immediately obvious, but has emerged when simulating,  is that if X\sim\Gamma(k, \theta) then, for fixed l, r is invariant with respect to \theta, the scale parameter. Similarly, if X\sim \mathrm{LN}(\mu,\sigma) then, for fixed l, r is invariant to \mu, the scale parameter.

Questions

  1. Does this link to risk neutral pricing in a Black-Scholes world, where the discounted asset prices evolve log-normally with zero drift, i.e. \mu=0.
  2. Can these observations be proved to be true in general for distributions defined by shape/scale parameters?

The answer to the second question is possibly related to the fact that l satisfies the expression

\int_0^l p(x; k, \theta)\; dx=q \in (0,1).

The fact that the fair interest rate is invariant to scale parameters is interesting since the expected return is dependent on the scale.  Doing some simulations with the Gamma distribution and varying the parameter q delivers the following result

loan_cost5

This plot was produced using the following python code

import numpy as np
from scipy.integrate import quad
import scipy.stats as stats
from scipy.special import gammainc,  gammaincinv, gammaincc, gammainccinv, gamma
import matplotlib.pyplot as plt

#Define a function to calculate the fair value loan repayment
# k, theta are the distribition parameters for the project payoff
# L is the value of the loan requested
def loan_repayment(k,theta,L):
	
	# Defining function to integrate
	#f1 calculates the expected value if the project pays out less than x
	f1 = lambda u: u*stats.gamma.pdf(u,k, scale = theta)
	
	#initialise parameters
	diff=L
	x=L
	# Do Newton-Raphson
	while diff>L/100:
		I1, err = quad(f1, 0, x)
		I2 = gammaincc(k,x/theta)
		num= I1 + x*I2 - L
		x = x - num/I2
		diff=np.fabs(num/I2)
	return x
#
#Do the plot
#
#Set the variables/output, a bit clunky
theta=1.0
k_5=np.arange(0.2,10.1,0.2)	
k_10=np.arange(0.2,10.1,0.2)	
k_20=np.arange(0.2,10.1,0.2)	
k_40=np.arange(0.2,10.1,0.2)		

k_j=0.0
#Lookp over shape parameter, and calculate r for different q's
for j in range(len(k_5)):
		k_j=(j+1)*0.2
		L=theta*gammaincinv(k_j,0.05)
		Lr=loan_repayment(k_j,theta,L)
		k_5[j]=(Lr-L)/L
		L=theta*gammaincinv(k_j,0.1)
		Lr=loan_repayment(k_j,theta,L)
		k_10[j]=(Lr-L)/L
		L=theta*gammaincinv(k_j,0.2)
		Lr=loan_repayment(k_j,theta,L)
		k_20[j]=(Lr-L)/L	
		L=theta*gammaincinv(k_j,0.4)
		Lr=loan_repayment(k_j,theta,L)
		k_40[j]=(Lr-L)/L

#Set up the x-axis, a bit clunky	
x=np.arange(0.2,10.1,0.2)

#Do the plot
fig, ax = plt.subplots()
ax.plot(x, k_5, 'r-', label='$q=5\%$')
ax.plot(x, k_10, 'b-', label='$q=10\%$')
ax.plot(x, k_20, 'g-', label='$q=20\%$')
ax.plot(x, k_40, 'k-', label='$q=40\%$')
plt.xlabel('Shape $k$')
plt.ylabel('Fair interest rate')
plt.title(r'Fair interest rate, $\theta=1.0$, $q$ varies')

# Now add the legend with some customizations.
legend = ax.legend(loc='upper right')
for label in legend.get_texts():
    label.set_fontsize('large')

for label in legend.get_lines():
    label.set_linewidth(1.5)  # the legend line width
plt.show()
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s