軟體對照:同一個模型的各種程式寫法,以及疑難排解
本附錄內容各程式及其預設值;HSB 跨層級模型在每一種程式中的寫法,以及估計值的比較;Riesby 成長模型;核對不同程式的輸出;常見模型功能的語法對照;依訊息進行疑難排解。
各章以 R 配適模型,並以一個軟體對照方框作結,提供同一批模型在其他程式中的寫法。本附錄針對兩個模型更進一步:High School and Beyond 資料中含跨層級交互作用的隨機截距與斜率模型(第 6 章的模型 M3),以及 Riesby 資料的線性成長模型(第 19 章的模型 G1)。本附錄呈現每個模型在每一種程式中的寫法,比較各程式所得的估計值,說明為什麼看起來不同的輸出往往是相同的結果,最後提供一份指南,說明多層次軟體所印出的警告與錯誤訊息。R 的配適使用 lme4 (Bates et al., 2015)、lmerTest (Kuznetsova et al., 2017)、pbkrtest (Halekoh & Højsgaard, 2014)、nlme (Pinheiro & Bates, 2000)、glmmTMB (Brooks et al., 2017) 與 brms (Bürkner, 2017),另有一個以 statsmodels (Seabold & Perktold, 2010) 進行的 Python 配適;這些都是為本附錄實際執行的。其他程式的語法則沒有執行,因為製作本書的環境中沒有這些程式;這些語法是根據近期版本的說明文件撰寫的(SAS 9.4 的 SAS/STAT、IBM SPSS Statistics 29、Stata 18、Mplus 8 與 HLM 8),使用時應該對照手邊版本的輸出加以檢查。以專書篇幅介紹特定程式中之多層次模型的著作,包括 SAS 方面的 Singer (1998) 與 Littell et al. (2006)、涵蓋多種程式的 West et al. (2014),以及 Mplus User’s Guide (Muthén & Muthén, 1998--2017)。
E.1各程式及其預設值#
程式之間表面上的不一致,大多來自預設值,而不是來自不同的數學。表 E.1 針對每一種程式,列出預設的估計法、固定效果檢定的預設方法、隨機效果共變數矩陣的預設結構,以及 BIC 所用的樣本數。在兩種程式中以相同的估計法與相同的共變數結構配適同一個模型,應該能重現相同的估計值,直到小數點後好幾位;若不然,請檢查資料、平減方式與預測變項的編碼,接著檢查每一次配適是否都到達了概似的最大值(第 E.6 節)。
| 程式(程序) | 估計法 | 固定效果的檢定 | 隨機效果的共變數 | BIC 中的 |
|---|---|---|---|---|
R lme4(lmer)
| REML | ,不提供 ;以 lmerTest 得 Satterthwaite,以 pbkrtest 得 Kenward–Roger
| (1 + x | g) 時為無結構
| 觀察值數 |
R nlme(lme)
| REML | ,採 between-within 自由度 | 無結構(pdLogChol)
| 觀察值數(REML 下為 ) |
R glmmTMB
| ML | (1 + x | g) 時為無結構
| 觀察值數 | |
SAS(PROC MIXED)
| REML | ,採 containment 自由度 | 變異成分(TYPE=VC),除非指定 TYPE=UN
| 受試單位(subject)數 |
SPSS(MIXED)
| REML | ,採 Satterthwaite 自由度 | 變異成分(COVTYPE(VC)),除非指定 COVTYPE(UN)
| 觀察值數(REML 下為 ) |
Stata(mixed)
| ML | ;以 reml dfmethod() 取得小樣本自由度
| 獨立,除非指定 covariance(unstructured)
| 觀察值數 |
Mplus(TWOLEVEL RANDOM)
| MLR | 截距與斜率的共變數固定為零,除非以 WITH 釋放
| 觀察值數 | |
| HLM 8(HLM2) | REML | :隨機變動之第一層係數的第二層係數採 自由度;固定的第一層斜率採第一層自由度 | 無結構 | – |
| JASP(Mixed Models) | REML | Satterthwaite | 預設為相關,且納入所有可能的隨機斜率 | – |
| jamovi(GAMLj) | REML | Satterthwaite | 預設為相關 | – |
Python statsmodels(MixedLM)
| REML | re_formula 所設定者為無結構
| 觀察值數(僅限 ML 配適) | |
Julia MixedModels
| ML | 無結構 | 觀察值數 | |
MLwiN(另有 R2MLwiN)
| ML(IGLS) | 估計值(SE);可要求 Wald (R2MLwiN 中為 )
| 同一層次的隨機係數為無結構 | – |
註:預設值以本附錄開頭所列版本的說明文件為準;預設值會隨版本改變,應加以確認。估計法:REML = 限制最大概似估計,ML = 最大概似估計,MLR = 採穩健標準誤的最大概似估計。HLM: = 第二層單位數, = 該方程式中的第二層預測變項數。IGLS:迭代廣義最小平方法,對線性模型而言等同於 ML;其限制形式 RIGLS 等同於 REML;本附錄不呈現 MLwiN 的語法(第 26 章提到 MLwiN 及其 R 介面 R2MLwiN)。BIC 中的 :貝氏訊息準則之懲罰項 中的樣本數;:觀察值數減去固定效果數;– = 預設不報告。在 REML 下,SAS 與 SPSS 只把共變數參數計入 ;而且無論採用哪一種估計法,SAS 都不把估計值落在邊界上的共變數參數計入 (第 11 章)。
有三個預設值造成大部分的麻煩。第一,除非要求無結構矩陣,SAS 與 SPSS 會給隨機效果一個對角(變異成分)共變數矩陣;相對地,R 套件預設會估計隨機截距與隨機斜率的共變數,Stata 假定兩者獨立,Mplus 則把它們的共變數固定為零,除非以 WITH 釋放;因此,除非明確指定結構,含隨機斜率的模型在各程式之間並不相同。第二,Stata、glmmTMB、Mplus、Julia 與 MLwiN 預設以 ML 估計,而 lme4、nlme、SAS、SPSS、HLM、JASP、jamovi 與 statsmodels 則使用 REML;兩者的變異成分有系統性的差異(第 9 章)。第三,各程式以不同的方式檢定固定效果,從大樣本 檢定,到採 Satterthwaite 或 Kenward–Roger 自由度的 檢定都有(第 10 章),因此同一個估計值可能伴隨不同的 值。
E.2同一個模型的各種程式寫法:HSB 跨層級模型#
第 6 章的模型 M3 以組平減的 SES、SES 的學校平均數、公私立別(天主教學校),以及兩個跨層級交互作用來預測數學成就,並含可以共變的隨機截距與 SES 隨機斜率:
資料是附錄 C 的 HSB 合併檔,其中包含組平減的 SES(ses_cwc)與樣本學校平均數(meanses),因此每一種程式都使用相同的變項(160 所學校的 7,185 名學生)。下列語法在程式允許時,一律要求 REML 與無結構共變數矩陣。
R。 四個套件使用相同的模型公式,語法只有些微差異:
library(lme4); library(lmerTest) # lmerTest adds Satterthwaite df
m1 <- lmer(mathach ~ (meanses + catholic) * ses_cwc + (1 + ses_cwc | school),
data = hsb, REML = TRUE)
summary(m1) # summary(m1, ddf = "Kenward-Roger")
library(nlme)
m2 <- lme(mathach ~ (meanses + catholic) * ses_cwc, random = ~ ses_cwc | school,
data = hsb, method = "REML")
library(glmmTMB)
m3 <- glmmTMB(mathach ~ (meanses + catholic) * ses_cwc + (1 + ses_cwc | school),
data = hsb, REML = TRUE)
library(brms) # Bayesian, default priors (Chapter 13)
m4 <- brm(mathach ~ (meanses + catholic) * ses_cwc + (1 + ses_cwc | school),
data = hsb, seed = 20270001)| 參數 | lme4
| nlme
| glmmTMB
| statsmodels
| brms
|
|---|---|---|---|---|---|
| 截距 | 12.128 (0.199) | 12.128 (0.199) | 12.128 (0.199) | 12.128 (0.199) | 12.133 (0.204) |
| 平均 SES | 5.333 (0.369) | 5.333 (0.369) | 5.333 (0.369) | 5.333 (0.369) | 5.335 (0.379) |
| 天主教學校 | 1.227 (0.306) | 1.227 (0.306) | 1.227 (0.306) | 1.227 (0.306) | 1.219 (0.316) |
| SES(組平減) | 2.945 (0.156) | 2.945 (0.156) | 2.945 (0.156) | 2.945 (0.156) | 2.945 (0.155) |
| 平均 SES SES | 1.039 (0.299) | 1.039 (0.299) | 1.039 (0.300) | 1.039 (0.300) | 1.043 (0.301) |
| 天主教學校 SES | 1.643 (0.240) | 1.643 (0.240) | 1.643 (0.240) | 1.643 (0.240) | 1.644 (0.243) |
| 2.380 | 2.380 | 2.380 | 2.379 | 2.445 (0.389) | |
| 0.101 | 0.101 | 0.101 | 0.101 | 0.113 (0.134) | |
| 0.192 | 0.192 | 0.192 | 0.192 | 0.123 (0.181) | |
| 36.721 | 36.721 | 36.721 | 36.721 | 36.748 (0.618) | |
| 46,503.66 | 46,503.66 | 46,503.66 | 46,503.66 | – |
註:REML 估計值,括號內為標準誤;brms:後驗平均數,括號內為後驗標準差(預設先驗分配;四條鏈,每條 2,000 次迭代,其中前 1,000 次為暖身期)。、:學校截距與 SES 斜率的變異數;:兩者的共變數;:第一層殘差變異數。:REML 對數概似的負兩倍。版本:R 4.3.3、lme4 1.1-35.1、lmerTest 3.1-3、pbkrtest 0.5.5、nlme 3.1-164、glmmTMB 1.1.8、brms 2.23.0、statsmodels 0.15.0。
SAS。 使用 TYPE=UN 與 Satterthwaite 自由度的 PROC MIXED:
proc mixed data=hsb method=reml covtest;
class school;
model mathach = meanses catholic ses_cwc meanses*ses_cwc catholic*ses_cwc
/ solution ddfm=satterthwaite;
random intercept ses_cwc / subject=school type=un;
run;SPSS。 使用 COVTYPE(UN) 的 MIXED;WITH 之後的變項是共變項:
MIXED mathach WITH meanses catholic ses_cwc
/FIXED=meanses catholic ses_cwc meanses*ses_cwc catholic*ses_cwc
/METHOD=REML
/PRINT=SOLUTION TESTCOV
/RANDOM=INTERCEPT ses_cwc | SUBJECT(school) COVTYPE(UN).Stata。 使用因子變項記法(factor-variable notation)、REML 與 Satterthwaite 自由度的 mixed:
mixed mathach c.meanses c.ses_cwc i.catholic c.meanses#c.ses_cwc ///
i.catholic#c.ses_cwc || school: ses_cwc, ///
covariance(unstructured) reml dfmethod(satterthwaite)Mplus。 Mplus 沒有 REML;使用 ESTIMATOR = ML 時,其估計值對應於 R 套件的 ML 配適(REML = FALSE),而預設的 MLR 只改變標準誤,此時的標準誤會與其他程式以模型為基礎的標準誤不同。變項名稱是附錄 C 匯出壓縮檔中 Mplus 檔的名稱:
DATA: FILE = hsb.dat;
VARIABLE: NAMES = school minority female ses mathach size catholic pracad
disclim himinty meanses_ n_j meanses ses_cwc;
USEVARIABLES = mathach ses_cwc meanses catholic;
WITHIN = ses_cwc; BETWEEN = meanses catholic;
CLUSTER = school; MISSING = ALL (-999);
ANALYSIS: TYPE = TWOLEVEL RANDOM; ESTIMATOR = ML;
MODEL: %WITHIN%
s | mathach ON ses_cwc;
%BETWEEN%
mathach s ON meanses catholic;
mathach WITH s;HLM。 HLM 8 以選單操作。多變量資料矩陣(MDM)由一個學生檔與一個學校檔建立,兩者都依學校排序,例如匯出壓縮檔中的 SPSS 檔 hsb_pupils.sav 與 hsb_schools.sav。模型逐一方程式設定:
其中 SES 以組平減的方式進入,並啟用 。壓縮檔中的學校檔包含隨資料發布的學校平均 SES(meanses_rb),它與此處使用的樣本平均數略有不同(附錄 C);要完全重現表 E.2,必須把樣本平均數加入學校檔。
JASP 與 jamovi。 在 JASP 中,Mixed Models 模組的 Linear Mixed Models 分析以 mathach 為依變項,以 meanses、catholic 與 ses_cwc 為固定效果變項,並在模型項中加入兩個交互作用;以 school 為隨機效果的分組因子,含 ses_cwc 的隨機斜率,並勾選 Correlations 選項。在 jamovi 中,GAMLj 模組的 Linear Mixed Model 分析使用相同的變項,隨機效果輸入為 Intercept | school 與 ses_cwc | school,並設為相關。兩者都以 lme4 配適模型(JASP 透過 afex),但它們的預設值會改變參數化:JASP 以總和為零的對比為名義(nominal)預測變項編碼,並為每一個在學校內變動的固定效果納入隨機斜率;GAMLj 則把共變項平減於其總平均數。要重現表 E.2 的 lme4 欄,請把 catholic 以 0/1 的尺度(scale)變項輸入(或選擇處理編碼〔treatment coding〕),只保留隨機截距與 ses_cwc 斜率,並在 GAMLj 中把共變項的尺度調整設為 none;當只有編碼或平減方式不同時,隨機部分與其他係數會一致,但截距、SES 斜率,以及(在總和為零的編碼下)與天主教學校有關的項則不會一致。
Python 與 Julia。 在 Python 中,statsmodels 以一個公式與一個分組變項配適模型;在 Julia 中,MixedModels 使用 lme4 風格的公式,除非要求 REML,否則以 ML 估計:
import statsmodels.formula.api as smf
m = smf.mixedlm("mathach ~ (meanses + catholic) * ses_cwc", hsb,
groups=hsb["school"], re_formula="~ses_cwc")
fit = m.fit(reml=True)using MixedModels, CSV, DataFrames
hsb = CSV.read("hsb.csv", DataFrame)
m = fit(MixedModel, @formula(mathach ~ (meanses + catholic) * ses_cwc +
(1 + ses_cwc | school)), hsb; REML = true)估計值的比較。 表 E.2 呈現 lme4、nlme、glmmTMB 與 statsmodels 的 REML 估計值,以及 brms 的後驗平均數。四個以概似為基礎的配適彼此一致:它們在任何一個估計值上的最大差異約為 0.0004,REML 對數概似在四者中也都相同( = 46,503.66)。lme4、nlme 與 statsmodels 的 ML 配適也一致到相同的程度(最大差異 0.0005)。glmmTMB 與 statsmodels 的標準誤對某些係數略大,涉及 SES 的項差異最大(平均 SES 與 SES 的交互作用為 0.2996,相對於 0.2989),因為這兩個程式由所有參數聯合的觀察訊息矩陣求得標準誤,其中包含共變數參數的不確定性;而 lme4 與 nlme 則由 計算標準誤,把共變數參數當作已知;忽略這項不確定性時,glmmTMB 也得到 0.2989。
貝氏配適在固定效果上非常接近,其後驗標準差也接近 REML 標準誤,但在共變數參數上則不然:斜率變異數的後驗分配很寬,而且強烈偏斜(中位數 0.064,95% 可信區間 [0.000, 0.475]),因此其平均數 0.113 高於 REML 估計值 0.101,也遠高於它自己的中位數;共變數則被拉向零(0.123,相對於 0.192),因為資料對這麼小的變異數所提供的訊息很少(第 13 章)。每一個 都低於 1.01,所有參數中最小的 bulk 或 tail 有效樣本數為 775。
這張表也可以用來檢查其他程式的語法:SAS、SPSS 與 Stata 在使用 REML 與無結構共變數矩陣時,以及 HLM 在使用樣本學校平均數時,應該在其印出的精確度內重現表中的第一欄;而 Mplus 在使用 ESTIMATOR = ML 時,應該重現 ML 估計值(例如斜率變異數為 0.065,而不是 0.101)。
E.3Riesby 成長模型#
第 19 章的模型 G1 是 Riesby 資料中漢氏憂鬱量表評定的線性成長模型,含可以共變的隨機截距與週數隨機斜率,以 ML 從 66 位病人觀察到的 375 次評定估計。在長格式中,每一種程式設定這個模型的方式都和 HSB 模型一樣,以測量時間點為第一層、病人為第二層:
lmer(hamd ~ week + (1 + week | id), data = riesby, REML = FALSE)proc mixed data=riesby method=ml covtest;
class id;
model hamd = week / solution ddfm=satterthwaite;
random intercept week / subject=id type=un;
run;mixed hamd week || id: week, covariance(unstructured)在 SPSS 中,使用 /METHOD=ML 與 /RANDOM=INTERCEPT week | SUBJECT(id) COVTYPE(UN);在 Mplus 中,使用與 HSB 相同的兩層次設定,以 week 為組內層次變項,或使用寬格式的潛在成長模型(第 22 章);在 HLM 中,使用兩層次模型,WEEK 在第一層不平減。表 E.3 顯示,四個套件的結果彼此相差在 0.002 以內。
| 參數 | lme4
| nlme
| glmmTMB
| statsmodels
|
|---|---|---|---|---|
| 截距 | 23.577 (0.546) | 23.577 (0.547) | 23.577 (0.546) | 23.577 (0.546) |
| 週數 | 2.377 (0.209) | 2.377 (0.209) | 2.377 (0.209) | 2.377 (0.209) |
| 12.631 | 12.629 | 12.629 | 12.629 | |
| 2.079 | 2.079 | 2.079 | 2.079 | |
| 1.421 | 1.421 | 1.421 | 1.421 | |
| 12.216 | 12.217 | 12.217 | 12.217 | |
| 2,219.04 | 2,219.04 | 2,219.04 | 2,219.04 |
註:ML 估計值,括號內為標準誤。、:病人截距(第 0 週)與斜率的變異數;:兩者的共變數;:第一層殘差變異數。:對數概似的負兩倍。
E.4核對不同程式的輸出#
當兩個程式的估計值不同時,通常問五個問題就能找到原因。
估計法相同嗎? REML 與 ML 的變異成分估計值不同,最小的變異成分差異最大:HSB 模型的 SES 斜率變異數在 REML 下為 0.101,在 ML 下為 0.065。固定效果的差異則小得多。Mplus 與 Stata 預設以 ML 估計,因此其預設輸出必須與 ML 配適比較;Mplus 預設的 MLR 也會改變標準誤。
參數相同嗎? 各程式以不同的形式報告隨機部分:lme4、glmmTMB 與 Julia 印出變異數、標準差與相關;nlme 印出標準差與相關;SAS、SPSS、Mplus、statsmodels 與 Stata(除非指定 stddeviations 選項)印出變異數與共變數;HLM 則兩種形式都印出。把標準差平方,並把相關乘以兩個標準差,就能把一種形式轉換成另一種形式。各程式對共變數矩陣元素的標示也不同:共變數 在 SAS 中標示為 UN(2,1),在 SPSS 中為 UN (2,1),在 Stata 中為 cov(ses_cwc,_cons),在 Mplus 中是組間層次的 MATHACH WITH S,在 HLM 中則是 矩陣的非對角元素。
檢定相同嗎? 固定效果相同,但其檢定不同。以 HSB 模型中天主教學校與 SES 的交互作用為例,Satterthwaite 近似法得出 143.2 個自由度,Kenward–Roger 近似法得出 142.0;而 nlme 因為這個交互作用含有第一層變項,就給它第一層的自由度(7,022),忽略了 SES 斜率在學校之間變動的事實;HLM 給隨機斜率的係數 個自由度,因此給它 157。至於公私立別本身的效果,nlme 使用 157,Satterthwaite 則為 149.6。有 160 所學校時,結論相同,但叢集很少時,選擇就很重要(第 10 章)。
配適統計量相同嗎? REML 對數概似不能與 ML 對數概似比較,固定效果不同之模型的 REML 概似則完全不能相互比較(第 9 至 11 章)。對 REML 配適,lme4 報告 REML 準則(HSB 模型的 = 46,503.66;以 REMLcrit() 取出,而不是 deviance(fit, REML = TRUE));對 ML 配適,則報告離異數( = 46,496.43)。訊息準則的懲罰項也不同:就 HSB 模型的 ML 配適而言,AIC 為 46,516.43,以學生數計算的 BIC 為 46,585.23,而像 SAS 那樣以學校數計算的 BIC 則為 46,547.18;Stata 以 estat ic, n(160) 得出後者,在其他程式中則可以由對數概似計算。只有在同一個程式中、以相同定義配適之模型間的差異才有意義。
資料相同嗎? 變項有遺漏值時,各程式刪除不完整觀察值的方式不同,而平減也必須以完全相同的方式進行;就 Riesby 資料而言,所有程式都必須使用相同的 375 次觀察到的評定。上述 HLM 的例子提醒我們,名稱相同的變項,在這裡是 SES 的學校平均數,可能有不只一種計算方式。
E.5常見模型功能的語法對照#
表 E.4 列出本書模型最常見之功能在四種程式中的語法。各章的軟體對照方框提供完整的範例;這張表只供快速查閱。
| 功能 | R lme4
| SAS PROC MIXED
| SPSS MIXED
| Stata mixed
|
|---|---|---|---|---|
| 隨機截距 | (1 | g)
| random intercept / subject=g;
| /RANDOM=INTERCEPT | SUBJECT(g)
| || g:
|
| 相關的截距與斜率 | (1 + x | g)
| random intercept x / subject=g type=un;
| /RANDOM=INTERCEPT x | SUBJECT(g) COVTYPE(UN)
| || g: x, cov(unstructured)
|
| 不相關的截距與斜率 | (1 + x || g)
| type=vc(預設)
| COVTYPE(VC)(預設)
| || g: x(預設)
|
| 三層次,巢套 | (1 | s) + (1 | s:c)
| random intercept / subject=s; random intercept / subject=c(s);
| /RANDOM=INTERCEPT | SUBJECT(s) /RANDOM=INTERCEPT | SUBJECT(s*c)
| || s: || c:
|
| 交叉 | (1 | a) + (1 | b)
| 兩個 random 敘述,分別使用 subject=a 與 subject=b
| 兩個 /RANDOM 子命令
| || _all: R.a || b:(a:水準較少的因子)
|
| 以 ML 取代 REML | REML = FALSE
| method=ml
| /METHOD=ML
| 預設(REML 使用 reml)
|
| Kenward–Roger 自由度 | 在 library(lmerTest) 之後使用 summary(m, ddf = "Kenward-Roger")
| ddfm=kr
| /CRITERIA=DFMETHOD(KENWARDROGER)
| reml dfmethod(kroger)
|
| AR(1) 殘差 | nlme::lme(..., correlation = corAR1(form = ~ time | id))
| repeated time / subject=id type=ar(1);,並把 time 放在 CLASS 中
| /REPEATED=time | SUBJECT(id) COVTYPE(AR1)
| residuals(ar 1, t(time))
|
E.6疑難排解#
多層次軟體的警告與錯誤訊息可以歸為少數幾類,每一類各有其常見原因與對策(表 E.5)。表 E.6 列出本附錄的範例在 R 與 Python 中重現的 15 則訊息,並照錄本書所用版本印出的確切文字。其中四個範例使用一筆小型模擬資料:10 個叢集、每個叢集五個觀察值,完全沒有叢集變異數;這正是無法估計隨機斜率的典型情況:lme4 報告邊界(奇異)配適,glmmTMB 報告海森矩陣非正定與奇異收斂,nlme 則以錯誤中止;第四個範例使用兩個互為倍數的預測變項,在奇異配適之外又多了一則關於秩不足(rank deficiency)的訊息。
| 問題 | 典型訊息 | 常見原因 | 對策 |
|---|---|---|---|
| 邊界(奇異)配適 | lme4:「boundary (singular) fit」;SAS:「Estimated G matrix is not positive definite」;SPSS:「The final Hessian matrix is not positive definite although all convergence criteria are satisfied」;Stata:最後幾次迭代中出現「(not concave)」或「(backed up)」
| 變異數估計為零,或相關估計為 ;叢集太少,不足以估計隨機部分 | 以其他最佳化演算法或起始值確認它確實是最大值;簡化隨機部分,或報告奇異配適;或在貝氏配適中使用弱訊息先驗分配(第 8、9、13 與 14 章) |
| 無法收斂 | lme4:「Model failed to converge with max|grad|」;glmmTMB:「Model convergence problem」;nlme:「iteration limit reached」;statsmodels:「ConvergenceWarning」;SAS:「Did not converge」;SPSS:「Iteration was terminated but convergence has not been achieved」;Stata:「convergence not achieved」;Mplus:「THE MODEL ESTIMATION DID NOT TERMINATE NORMALLY …」
| 預測變項的尺度不佳、隨機部分參數過多,或最佳化演算法過早停止 | 調整預測變項的尺度,或將其平減;以多種最佳化演算法或起始值重新配適(lme4 的 allFit()、SAS 的 PARMS),並保留最大的對數概似(估計法與近似方法須相同);簡化隨機部分(第 9 章)
|
| 尺度調整 | lme4:「Some predictor variables are on very different scales」;「Model is nearly unidentifiable: very large eigenvalue」
| 預測變項以差異極大的單位測量 | 把預測變項除以一個常數;配適結果不變,只有單位改變(第 9 章) |
| 秩不足 | lme4:「fixed-effect model matrix is rank deficient」;SAS 與 SPSS 會印出標示為多餘(redundant)的 0 係數
| 某個預測變項是其他預測變項的線性函數,包括與叢集虛擬變項共線的叢集層次變項 | 移除多餘的預測變項;檢查類別變項的編碼 |
| 不可信的標準誤 | Mplus:「THE STANDARD ERRORS OF THE MODEL PARAMETER ESTIMATES MAY NOT BE TRUSTWORTHY FOR SOME PARAMETERS DUE TO …」;glmmTMB:「non-positive-definite Hessian」
| 參數位於邊界上,或概似函數平坦 | 檢查訊息中指名的參數;簡化模型,或以概似比檢定與剖面區間取代 Wald 統計量(第 10 與 11 章) |
註:未為本書執行之程式的訊息,以其常見的印出形式引用,以刪節號標示之處經過縮短;確切文字因版本而異。章次:討論該問題及其對策之處。
| 程式 | 範例 | 訊息(原文照錄) |
|---|---|---|
| R lme4 | 隨機斜率,10 個叢集、各 5 個觀察值,沒有叢集變異數 | : boundary (singular) fit: see help(isSingular) |
| R lme4 | SES 乘以 1,000 後的隨機斜率(HSB) | : Model failed to converge with max|grad| = 3.68138 (tol = 0.002, component 1) |
| R lme4 | SES 乘以 1,000 後的隨機斜率(HSB) | : Model is nearly unidentifiable: very large eigenvalue - Rescale variables?;Model is nearly unidentifiable: large eigenvalue ratio - Rescale variables? |
| R lme4 | 兩個互為倍數的預測變項,10 個叢集、各 5 個觀察值,沒有叢集變異數 | : fixed-effect model matrix is rank deficient so dropping 1 column / coefficient |
| R lme4 | 兩個互為倍數的預測變項,10 個叢集、各 5 個觀察值,沒有叢集變異數 | : boundary (singular) fit: see help(isSingular) |
| R lme4 | 年齡乘以 1,000 的邏輯斯模型(避孕資料) | : Some predictor variables are on very different scales: consider rescaling |
| R lme4 | 年齡乘以 1,000 的邏輯斯模型(避孕資料) | : Model failed to converge with max|grad| = 0.0887584 (tol = 0.002, component 1) |
| R lme4 | 年齡乘以 1,000 的邏輯斯模型(避孕資料) | : Model is nearly unidentifiable: very large eigenvalue - Rescale variables?;Model is nearly unidentifiable: large eigenvalue ratio - Rescale variables? |
| R glmmTMB | 隨機斜率,10 個叢集、各 5 個觀察值,沒有叢集變異數 | : Model convergence problem; non-positive-definite Hessian matrix. See vignette(troubleshooting) |
| R glmmTMB | 隨機斜率,10 個叢集、各 5 個觀察值,沒有叢集變異數 | : Model convergence problem; singular convergence (7). See vignette(troubleshooting), help(diagnose) |
| R nlme | 隨機斜率,10 個叢集、各 5 個觀察值,沒有叢集變異數 | : nlminb problem, convergence error code = 1 message = iteration limit reached without convergence (10) |
| R glmmTMB | 以 ML 估計的 HSB 模型 M3 | : Model convergence problem; non-positive-definite Hessian matrix. See vignette(troubleshooting) |
| Python statsmodels | HSB M3,REML,method = lbfgs | : Maximum Likelihood optimization failed to converge. Check mle_retvals |
| Python statsmodels | HSB M3,REML,method = lbfgs | : MixedLM optimization failed, trying a different optimizer may help. |
| Python statsmodels | HSB M3,REML,method = lbfgs | : Gradient optimization failed, |grad| = 11.107297 |
HSB 模型的另外兩個情況顯示,警告不是出問題的唯一跡象,而沒有警告也不能保證沒有問題。以 ML 估計時,glmmTMB 對這個模型得出非正定的海森矩陣,斜率變異數為 0.018(logLik() 對這次配適傳回 NA;由其目標函數得到的對數概似為 23,248.24,比最大值低 0.03),而 lme4、nlme 與 statsmodels 都得到 0.065;概似在這個小變異數上是平坦的,而這則警告正確地指出,最佳化演算法在到達最大值之前就停下來了。以 nlme 的替代最佳化演算法(lmeControl(opt = "optim"))用 REML 估計時,模型停在 0.0003 的斜率變異數,其 REML 對數概似比最大值低 0.56,卻沒有任何訊息。比較不同最佳化演算法或不同程式的對數概似,只需要一行程式碼,就能發現這兩個問題,前提是這些配適最大化的是同一個概似(相同的估計法,以及在廣義模型中相同的近似方法)。只使用 L-BFGS 最佳化演算法的 statsmodels 也過早停止,但它有發出訊息(表 E.6);它預設的一連串最佳化演算法則到達了最大值。