知乎上有人問我如何看待Gretl,天了嚕我居然沒聽過這個東西!趕快去下載了一個試用一下壓壓驚。下面試用報告呈上。先說結論吧,Gretl這個東西還是很不錯的,特別是GMM、MLE等功能印象深刻。如果你的工作需要一些計量上的編程,比Stata的稍微複雜,但是又沒有那麼複雜,還是強烈建議關注一下的,非常容易上手。比如最經典的CCAPM的GMM估計,14行程序就搞定了,
我在ubuntu上試了一下,可以直接apt-get install gretl安裝,略驚訝,要知道julia 都沒這個待遇。上手試了一下,very impressive。
我們先來看一下這個軟體的介紹:
Easy intuitive interface (now in French, Italian, Spanish, Polish, German, Basque, Catalan, Galician, Portuguese, Russian, Turkish, Czech, Traditional Chinese, Albanian, Bulgarian, Greek, Japanese and Romanian as well as English)
A wide variety of estimators: least squares, maximum likelihood, GMM; single-equation and system methods
Time series methods: ARIMA, a wide variety of univariate GARCH-type models, VARs and VECMs (including structural VARs), unit-root and cointegration tests, Kalman filter, etc.
Limited dependent variables: logit, probit, tobit, sample selection, interval regression, models for count and duration data, etc.
Panel-data estimators, including instrumental variables, probit and GMM-based dynamic panel models
Output models as LaTeX files, in tabular or equation format
Integrated powerful scripting language (known as hansl), with a wide range of programming tools and matrix operations
GUI controller for fine-tuning Gnuplot graphs
An expanding range of contributed function packages, written in hansl
Facilities for easy exchange of data and results with GNU R, GNU Octave, Python, Ox and Stata
幾個亮點:
有圖形界面
在時間序列數據、橫截面數據以及面板數據上,似乎沒有短板
可以生成latex文件
可以畫圖
可以讀取stata、spss、Eviews、SAS等多種軟體的數據
開源
迫不及待的我馬上去下載了,並且試用了一下,簡單的說,很有潛力,但是問題不小。
首先我們來看一下圖形界面。這玩意長這樣:
可以說,是非常……醜的!
當然,要看跟誰比,跟stata這種商業軟體自然不能比,但是在GNU軟體裡面,有圖形界面就已經非常感謝這些無私的奉獻者了!
大體掃一下菜單欄,跟stata差不多,也是畫圖、統計量什麼的,看了一下,似乎功能還可以。
我們用例子來看看這傢伙的功能吧。軟體自動帶了一些數據集,比如Greene的數據集,還是挺厚道的。打開來看到的第一個就是研究動態面板的經典Arellano and Bond (1991)的數據集,就用這個試一下吧。
圖形截面跟Stata差不多,非常容易理解。點Ok,畢竟是用C寫出來的,沒眨眼就出結果了:
恩恩,看起來不錯的嗎!速度快,報告的統計量也比較全面,比如Sargan test, test for AR...都報告了。
那麼生成的latex怎麼樣呢?我又隨手做了一個工具變量回歸,生成latex,生產pdf,結果這貨做出來的是這樣:
奧。。我本來以為是跟outreg2報告出來的東西一樣呢,結果是這熊樣,還是得自己手動整理。。不過有就很不錯了。
另外,弱工具的檢驗,其實是有報告critical value的,但是不知道為什麼,latex沒導出來:
那麼數據方面呢?我隨手導入了一個stata數據,導入的過程中提示要不要聲明數據為時間序列數據或者面板數據,選擇是,面板數據,gretl自動識別除了id 和time變量,還挺方便的。而且stata的標籤也順帶導入了,對中文支持完全沒有問題:
另外,gretl裡面應該是沒有字符型數據的,所有的字符型數據自動轉化成1 2 3 4...這樣。另外,數據瀏覽器有點卡頓,雖然數據量不大。
那麼畫圖怎麼樣呢?我們來試一下:
略醜,弄弄的理工科風格,不過也難怪,GNUPlot畫出來的。其實在菜單操作中,我並沒有看到對畫圖太多的控制選項,所以畫圖功能實際上是比較弱的。
那麼編程能力怎麼樣呢?看到了上面有GMM,我現學現賣,寫了各GMM估計Box-Cox模型的簡單程序。這個程序比較變態在於,當其中的lambda=0/1的時候,numerical上的計算比較坑爹,我來看看這傢伙的表現。
程序還是很簡單的,如下:
# create an empty data setnulldata 1000# fix a random seedset seed 19880505#generate a gamma random variableseries x = randgen(G, 1,1)series x2=x^2#true parametersscalar lambda=0.5scalar beta=1scalar gamma=1#generate u and yseries u=randgen(N,0,0.7)series y = (lambda*(gamma+x*beta+u))^(1/(1-lambda))#series y=1+x*beta+u#create the weight matrix as the identity matrixmatrix W = I(3)#declare the series to be used in the orthogonality conditionsseries e = 0#initial guessscalar l=0.3scalar b=0.5scalar g=0smpl y>0 --restrictgmm series e=(y^(1-l)/l)-x*b-g #series e=y-x*b-l*x2-g orthog e; const orthog e; x orthog e; x2 weights W params l b gend gmm --iterate我先做了個蛋疼的GMM估計線性模型,當然完全沒有問題。然後換成Box-Cox模型,就出問題了。比如當我把初始點設置的比較靠近真值,l=0.6, b=0.8, g=0.8,那麼可以得到正確結果:
值得注意的有這麼幾點:
即便iterate算GMM,樣本量加到10000,點下滑鼠不到一秒鐘還是給出了結果,速度看來非常不錯。
自動給出了standard error,而我並沒有給出GMM目標函數的一階條件,非常方便。
從報告的結果上來看,猜測應該是使用了數值微分的BFGS算法,standard error肯定也是數值微分計算出來的。
當然,故事還沒有講完。如果我按照上面程序給出的初始值計算的話,得到的結果是。。。沒有結果,不收斂。如果把iterate去掉,直接的到了如下結果:
成功的陷入了Box-Cox變換的陷阱。
當然,以上的GMM估計Box-Cox回歸本來結果就很差,怪不得gretl。不過這裡還是提了個醒,global minimum的問題還是很嚴峻的。
gretl的手冊上提供了一個asset pricing的GMM實例,短短幾行程序,真的還是非常方便的。
另外就是報錯了。其實gretl程序的報錯還是很不錯的,只是中間程序寫的不好碰到了幾次閃退的情況,軟體的穩定性還有待加強。
既然是開源的,那麼最好的學習辦法當然是把源碼下載下來好好研究一下。這個任務就比較重了,不過從源碼的configure文件來看,線性代數方面是依賴於LAPACK的,而沒有找到關於最優化方面的包,猜測難道是手寫最優化?
我為什麼關心呢?因為我已經心動了,打算在自己能力範圍內,儘量為開源社區做點貢獻,特別是我們自己工作的研究領域和計量方法。
總結一下吧。
優點:
容易上手,有圖形界面,跟stata一樣容易入門。
有比較優美的語法,在語法上個人認為完爆stata。
速度很快。
開源。甚至可以考慮在大體看懂了源碼之後,寫Python/Julia/R/C的項目直接調用gretl的程序,省下了很多煩惱。
對截面、時序、面板數據的全方位支持,在這三方面的模型基本上已經能夠滿足日常需求。
缺點:
在界面美觀、圖的美觀程度方面需要繼續努力。
數據管理方面不如SAS、Stata。
導出的結果比較難看。
似乎沒有成熟的包管理器。比如Stata有ssc install,而至少現在gretl上沒發現,擴展性略差。
還不是很穩定。
個人感覺,如果能夠發展的好,解決上面的一些缺點,有朝一日替代Stata也不是沒有可能。
最後,僅僅是一問,有沒有志同道合的朋友,懂C又懂計量的,業餘時間可以一起為這個軟體貢獻點自己的力量。