2017-06-21 217 views
7

最近我一直在嘗試將大量的隨機效應模型適用於相對較大的數據集。假設在多達25個時間點觀察約50,000人(或更多)。有了這麼大的樣本量,我們包含了很多我們正在調整的預測因子 - 可能有50個左右的固定效應。我使用R中的lme4::glmer來擬合二元結果的模型,併爲每個主題隨機截取。我不能進入具體的數據,但是我用了glmer命令的基本格式是:lme4 :: glmer與Stata的melogit命令

fit <- glmer(outcome ~ treatment + study_quarter + dd_quarter + (1|id), 
       family = "binomial", data = dat) 

其中兩個study_quarterdd_quarter與各約20個級別的因素。

當我嘗試在R中適合這個模型時,它運行了大約12-15個小時,並返回了一個無法收斂的錯誤。我做了一些故障排除(例如,遵循these準則),沒有任何改進。並且收斂甚至沒有結束(最大梯度在5-10左右,而我認爲收斂標準是0.001)。

然後我嘗試使用melogit命令在Stata中擬合模型。該模型適合在2分鐘內,沒有收斂問題。相應的Stata命令是

melogit outcome treatment i.study_quarter i.dd_quarter || id: 

是什麼給出的? Stata是否具有更好的擬合算法,還是更適合大型模型和大型數據集?真正令人驚訝的是運行時間有多不同。

+0

[這裏](https://www.statalist.org/forums/forum/general-stata-discussion/general/1371838-gsem-not-estimating)就是相反情況的一個例子--R很快就會處理完全相同的SEM模型無法在Stata中進行估計。 – radek

+0

我不確定,但它可能是glome中的二項式系列的默認選項是probit而不是logit?也許你可以添加'family = binomial(link =「logit」)'然後嘗試一下嗎? – eborbath

+0

@radek - 感謝您的分享,但我專指混合效果建模,而不是SEM。我知道有很多情況下R「擊敗」Stata。 –

回答

6

glmer配合可能會隨着可選參數nAGQ=0L快得多。您有許多固定效應參數(對於study_quarterdd_quarter中的每一個產生總共28個對比度的20個級別),並且默認優化方法(對應於nAGQ=1L)將所有這些係數放入一般非線性優化調用中。利用nAGQ=0L這些係數在快得多的懲罰迭代重新加權最小二乘(PIRLS)算法內被優化。默認值通常會提供更好的估計值,因爲估計值的偏差較低,但差異通常很小,時間差異很大。

我有一個Jupyter筆記本nAGQ.ipynb在這些算法的差異寫作。該寫法使用而不是lme4MixedModels包,但方法相似。 (我是lme4的作者之一,也是MixedModels的作者。)

如果你打算做很多GLMM的話,我會考慮在JuliaMixedModels這樣做。它通常比R快得多,即使在lme4中有所有複雜的代碼。

+1

我試着將'nAGQ'設置爲0,模型約5分鐘,沒有收斂問題。還是比Stata慢一點,但比可以接受的多。 –

+0

如果'lmer'首先用PIRLS(對應於'nAGQ = 0')擬合模型來獲得更好的起始值,然後用拉普拉斯對模型進行細化,那麼我想知道具有默認'nAGQ = 1L'的模型會更快收斂近似('nAGQ = 1')?也許這已經在內部完成了,但是如果是這樣的話,我感到驚訝的是,在15小時的運行時間之後,模型完全沒有收斂(最大梯度在5-10左右)。 –

+0

初始'nAGQ = 0L'擬合用於創建'nAGQ = 1L'的開始估計值。它可以幫助一些人,但不會像預期的那樣多。問題是在非線性優化程序中要優化的參數數量。您也可以嘗試將優化器更改爲'nloptr'包中的'NLOPT_LN_BOBYQA'。 –

0

你確定Stata正在讀取整個文件嗎?

http://www.stata.com/manuals13/rlimits.pdf

我之所以這樣問,是因爲它聽起來好像你有50k的人觀察到的25倍(1,250,000行);取決於你使用的Stata版本,你可能會得到截斷的結果。

編輯 既然它不是文件長度問題你有沒有試過其他的軟件包,像nlme混合效果?我懷疑非線性混合效應模型會讓你的數據更快一些。

編輯 這個資源可能比對不同型號的東西更有幫助:https://stats.stackexchange.com/questions/173813/r-mixed-models-lme-lmer-or-both-which-one-is-relevant-for-my-data-and-why

+0

源是2個版本過期。 Stata 15文檔在http://www.stata.com/manuals/rlimits.pdf無論哪種方式,在任何嚴重的Stata中,100萬條觀察結果(您所用的行)本身都不是問題。 –

+0

我還沒有嘗試nlme,我同意它值得一試。但我懷疑「稍快」是15小時(沒有收斂)和2分鐘(收斂)之間的差異。由於作者的重疊,我認爲擬合算法會有很多共同點,但這只是一個假設。 –

+0

爲了確認@NickCox說了什麼,模型輸出表示它正在使用數據集中的所有觀察值,所以我不認爲這是一個問題。 –