Dear R helpers
I have following csv file which is an input
id par_value coupon_rate frequency_coupon tenure ytm
1 1000 10 1
5 12
# Here frequency_coupon is coded s.t. 0 means Daily compounding, 1 means monthly
compouding, 2 means Quarterly, 3 means Half yearly and 4 means only once. Thus
in the case the frequency_coupon = 1 means, total number of times compounding is
done = 12.
My R Code for calcualting Macaulay Duration is as follows -
## INPUT
ONS = read.csv('instrument details..csv')
par_value = ONS$par_value
coupon = ONS$coupon_rate*par_value/100
freq_coupon = ONS$frequency_copoun
tenure = ONS$tenure
ytm = ONS$ytm
#
_________________________________________________________________________________________________
## COMPUTATIONS
macaulay_duration = NULL
modified_duration = NULL
freq_coupon_new = NULL
if(freq_coupon <= 0)
{
freq_coupon_new = 365
}
if(freq_coupon > 0 & freq_coupon <= 1)
{
freq_coupon_new = 12
}
if(freq_coupon > 1 & freq_coupon <= 2)
{
freq_coupon_new = 4
}
if(freq_coupon > 2 & freq_coupon <= 3)
{
freq_coupon_new = 2
}
if(freq_coupon > 3 & freq_coupon <= 4)
{
freq_coupon_new = 1
}
## COMPUTATIONS
terms_coupon_payment = (seq(1/freq_coupon_new, tenure, by =
1/freq_coupon_new))*freq_coupon_new
coupon_amount = coupon/(freq_coupon_new)
cash_flow1 = rep(c(coupon_amount), (tenure*freq_coupon_new -
1))
cash_flow2 = par_value + coupon_amount
cash_flow = c(cash_flow1, cash_flow2)
ytm_effective = ((1+ytm/100)^(1/freq_coupon_new))-1
pv = NULL
for (i in 1:(tenure*freq_coupon_new))
{
pv[i] = cash_flow[i] / ((1+ytm_effective)^terms_coupon_payment[i])
}
macaulay_duration = sum(pv*terms_coupon_payment)/sum(pv)
modified_duration = macaulay_duration / (1+(ytm_effective)/freq_coupon_new)
macaulay_duration
modified_duration
## _____________________________________________________________________
# My PROBLEM
Here I am dealing with only one id i.e. only one record. However, if Instead of
one record, ahve say 20 records, how do I calculate the Macaulay Duration for
each of these 20 records. One option is to run this code 20 times *which I guess
will be foolish thing to do. Other method is to define above code as some
function and tehn run this function for each of these records, but I don't
underatnd how to write a function and thord option is to treat the input of
these 20 records in a matrix form, which I had tried unsuccessfully.
Please guide me as to how do I modify the R-code to calculate Mac duration for
each of tehse records and store tehm.
Regards
Madhavi Bhave
The INTERNET now has a personality. YOURS! See your Yahoo! Homepage.
[[alternative HTML version deleted]]