# fitSmoothingSpline

Fit smoothing spline to bond market data

## Class

`@IRFunctionCurve`

## Syntax

```CurveObj = IRFunctionCurve.fitSmoothingSpline(Type, Settle,Instruments, Lambdafun)
CurveObj = IRFunctionCurve.fitSmoothingSpline(Type, Settle,Instruments, Lambdafun, 'Parameter1', Value1, 'Parameter2',Value2, ...)
```

## Arguments

 Note:   You must have a license for Curve Fitting Toolbox™ software to use the `fitSmoothingSpline` method.
`Type`

Type of interest-rate curve for a bond: `Forward`, `Zero`, or `Discount`.

`Settle`

Scalar for the `Settle` date of the curve.

`Instruments`

`N`-by-`4` data matrix for `Instruments` where the first column is `Settle` date, the second column is `Maturity`, the third column is the clean price, and the fourth column is a `CouponRate` for the bond.

`Lambdafun`

Penalty function that takes as its input time and returns a penalty value. Use a function handle to support the penalty function. The function handle for the penalty function which takes one numeric input (time-to-maturity) and returns one numeric output (penalty to be applied to the curvature of the spline). For more information on defining a function handle, see the MATLAB® Programming Fundamentals documentation.

 Note:   The smoothing spline represents the forward curve. The spline is penalized for curvature by specifying a penalty function. This fit may only be done with a `FitType` of `DurationWeightedPrice`.
`Knots`

(Optional) Vector of knot locations (times-to-maturity); by default, knots is set to be a vector comprised of `0` and the time to maturity of all input instruments. The default is for the spline type to be cubic but you can specify any spline type by explicitly specifying the knots. User-defined knots can be specified using the following command, where`k` is the order: `augknt(knots,k)`.

`Compounding`

(Optional) Scalar that sets the compounding frequency per year for the `IRFunctionCurve` object:

• -1 =  Continuous compounding (default)

• 1 = Annual compounding

• 2 = Semiannual compounding

• 3 = Compounding three times per year

• 4 = Quarterly compounding

• 6 = Bimonthly compounding

• 12 = Monthly compounding

`Basis`

(Optional) Day-count basis of the interest-rate curve. A scalar of integers.

• 0 = actual/actual (default)

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (BMA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/actual (ISDA)

• 13 = BUS/252

## Instrument Parameters

For each bond `Instrument`, you can specify the following additional instrument parameters as parameter/value pairs. For example, `InstrumentBasis` distinguishes a bond instrument's `Basis` value from the curve's `Basis` value.

 `InstrumentPeriod` (Optional) Coupons per year of the bond. A vector of integers. Allowed values are 0, 1, 2 (default), 3, 4, 6, and 12. `InstrumentBasis` (Optional) Day-count basis of the bond. A vector of integers.0 = actual/actual (default)1 = 30/360 (SIA)2 = actual/3603 = actual/3654 = 30/360 (BMA)5 = 30/360 (ISDA)6 = 30/360 (European)7 = actual/365 (Japanese)8 = actual/actual (ICMA)9 = actual/360 (ICMA)10 = actual/365 (ICMA)11 = 30/360E (ICMA) 12 = actual/actual (ISDA)13 = BUS/252 For more information, see basis. `InstrumentEndMonthRule` (Optional) End-of-month rule. A vector. This rule applies only when `Maturity` is an end-of-month date for a month having 30 or fewer days. 0 = ignore rule, meaning that a bond's coupon payment date is always the same numerical day of the month. 1 = set rule on (default), meaning that a bond's coupon payment date is always the last actual day of the month. `InstrumentIssueDate` (Optional) Date when an instrument was issued. `InstrumentFirstCouponDate` (Optional) Date when a bond makes its first coupon payment; used when bond has an irregular first coupon period. When `FirstCouponDate` and `LastCouponDate` are both specified, `FirstCouponDate` takes precedence in determining the coupon payment structure. If you do not specify a `FirstCouponDate`, the cash flow payment dates are determined from other inputs. `InstrumentLastCouponDate` (Optional) Last coupon date of a bond before the maturity date; used when bond has an irregular last coupon period. In the absence of a specified `FirstCouponDate`, a specified `LastCouponDate` determines the coupon structure of the bond. The coupon structure of a bond is truncated at the `LastCouponDate`, regardless of where it falls, and is followed only by the bond's maturity cash flow date. If you do not specify a `LastCouponDate`, the cash flow payment dates are determined from other inputs. `InstrumentFace` (Optional) Face or par value. Default = 100.

 Note:   When using `Instrument` parameter/value pairs, you can specify simple interest for a bond by specifying the `InstrumentPeriod` value as `0`. If `InstrumentBasis` and `InstrumentPeriod` are not specified for a bond, the following default values are used: `Basis` is `0` (act/act) and `Period` is `2`.

## Description

```Fcurve = IRFunctionCurve.fitSmoothingSpline(Type, Settle, Instruments, Lambdafun, 'Parameter1', Value1, 'Parameter2', Value2, ...)``` fits a smoothing spline to market data for a bond. You must enter the optional arguments for `Basis`, `Compounding`, and `Knots` as parameter/value pairs.

## Examples

collapse all

### Use a Smoothing Spline Function to Fit Market Data For a Bond

This example shows how to use a smoothing spline function to fit market data for a bond.

```Settle = repmat(datenum('30-Apr-2008'),[6 1]); Maturity = [datenum('07-Mar-2009');datenum('07-Mar-2011');... datenum('07-Mar-2013');datenum('07-Sep-2016');... datenum('07-Mar-2025');datenum('07-Mar-2036')]; CleanPrice = [100.1;100.1;100.8;96.6;103.3;96.3]; CouponRate = [0.0400;0.0425;0.0450;0.0400;0.0500;0.0425]; Instruments = [Settle Maturity CleanPrice CouponRate]; PlottingPoints = datenum('07-Mar-2009'):180:datenum('07-Mar-2036'); Yield = bndyield(CleanPrice,CouponRate,Settle,Maturity); % use the AUGKNT function to construct the knots for a cubic spline at every 5 years CustomKnots = augknt(0:5:30,4); SmoothingModel = IRFunctionCurve.fitSmoothingSpline('Zero',datenum('30-Apr-2008'),... Instruments,@(t) 1000,'knots', CustomKnots); % create the plot plot(PlottingPoints, getParYields(SmoothingModel, PlottingPoints),'b') hold on scatter(Maturity,Yield,'black') datetick('x') ```

collapse all

### Algorithms

The term structure can be modeled with a spline — specifically, one way to model the term structure is by representing the forward curve with a cubic spline. To ensure that the spline is sufficiently smooth, a penalty is imposed relating to the curvature (second derivative) of the spline:

where the first term is the difference between the observed price P and the predicted price, $\stackrel{^}{P}$, (weighted by the bond's duration, D) summed over all bonds in our data set and the second term is the penalty term (where λ is a penalty function and f is the spline).

See [3], [4], [5] below.

There have been different proposals for the specification of the penalty function λ. One approach, advocated by [4], and currently used by the UK Debt Management Office, is a penalty function of the following form:

## References

[1] Nelson, C.R., Siegel, A.F., (1987), Parsimonious modelling of yield curves, Journal of Business, 60, pp 473-89.

[2] Svensson, L.E.O. (1994), Estimating and interpreting forward interest rates: Sweden 1992-4, International Monetary Fund, IMF Working Paper, 1994/114.

[3] Fisher, M., Nychka, D., Zervos, D. (1995), Fitting the term structure of interest rates with smoothing splines, Board of Governors of the Federal Reserve System, Federal Reserve Board Working Paper 95-1.

[4] Anderson, N., Sleath, J. (1999), New estimates of the UK real and nominal yield curves, Bank of England Quarterly Bulletin, November, pp 384–92.

[5] Waggoner, D. (1997), Spline Methods for Extracting Interest Rate Curves from Coupon Bond Prices, Federal Reserve Board Working Paper 97–10.

[6] Zero-coupon yield curves: technical documentation, BIS Papers No. 25, October 2005.

[7] Bolder, D.J., Gusba,S (2002), Exponentials, Polynomials, and Fourier Series: More Yield Curve Modelling at the Bank of Canada, Working Papers 02–29, Bank of Canada.

[8] Bolder, D.J., Streliski, D (1999), Yield Curve Modelling at the Bank of Canada, Technical Reports 84, Bank of Canada.