當前位置:
首頁 > 最新 > Sargent數量經濟學:SciPy

Sargent數量經濟學:SciPy

SciPy

SciPy(https://www.scipy.org/)包構建在NumPy基礎上,為科學計算提供了一些常用的工具,例如

線性代數

數值積分

插值

最優化

分布與隨機數生成

信號處理

等等

與NumPy一樣,SciPy也很穩定、成熟,並且被廣泛使用

許多SciPy程式都是對行業版Fortran軟體的再包裝,例如LAPACK,BLAS等等

你們並不需要學習整個SciPy

更加常見的方式是了解SciPy有什麼功能,然後看看其說明文件(https://docs.scipy.org/doc/scipy/reference/index.html)

在本講中,我們只強調該包中一些有用的部分

SciPyversusNumPy

SciPy是一個包含許多構建於NumPy基礎上的工具包,使用其數組數據類型和相關的函數

事實上,當我們輸入SciPy時,我們也得到了NumPy,被當作來自於SciPy初始化文件

然而,更常見、更好的方式是直接使用NumPy的函數

SciPy中有用的東西是其子包中的函數

scipy.optimize,scipy.integrate,scipy.stats, etc.

這些子包和他們的屬性需要單獨輸入

下面,我們看看一些主要的子包

Statistics

scipy.stats子包提供

大量的隨機變數對象(密度、積累分布、隨機抽樣,等等)

一些估計程序

一些統計檢驗

隨機變數和分布

回一下numpy.random提供的產生隨機變數的函數

這會從下列分布中產生一幅圖,其參數a,b=5,5

有時,我們需要得到密度,或CDF,分位點等

為了實現它,我們用scipy.stats,其提供了所有函數與隨機數生成的功能

例如

產生的圖如下

在這行代碼中,我們創建了一個所謂的rv_frozen對象,通過調用q=beta(5,5)

概念的「frozen」部分意味著q代表一個特殊分布,且有一些特別的參數

一旦我們這麼做,我們就能產生隨機數,得到密度等等,所有的都來自於該固定分布

創建這些對象的一般命令是

其中,distribution_name是scipy.stats(https://docs.scipy.org/doc/scipy/reference/stats.html)中的一個分布名

其中,有兩個關鍵的元素loc和scale,

這個命令把原始隨機變數X轉換成Y=c+dX

在結束這個部分之前,我們注意到調用上述方法,還有一種備擇方式

例如,下面的代碼替換上述代碼

Scipy.stats里的其它好玩意

在scipy.stats里,還有許多統計功能

欲知詳情,請參考說明文件(https://docs.scipy.org/doc/scipy/reference/stats.html#statistical-functions)

尋根與不動點

一個實函數在[a,b]上的根,即f(x)=0

例如,如果我們划出函數的圖

其中,x屬於[0,1],我們得到

唯一的根近似0.408

下面,我們來試試尋根的數值技術

二分法

最常用的數值尋根演算法就是二分法

為了理解其演算法,回憶一個著名的遊戲,其中

參與人A在1-100之間秘密想一個數字

參與人B問該數字是否小於50

如果小於,B就問是否小於25

如果不小於,B就問是否小於75

等等

這就是二分法

該演算法在Python中實施非常簡單

事實上,SciPy提供了自帶的二分法函數,下面我們就來使用一下公式(2)中定義的f

Newton-Raphson方法

另一種常用的尋根演算法是Newton-Raphson method(https://en.wikipedia.org/wiki/Newton%27s_method)

不像二分法,NR方法用局部斜率信息

該方法是一把雙刃劍:

當函數是well-behaved,NR方法就比二分法快

當函數不是,NR法可能就不靈了

我們用相同的函數來說明這個問題,首先看看潛在的不穩定性

第二個初始條件導致收斂失敗

另一方面,用Ipython的timeit,我們可以看見newton更快

混合法

迄今為止,我們已經發行NR法快,但不穩定

二分法穩健,但相對較慢

這說明一般性原理:

如果你關於你的函數有特殊的認識,你能有效地解出它

如果沒有,那麼,演算法選擇就要在收斂速度和穩健性之間做出取捨

從實踐來看,大部分默認的尋根、最優化和不動點演算法就是使用混合方法

這些方法以下列方式將速度和穩健性結合起來:

1、嘗試用快的方法

2、進行診斷

3、如果診斷結果不好,那麼,就轉向利用穩健的演算法

在scipy.optimize,函數brentq就是混合方法

這也能找到正確的根,速度幾乎與newton法相同

多元尋根

更多細節,參見說明文件(https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html)

不動點

SciPy也提供解不動點問題的函數

最優化

大多數數值包僅僅只剔紅最小化函數

最大化能通過把函數前面加負來轉換

最小化接近於尋根問題:對於平滑函數,內點最優對應著一階導數的尋根

上面所描述的速度/穩健性取捨現在就存在於數值最優化

除非你有一些先驗信息,最好的方式就是使用混合方法

對於約束單變數最小化,一種好的混合選項就是fminbound

多變數最優化

多變數局部最優化包括minimize,fmin,fmin_powell,fmin_cg,fmin_bfgs,和fmin_ncg

約束多變數局部最優化包括fmin_l_bfgs_b,fmin_tnc,fmin_cobyla

更多細節可參見說明文件(https://docs.scipy.org/doc/scipy/reference/optimize.html)

積分

大部分數值積分方法都是依靠計算一個近似多項式的積分

誤差依賴於多項式擬合積分的程度有多高

在SciPy中,數值積分的相關模塊是scipy.integrate

單變數積分的命令是quad

實際上,quad是一個Fortran包QUADPACK中標準數值積分的埠

它用Clenshaw-Curtis求積(https://en.wikipedia.org/wiki/Clenshaw-Curtis_quadrature),基於切比雪夫多項式展開

其它的單變數積分方法有fixed_quad,它運行很快,且在for循環中

還有許多多變數積分函數

詳細信息可參見https://docs.scipy.org/doc/scipy/reference/linalg.html

線性代數

NumPy為線性代數所提供的模塊稱為linalg

SciPy為線性代數提供的模塊也有相同的名字

更多細節可參見https://docs.scipy.org/doc/scipy/reference/linalg.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 宏觀經濟研學會 的精彩文章:

Sargent的量化經濟學(9):NumPy

TAG:宏觀經濟研學會 |

您可能感興趣

Princeton Makes,Stockholm Takes-諾貝爾經濟學獎得主好書精選
歧視經濟學,Discrimination bad?
Esther Kinsky muses on a river in England 經濟學人.Jan18th2018
經濟學人翻譯練習 The Economist
經濟學人精讀 The Economist62上
上海紐約大學NYU商學和經濟學客座教授廖明確認出席 Morketing Brand Summit 2019品牌高峰會
經濟學法則?!Marvel 迷挑戰 24 小時內觀看《Avengers: Endgame》五次
The digital proletariat 經濟學人.Jan 12th 2018
從Token經濟學看PoS共識機制
第一課 Jose Galvez 與性別經濟學
諾貝爾經濟學獎得主Robert Shiller:比特幣是一場流行潮
經濟學家Tuur Demeester:區塊鏈是具有里程碑意義的發明
Open Source 101:開源經濟學原理
金融時報|經濟學人 詞伙素材|Microsoft
比特幣經濟學家Jeffrey Wernick:投資於人 並讓每個人意識到自身價值
Ultrain Nova新星重磅發布並與經濟學家金刻羽正式簽約
抵押獲得穩定資產收益?深入探討 Horuspay的Token 經濟學
諾貝爾經濟學獎得主James J.Heckman:要藉助AI的力量更好地培養中國的孩子們
以太坊核心開發者Karl Floersch:像黑客帝國那樣學習加密經濟學!
對抗詐騙的新武器?Vitalik Buterin提出加密經濟學提案懲罰虛假信息