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
*/
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