glmnet 如何處理過度分散?
我有一個關於如何對計數數據建模文本的問題,特別是我如何使用該
lasso
技術來減少特徵。假設我有 N 篇在線文章和每篇文章的瀏覽量。我為每篇文章提取了 1-gram 和 2-gram,我想對 1,2-gram 進行回歸。由於特徵(1,2-grams)遠遠超過觀察的數量,套索將是減少特徵數量的好方法。此外,我發現
glmnet
運行套索分析非常方便。但是,綜合瀏覽量的計數過於分散(方差 > 均值),但
glmnet
不提供quasipoisson
(明確地)或negative binomial
只poisson
提供計數數據。我想到的解決方案是log transform
統計數據(社會科學家常用的方法),並使響應變量大致服從正態分佈。因此,我可以使用高斯族對數據進行建模glmnet
。所以我的問題是:這樣做合適嗎?或者,我應該只使用泊松
glmnet
以防萬一glmnet
嗎quasipoisson
?或者,是否有其他 R 包處理這種情況?非常感謝你!
簡短的回答
在估計準/泊松模型中條件均值的回歸係數向量時,過度離散並不重要!如果你忘記了這裡的過度離散,你會沒事的,將 glmnet 與泊松族一起使用,只關注你的交叉驗證預測誤差是否低。
資格如下。
Poisson、Quasi-Poisson 和估計函數:
我之所以這麼說是因為泊鬆或準泊松模型中的過度分散 (OD) 會影響與分散有關的任何事情(或方差或尺度或異質性或擴散或任何你想稱之為的),因此會對標準產生影響誤差和置信區間**,但保留條件均值的估計值(稱為) 原封不動。這尤其適用於均值的線性分解,例如**.
這是因為條件均值係數的估計方程對於泊松和準泊松模型實際上是相同的。準泊松根據均值和附加參數(例如) 作為(與泊松=1),但在優化估計方程時並不相關。就這樣在估計中沒有任何作用當條件均值和方差成比例時。因此點估計準和泊松模型是相同的!
讓我用一個例子來說明(注意需要滾動才能看到整個代碼和輸出):
> library(MASS) > data(quine) > modp <- glm(Days~Age+Sex+Eth+Lrn, data=quine, family="poisson") > modqp <- glm(Days~Age+Sex+Eth+Lrn, data=quine, family="quasipoisson") > summary(modp) Call: glm(formula = Days ~ Age + Sex + Eth + Lrn, family = "poisson", data = quine) Deviance Residuals: Min 1Q Median 3Q Max -6.808 -3.065 -1.119 1.819 9.909 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 2.71538 0.06468 41.980 < 2e-16 *** AgeF1 -0.33390 0.07009 -4.764 1.90e-06 *** AgeF2 0.25783 0.06242 4.131 3.62e-05 *** AgeF3 0.42769 0.06769 6.319 2.64e-10 *** SexM 0.16160 0.04253 3.799 0.000145 *** EthN -0.53360 0.04188 -12.740 < 2e-16 *** LrnSL 0.34894 0.05204 6.705 2.02e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for poisson family taken to be 1) Null deviance: 2073.5 on 145 degrees of freedom Residual deviance: 1696.7 on 139 degrees of freedom AIC: 2299.2 Number of Fisher Scoring iterations: 5 > summary(modqp) Call: glm(formula = Days ~ Age + Sex + Eth + Lrn, family = "quasipoisson", data = quine) Deviance Residuals: Min 1Q Median 3Q Max -6.808 -3.065 -1.119 1.819 9.909 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2.7154 0.2347 11.569 < 2e-16 *** AgeF1 -0.3339 0.2543 -1.313 0.191413 AgeF2 0.2578 0.2265 1.138 0.256938 AgeF3 0.4277 0.2456 1.741 0.083831 . SexM 0.1616 0.1543 1.047 0.296914 EthN -0.5336 0.1520 -3.511 0.000602 *** LrnSL 0.3489 0.1888 1.848 0.066760 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for quasipoisson family taken to be 13.16691) Null deviance: 2073.5 on 145 degrees of freedom Residual deviance: 1696.7 on 139 degrees of freedom AIC: NA Number of Fisher Scoring iterations: 5
正如你所看到的,即使我們在這個數據集中有 12.21 的強烈過度離散(由
deviance(modp)/modp$df.residual
),回歸係數(點估計)根本沒有變化。但請注意標準錯誤是如何變化的。懲罰泊松模型中過度離散的影響問題
懲罰模型主要用於預測和變量選擇,而不是(還)用於推理。所以使用這些模型的人對條件均值的回歸參數感興趣,只是縮小到零。如果懲罰相同,則從懲罰(準)可能性導出的條件均值的估計方程也不取決於因此過度分散對於在以下類型的模型中:
**作為對於形式的任何方差函數,以相同的方式估計,對於條件均值和方差成比例的所有模型也是如此。**這就像在不受懲罰的泊松/準泊松模型中一樣。
如果您不想從表面上看這個並避免數學,您可以在以下事實中找到經驗支持
glmnet
,如果您將正則化參數設置為 0(因此)你最終會在泊松和準泊松模型的位置(請參閱下面的最後一列,其中 lambda 為 0.005)。> library(glmnet) > y <- quine[,5] > x <- model.matrix(~Age+Sex+Eth+Lrn,quine) > modl <- glmnet(y=y,x=x, lambda=c(0.05,0.02,0.01,0.005), family="poisson") > coefficients(modl) 8 x 4 sparse Matrix of class "dgCMatrix" s0 s1 s2 s3 (Intercept) 2.7320435 2.7221245 2.7188884 2.7172098 (Intercept) . . . . AgeF1 -0.3325689 -0.3335226 -0.3339580 -0.3340520 AgeF2 0.2496120 0.2544253 0.2559408 0.2567880 AgeF3 0.4079635 0.4197509 0.4236024 0.4255759 SexM 0.1530040 0.1581563 0.1598595 0.1607162 EthN -0.5275619 -0.5311830 -0.5323936 -0.5329969 LrnSL 0.3336885 0.3428815 0.3459650 0.3474745
那麼 OD 對懲罰回歸模型有什麼作用呢?正如您可能知道的那樣,對於計算懲罰模型的標準誤差的正確方法仍然存在一些爭論(例如,參見此處)並且
glmnet
無論如何都不會輸出任何內容,可能是因為這個原因。OD 很可能會影響模型的推理部分,就像它在非懲罰案例中所做的那樣,但除非在這種情況下就推理達成一些共識,否則我們不會知道。順便說一句,如果一個人願意採用貝葉斯觀點,其中懲罰模型只是具有特定先驗的標準模型,則可以將所有這些混亂拋在腦後。