NS模型拟合债券利差

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
import seaborn as sns
import pandas as pd
data=pd.read_excel('C:/Users/LJZYOU/Desktop/debt.xls')
data=pd.DataFrame(data)
sns.set(color_codes=True)
grouped = data.groupby(data["time"])
df1=pd.DataFrame(index=["beta1","beta2","beta3"])
for i in grouped:
    df=pd.DataFrame()
    a= i[1]['Yeartomatu'].to_numpy()
    b= i[1]['Yield'].to_numpy()
    λ=1.37
    def sigmoid(a,β1, β2,β3):
        y = β1+β2*(1- (np.e)**(-1/λ*a))/λ*a+β3*((1- (np.e)**(-1/λ*a))/λ*a-(np.e)**(-a/λ))
        return y
    β1 = 0.10
    β2 = -0.017766
    β3 = 0.135737
    λ=1.37
    #nonlinear regress function
    popt, pcov = curve_fit(sigmoid,a,b,maxfev=1000)    
    df=pd.DataFrame(popt,index = ["beta1","beta2","beta3"],columns=[i[0]])
    df1=pd.concat([df1,df],axis=1)
df2=df1.reset_index()
df3=df2.T
df4 = df3.reset_index()

df4.to_csv("tzzs_data2.csv", index_label="index_label")


outputpath='C:/PYTHON/fenci.csv'
df4.to_csv(outputpath,sep=',',index=True,header=False)

用Nelson siegel建模,用curve fit的非线性最小二乘法来拟合债券利差,数据选取自国泰安国债数据库,最终拟合出各时间点的beta1,beta2,beta3三个参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值