簡體   English   中英

如何從lm_robust對象獲取AIC

[英]How to get AIC from lm_robust object

如何從lm_robust對象(包estimatr )獲取AIC 我正在使用lm_robust因為我想使用一個強大的估算器來計算SE 不像lm功能, AIC當您運行的匯總函數和運行不提供AIC一個在功能lm_robust對象產生一個錯誤。 下面是我試圖運行的那種模型的玩具示例。

library(estimatr)

fake_data<-data.frame(outcome=rnorm(100,3.65,1),
                      pred1=rnorm(100,15,7),
                      pred2=as.factor(sample(1:5, 100, replace = T)))

mod1<-lm_robust(outcome~pred1+pred2,data=fake_data)
AIC(mod1)

這是錯誤消息的樣子:

> AIC(mod1)
Error in UseMethod("logLik") : 
  no applicable method for 'logLik' applied to an object of class "lm_robust"

如果你必須使用lm_robust ,你可以選擇自己計算,如下所示,

AIC的公式,

AIC = 2*k + n [Ln( 2(pi) RSS/n ) + 1]

# n : Number of observation
# k : All variables including all distinct factors and constant
# RSS : Residual Sum of Square

如果我們將它應用於您的R

# Note that, I take k=7 since you have, 5 factors + 1 continuous and 1 constant

AIC_calculated <- 2*7 + 100* (log( 2*pi* (1-mod1$r.squared)*mod1$tss/100 ) + 1)


[1] 332.2865

這與lmglm輸出相同。

mod2<-lm(outcome~pred1+pred2,data=fake_data)

> AIC(mod2)
[1] 332.2865

最后,當然,您可以將此計算放入一個函數中,只需在其中提供lm_robust模型即可隨時調用,而無需為任何給定數據設置Nk參數,例如:

myAIC <- function(data) {

    2*(data$k+1) + data$N * (log(2*pi* (1-data$r.squared)*data$tss/data$N ) + 1)

}

> myAIC(mod1)
[1] 332.2865

注意:由於在數據框中運行sample()函數時的種子差異,計算機中的結果可能會有所不同。

這是一個解決方法

mod1 = lm_robust(outcome ~ pred1 + pred2, data = fake_data)

#Create any fitted model using 'lm' as a placeholder
mod2 = with(list(x = rnorm(10), y = rnorm(10)), lm(y ~ x))

#Copy values in `mod2` from `mod1`
mod2[names(mod2)] = mod1[names(mod2)]

#Calculate residuals in `mod2`
mod2$residuals = mod2$fitted.values - fake_data$outcome

AIC(mod2)
#[1] 326.6092

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM