参数估计_随机微分方程的参数估计(一)
隨機微分方程,俗稱SDE,相信點進來的同學們肯定對這個概念不感到陌生。SDE呢,是對現實生活中一些隨機波動的事物的建模,比如可以用幾何布朗運動(GBM)來模擬股價變化,用CIR模型來模擬利率波動。
然而一個很現實的問題就是,如何對SDE進行參數估計?就是,對于一個給定的含有參數的SDE,給出一些軌道,然后想要估計出參數的值來。比如已知一只股票的歷史價格數據,假定它服從GBM,怎么近似求出它的期望收益率
和波動率 呢?知乎上還沒有人專門討論過這個問題,最近看了幾篇這個主題的論文,所以我來拋磚引玉了。
問題的標準形式
對于含參的擴散方程:
設
是擴散過程的初值, 是標準布朗運動, 是待估計的參數。漂移項 和擴散項 函數已知;參數向量 ,其中參數空間 是緊集。為保證解的唯一性,進一步還要求漂移函數和擴散函數是Lipschitz連續的。擴散問題參數估計的標準形式是:已知過程
的一系列觀察點 ,且 ,根據 的值,得到參數 的估計。擴散過程一定滿足馬爾科夫性,這給研究參數估計帶來了便利性。極大似然估計法
面對參數估計的問題自然就會想到極大似然法,在矩估計不好用的時候,極大似然估計是點估計比較好的選擇。
由于給出的觀測點都是離散的,設
是在給定 時刻的位置 和參數 的條件下的轉移概率密度函數,從而我們有似然函數:現在麻煩的事情是這個轉移概率密度怎么計算,有了它才能求似然解對不對!?
EML
事實上,轉移概率密度滿足如下PDE:
這個拋物PDE叫做Fokker-Planck方程,證起來比較麻煩。這個方程可是在物理學有廣泛的應用的。(你看大名鼎鼎的 Planck 普朗克)
這么看,對于某些特殊的SDE,是可以從理論上求出轉移密度的解析解的,繼而可以精確求解極大似然函數。比如說對于CIR過程就是可以寫出解析形式的轉移概率密度。但是對于大多數SDE,根本沒有辦法解得這樣一個復雜的PDE的解析解,但是退一步,可以數值求解該PDE,或者求出一個近似的解析解來代替真正的解。硬剛一個PDE確確實實可以解決咱們的問題,在一些論文里邊,這種方法叫做EML(exact maximum likelihood)。
但是硬剛PDE這種方法不好操作啊,理論艱深,操作困難,關鍵是咱學不會。那有沒有容易一點的方法?
DML
回憶一下SDE的兩種模擬方法:
- Euler-Maruyama方法:
- Milstein方法:
其中
是標準正態分布。當擴散項 是常數的時候,這兩種方法是一樣的。這兩種方法其實都是對SDE在一個區間上的離散近似,借助這種近似(Euler方法),我們可以認為,從
到 轉移概率密度是均值為 ,方差 的正態分布密度函數,這里 ,也就是:看樣子問題已經有點眉目了,現在我們可以把這個轉移概率密度代入到似然函數去求解似然方程啦!
這種方法借助SDE模擬的離散形式近似估計轉移概率密度,因此稱作DML(discret maximum likelihood)。
下面以CIR模型來說明一下如何用DML來進行估計和DML方法的效果,代碼全部是用MATLAB寫的。
一個生動的參數估計的例子
CIR模型:
這里面有三個參數,
和 。記 ,通過解上面提到的似然方程可以得到三個參數應該滿足的方程為:一般來說,先通過第二、三個方程組得到
和 的估計量再代入到第一個式子得到 的估計。總而言之,給到咱們一條軌道數據就可以求出相應參數的估計值!!!我們用MATLAB自帶的函數來生成軌道,MATLAB對CIR模型還是有一定的支持的:
model = cir(2, 1, 0.5, 'StartState', 1); [X, T] = model.simByEuler(100,'DeltaTime',0.01);以上第一行代碼創建了一個cir類,三個參數分別是2, 1, 0.5并且起始點是1。第二行調用了這個類的simByEuler方法,以0.01s為時間間隔得到100個點,等于我們得到了一條[0,1]上以0.01為時間間隔的軌道!
接下來我寫了一個用DML方法給定一條軌道求CIR模型參數估計的函數:
% DML.m function [alpha, beta, sigma] = DML(X, T) % 使用DML方法根據采樣時間 T 和 位置 X 來估計 CIR 模型的三個參數% 別看這里符號亂,其實就是解上面那個方程組,你自己也可以寫一個 d = diff(T); A = sum(d); B = sum(X(1: end-1) .* d); C = X(end) - X(1); D = sum(d ./ X(1: end-1)); E = sum(diff(X) ./ X(1: end-1));beta = (B - C / E * A) / (A - C / E * D); alpha = E / (beta * D - A);sigma = sqrt( mean( (...(diff(X) - alpha * (beta - X(1: end-1)) .* d ) .^ 2 ./ (X(1: end-1) .* d)))); endok,三個參數的真實值還是取為2, 1, 0.5,我們用上面的那個cir類來模擬200條軌道,然后對結果求平均數:
DML_a = []; % alpha DML_b = []; % beta DML_s = []; % sigma for i = 1 : 200[X, T] = model.simByEuler(100,'DeltaTime',0.01);[alpha, beta, sigma] = DML(X, T);DML_a = [DML_a alpha];DML_b = [DML_b beta];DML_s = [DML_s sigma]; end200條軌道得到了200個參數的估計值,其結果的分布如圖:
一開始看到這個結果我以為我代碼敲錯了,因為
的估計有不小的偏差,其真實值只有2,但是估計出來的結果很明顯不是以2為中心的,但是 和 的求解都需要依賴 ,而后面這兩個參數估計的效果還是不錯的,尤其是 ,可以看到它的方差還很小。DML估計法其實是個有偏估計,從上面的
是可以看出一點端倪的。Conclusion
本文提出了一般形式的隨機微分方程的參數估計問題,對于其參數的極大似然估計方法提出了EML和DML兩種思路,并針對比較好實現的DML方法給出了CIR模型參數估計的代碼和示例。
接下來一篇文章我會分析DML方法的不足之處,并介紹一些能夠改進DML方法的思路。
總結
以上是生活随笔為你收集整理的参数估计_随机微分方程的参数估计(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器虚拟化相关技术介绍,虚拟化技术介绍
- 下一篇: NSString 字符串 操作 常用