陷阱

此頁面列出使用 statsmodels 時可能出現的問題。這些問題可能是由於資料相關或統計問題、軟體設計、模型的「非標準」使用或邊緣情況所導致。

statsmodels 提供一些警告和輔助函數用於診斷檢查(請參閱此部落格文章,了解線性迴歸中錯誤設定的檢查範例)。當然,涵蓋範圍並非全面,但隨著時間的推移,將會新增更多警告和診斷函數。

雖然所有統計套件的底層統計問題都相同,但軟體實現在處理極端或邊緣情況的方式上有所不同。請回報模型可能無法運作的邊緣情況,以便我們適當處理。

使用不同參數重複呼叫 fit

結果實例通常需要存取對應模型實例的屬性。使用不同參數多次擬合模型會變更模型屬性。這表示在重新擬合模型後,結果實例可能不再指向正確的模型屬性。

因此,最佳做法是在想要使用不同的擬合函數參數擬合模型時,建立不同的模型實例。

例如,這樣做沒有問題,因為我們沒有保留結果實例以供進一步使用

mod = AR(endog)
aic = []
for lag in range(1,11):
    res = mod.fit(maxlag=lag)
    aic.append(res.aic)

但是,當我們想要保留兩個不同的估計結果時,建議建立兩個不同的模型實例。

mod1 = RLM(endog, exog)
res1 = mod1.fit(scale_est='mad')
mod2 = RLM(endog, exog)
res2 = mod2.fit(scale_est=sm.robust.scale.HuberScale())

未識別的參數

exog 矩陣秩不足,完全多重共線性

基於線性模型、GLS、RLM、GLM 和類似的模型會使用廣義反矩陣。這表示

  • 秩不足的矩陣不會引發錯誤

  • 幾乎完全多重共線性或病態設計矩陣的情況可能會產生數值不穩定的結果。如果這不是期望的行為,使用者需要手動檢查矩陣的秩或條件數

注意:如果未重新調整資料,statsmodels 目前在 Filip 的 NIST 基準測試案例中會失敗,請參閱此部落格

最大概似估計中不完全收斂

在某些情況下,最大概似估計量可能不存在,參數可能是無限的或非唯一的(例如,具有二元內生變數的模型中的(準)分離)。在預設設定下,如果最佳化演算法在未達到收斂的情況下停止,statsmodels 會列印警告。但是,必須知道收斂標準有時可能會錯誤地指示收斂(例如,如果目標函數的值收斂但參數沒有)。一般而言,使用者需要驗證收斂。

對於二元 Logit 和 Probit 模型,如果偵測到完美預測,statsmodels 會引發例外狀況。但是,沒有檢查準完美預測。

其他問題

資料變異不足

對於小型資料集或分類變數中具有小組別的資料,資料中可能存在變異不足的情況。在這些情況下,結果可能無法識別,或可能發生一些隱藏的問題。

目前唯一已知的案例是穩健線性模型估計中的完美擬合。對於 RLM,如果殘差等於零,則不會引發例外狀況,但是這種完美的擬合可能會在某些結果中產生 NaN(scale=0 和 0/0 除法)(問題 #55)。

真實參數超出模型範圍

在某些情況下,模型中參數的範圍限制可能與資料不一致。在這些情況下,估計可能會停止在接近參數空間邊界的參數值處,但也可能因執行階段錯誤而失敗,或在最佳化期間產生 NaN。

兩個範例

當資料相對於 Poisson 沒有過度分散時,即真實模型與 Poisson 具有相同的分散或分散不足時,估計負二項式模型與負二項式分佈的過度分散假設不一致。statsmodels 中實作的對數概似函數及其導數無法在分散參數為零分散或零分散的正鄰域中求值。

零膨脹模型目前使用 Logit 或 Probit 作為膨脹模型。這表示沒有膨脹位於參數空間的邊界,並且零緊縮位於有效的參數空間之外。當資料沒有零膨脹或零緊縮時,零膨脹模型通常會在最佳化中失敗,或最終接近無膨脹邊界。


上次更新:2024 年 10 月 03 日