nss

语法

nss(maturity, yield, [method='nm'], [maxIter], [bounds], [initialGuess], [seed])

详情

使用 NSS 模型和指定的优化方法,拟合债券的收益率曲线。

参数

maturity 值大于等于 0 的数值型向量,表示历史债券的到期时间,单位是年。

yield maturity 等长的数值型向量,表示历史债券的收益率。

method 可选参数,字符串类型,表示在拟合过程中使用的最优化算法,可选值为:

  • “nm“:表示使用 Nelder-Mead 单纯形算法,默认值;

  • “bfgs“:表示使用 bfgs 算法;

  • “lbfgs“ :表示使用 lbfgs 算法;

  • 'slsqp':表示顺序最小二乘编程方法(SLSQP)算法;

  • 'de':表示差分进化(Differential Evolution)算法。

maxIter 可选参数,整型标量或向量,表示拟合过程中优化算法的最大迭代次数。

bounds 可选参数,数值类型矩阵,形状为(N,2),其中 N 为需要优化的参数数量。每一行的两个值(min, max)定义了对应参数的边界。注意:bounds 参数只在 method取值'lbfgs'、'slsqp'或者'de'时生效。

initialGuess 可选参数,数值向量,表示使函数最优化的参数的初始猜测。长度为 6,每个值分别表示 β0, β1, β2, β3, λ0, λ1 的初始猜测,默认值为 [0.01, 0.01, 0.01, 0.01, 1.0, 1.0]。

seed 可选参数,整数标量,表示差分进化算法中使用的随机数种子,仅在 method='de' 时生效。若 method='de' 且不指定 seed,则采用非确定性的随机数生成器。seed 参数用于确保结果的可复现性。

返回值

返回一个字典,包含以下键值对:

  • modelName:字符串类型,表示模型名称;

  • params:数值向量,表示拟合后的模型参数。对于NS模型来说,长度为4,包含;对于NSS模型来说,长度为6,包含 。

  • fminResult:字典类型,表示 method 对应的最优化算法的优化结果,对于不同的 method,有不同输出。

    • “nm“:详情见 fmin 文档。

    • “bfgs“:详情见 fminBFGS 文档。

    • “lbfgs“:详情见 fminLBFGSB 文档。

    • “slsqp“:详情见 fminSLSQP 文档。

    • “de“:详情见 differentialEvolution 文档。

  • predict:模型的预测函数。其使用方法为 model.predict(T),T 表示需要预测的以年为单位的到期时间。

例子

传入指定的模型名称与参数,使用 bfgs 优化方法,拟合债券的收益率曲线。

maturity = [1,2,3,4,5,8,10,15,20,25,30]
yield = [0.0039,0.0061,NULL,NULL,0.0166,NULL,0.0258,NULL,NULL,0.0332,NULL]
model = nss(maturity, yield, method='bfgs');
model;

/*Output
modelName->nss
params->[0.036140551464406,-0.017389058792285,-0.039552798745696,-0.039554933812457,1.001838685848857,1.000930288743548]
fminResult->xopt->[0.036140551464406,-0.017389058792285,-0.039552798745696,-0.039554933812457,1.001838685848857,1.000930288743548]
fopt->0.000003185056025
gopt->[4.415407204305666E-7,8.382398277717584E-7,-2.683916591195157E-7,-4.651950860079524E-7,-0.000008569511408,-0.000008564345961]
iterations->10
Hinv->#0                 #1                 #2                 #3                 #4                 #5                
------------------ ------------------ ------------------ ------------------ ------------------ ------------------
0.492426526437359  0.696702464055202  -1.643864246164442 -1.644086017367336 0.08871259052824   0.037055616913674 
0.696702464055203  9.022078200827937  -9.027640937693616 -9.027654505585944 0.659730122918773  0.302144825834614 
-1.643864246164441 -9.027640937693616 12.179963755936533 11.180865226841653 -0.737531568671335 -0.323934330889313
-1.644086017367337 -9.027654505585944 11.180865226841657 12.181767428775573 -0.737537584440894 -0.32392102429678 
0.08871259052824   0.659730122918772  -0.737531568671335 -0.737537584440894 1.053013492023418  0.024560701245749 
0.037055616913674  0.302144825834614  -0.323934330889313 -0.32392102429678  0.024560701245749  1.011692492570688 

warnFlag->0
fcalls->84
gcalls->12

predict->nssPredict
*/
若更换优化算法为 nm,返回值将发生变化。
model = ns(maturity, yield, method='nm');
model;
/*Output
modelName->nss
params->[0.038184469794996,-0.048575389082029,-0.022287414169806,0.047523360012739,1.873046195772644,0.161159907274023]
fminResult->xopt->[0.038184469794996,-0.048575389082029,-0.022287414169806,0.047523360012739,1.873046195772644,0.161159907274023]
fopt->5.456415848001168E-9
iterations->541
fcalls->860
warnFlag->0

predict->nssPredict
*/

相关函数:nsspredict