我試圖按照示例 https://www.statsmodels.org/dev/examples/notebooks/generated/statespace_dfm_coincident.html在 Python 中使用 statsmodels 估計動態(tài)因子模型 但是我沒有使用示例數(shù)據(jù)集,而是使用了自己的數(shù)據(jù)集 282變量,有 124 個觀察值(不同國家的月通貨膨脹率)。然而,在運行代碼超過六個小時后,我沒有得到任何結(jié)果。嘗試使用不同數(shù)量的變量和不同的求解器,我得到了這些時間估計:Number of variables Initial params in seconds Model estimate in secondsPowell solver: 10 57,3 4,9 20 167,6 19,9 40 1498,8 137,8BFGS 10 9,1 6,3 20 89,2 18,5 40 597,5 138,2根據(jù)這些計算,時間正在增長 n^2*log(n),這意味著要使用 Powell 求解器計算所有 280 個變量的模型,我將需要大約 30 個小時,這太長了。BFGS 更快,但是對于 20 和 40 個變量,我發(fā)現(xiàn)似然優(yōu)化無法收斂。我在我的筆記本電腦(WIN10、32gb、i7-4700MQ、2.40GHz)上運行它,它看起來并沒有用完所有資源,只使用了大約 10gb 的內(nèi)存和大約 25-50% 的 CPU。所以問題是如何使 DFM 模型的估計更快并收斂?如果我在云上運行此代碼(比如 Amazone 或 Google,具有 32-64 個 CPU),多線程是否有助于提高速度,或者統(tǒng)計模型的并行性幾乎沒有改進?切換到 Matlab 或其他軟件進行此類計算是否有意義?scipy.optimize(如 krylov、broyden2 或 anderson)中有一些大型問題的求解器,但我不確定它們是否可以與 statsmodels.LikelihoodModel.fit 一起使用。我將非常感謝任何關(guān)于如何加快估算速度的想法!我運行的代碼: import statsmodels.api as sm import time # Create the model mod = sm.tsa.DynamicFactor(data_cpi, k_factors=3, factor_order=1, error_order=1) tic = time.perf_counter() initial_res = mod.fit(method='powell', disp=True) toc = time.perf_counter() print(f"Initial params in {toc - tic:0.4f} seconds") res = mod.fit(initial_res.params, disp=True) tic = time.perf_counter() print(f"Model estimate in {tic - toc:0.4f} seconds") print(res.summary(separate_params=False))
1 回答

動漫人物
TA貢獻1815條經(jīng)驗 獲得超10個贊
如果不需要參數(shù)的標(biāo)準(zhǔn)誤差,減少擬合時間的一種方法是傳遞cov_type='none'
給fit
方法。但它仍然會很慢。當(dāng)使用像 BFGS 這樣的擬牛頓方法,甚至像 Powell 這樣的無導(dǎo)數(shù)方法時,對具有大量變量的動態(tài)因子模型的參數(shù)進行數(shù)值優(yōu)化將非常緩慢。
大型動態(tài)因素模型通常通過使用 EM 算法優(yōu)化參數(shù)來實現(xiàn)。Statsmodels 在 v0.11 中沒有該選項,但它很可能會在 v0.12 版本中用于動態(tài)因子模型。
添加回答
舉報
0/150
提交
取消