搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  Pribor3M.rar
资料下载链接地址: https://bbs.pinggu.org/a-1827470.html
本附件包括:
  • Pribor3M.mat
附件大小:
本贴主要参考Kladıvko, K. (2007). Maximum likelihood estimation of the Cox-Ingersoll-Ross process: the Matlab implementation. Technical Computing Prague.

CIR 利率期限结构模型


\[d{{r}_{t}}=\alpha (\mu -{{r}_{t}})dt+\sqrt{{{r}_{t}}}\sigma d{{W}_{t}}\]



论文及数据集Pribor3M见附件:


  1. clc
  2. clear all
  3. close all

  4. load Pribor3M

  5. Model.Data = Pribor3M; %此处即是文中Model.Data
  6. Model.TimeStep = 1/250; % recommended: 1/250 for daily data, 1/12 for monthly data, etc
  7. Model.Disp = 'y'; % 'y' | 'n' (default: y)
  8. Model.MatlabDisp = 'iter'; % 'off'|'iter'|'notify'|'final' (default: off)
  9. Model.Method = 'besseli'; % 'besseli' | 'ncx2pdf' (default: besseli)

  10. Results = CIRestimation(Model);
  11. % 使用OLS估计alpha mu sigma
  12. Nobs = length(Model.Data);
  13. x = Model.Data(1:end-1);
  14. dx = diff(Model.Data);
  15. dx = dx./x.^0.5;
  16. regressors = [Model.TimeStep./x.^0.5, Model.TimeStep*x.^0.5];
  17. drift = regressors\dx;
  18. res = regressors*drift - dx;
  19. alpha = -drift(2);
  20. mu = -drift(1)/drift(2);
  21. sigma = sqrt(var(res, 1)/Model.TimeStep);
  22. InitialParams = [alpha mu sigma];
  23. if ~isfield(Model, 'Disp'), Model.Disp = 'y'; end;
  24. if strcmp(Model.Disp, 'y')
  25. fprintf('\n initial alpha = %+3.6f\n initial mu = %+3.6f\n initial sigma = %+3.6f\n', alpha, mu, sigma);
  26. end

  27. % Optimization using fminsearch优化过程
  28. if ~isfield(Model, 'MatlabDisp'), Model.MatlabDisp = 'off'; end;
  29. options = optimset('LargeScale', 'off', 'MaxIter', 300, 'MaxFunEvals', 300, 'Display', Model.MatlabDisp, 'TolFun', 1e-4, 'TolX', 1e-4, 'TolCon', 1e-4);
  30. if ~isfield(Model, 'Method'), Model.Method = 'besseli'; end;
  31. if strcmp(Model.Method, 'ncx2pdf')
  32. [Params, Fval, Exitflag] =fminsearch(@(Params) CIRobjective2(Params, Model), InitialParams, options);
  33. else
  34. [Params, Fval, Exitflag] =fminsearch(@(Params) CIRobjective1(Params, Model), InitialParams, options);
  35. end

  36. Results.Params = Params;
  37. Results.Fval = -Fval/Nobs;
  38. Results.Exitflag = Exitflag;

  39. if strcmp(Model.Disp, 'y')
  40. fprintf('\n alpha = %+3.6f\n mu = %+3.6f\n sigma = %+3.6f\n', Params(1), Params(2), Params(3));
  41. fprintf(' log-likelihood = %+3.6f\n', -Fval/Nobs);
  42. end
  43. %最大似然估计方法之一:贝塞尔函数
  44. Data = Model.Data;
  45. DataF = Data(2:end);
  46. DataL = Data(1:end-1);
  47. Nobs = length(Data);
  48. TimeStep = Model.TimeStep;
  49. alpha = Params(1);
  50. mu = Params(2);
  51. sigma = Params(3);

  52. c = 2*alpha/(sigma^2*(1-exp(-alpha*TimeStep)));
  53. q = 2*alpha*mu/sigma^2-1;
  54. u = c*exp(-alpha*TimeStep)*DataL;
  55. v = c*DataF;
  56. z = 2*sqrt(u.*v);
  57. bf = besseli(q,z,1);
  58. lnL= -(Nobs-1)*log(c) + sum(u + v - 0.5*q*log(v./u) - log(bf) - z);
  59. %最大似然估计之二:非中心卡方分布函数
  60. Data = Model.Data;
  61. DataF = Data(2:end);
  62. DataL = Data(1:end-1);
  63. TimeStep = Model.TimeStep;
  64. alpha = Params(1);
  65. mu = Params(2);
  66. sigma = Params(3);

  67. c = 2*alpha/(sigma^2*(1-exp(-alpha*TimeStep)));
  68. q = 2*alpha*mu/sigma^2-1;
  69. u = c*exp(-alpha*TimeStep)*DataL;
  70. v = c*DataF;
  71. nc = 2*u;
  72. df = 2*q+2;
  73. s = 2*v;

  74. gpdf = ncx2pdf(s, df, nc);
  75. ppdf = 2*c*gpdf;
  76. lnL = sum(-log(ppdf));
复制代码



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2026-1-19 18:47