2017-11-26 8 views
2

私はで作成した2つの線形モデルをstargazerパッケージのテーブルと比較したいと思います。大部分は、私が得ている結果が好きです。しかし、Akaike情報基準は表示されていません。 The docsは、それを含めるためにkeep.stat引数に"aic"を渡すことができます。しかし、そこにはありません。エラーメッセージはありません。Stargazerの赤池基準を表示

stargazer(model1, model2, type="text", report="vc", header=FALSE, 
      title="Linear Models Predicting Forest Land", 
      keep.stat=c("aic", "rsq", "n"), omit.table.layout="n") 

Linear Models Predicting Forest Land 
========================================== 
         Dependent variable: 
         -------------------- 
          forest  
         (1)  (2) 
------------------------------------------ 
log.MS.MIL.XPND.GD.ZS -11.948 -12.557 

log.TX.VAL.AGRI.ZS.UN 2.310  2.299 

log.NY.GDP.MKTP.CD     0.505 

Constant    40.857 28.365 

------------------------------------------ 
Observations    183  183 
R2      0.142  0.146 
========================================== 

私はそれを含めることができない理由はありません。これらのモデルでグローバルAIC関数を呼び出すと正常に動作します。

> AIC(model1) 
[1] 1586.17 
> AIC(model2) 
[1] 1587.208 
+1

のですか?ドキュメントには、5.2で修正されたlmモデルのAICのバグがあると書かれています(リンクされたdocの17ページ) – scoa

答えて

2

問題がstargazer:::.stargazer.wrap内に定義.AIC関数によって与えられます。 .AIC通話.model.identify

.AIC <- function(object.name) { 
    model.name <- .get.model.name(object.name) 
    if (model.name %in% c("coeftest")) { 
     return(NA) 
    } 
    if (model.name %in% c("lmer", "lme", "nlme", "glmer", 
     "nlmer", "ergm", "gls", "Gls", "lagsarlm", "errorsarlm", 
     "", "Arima")) { 
     return(as.vector(AIC(object.name))) 
    } 
    if (model.name %in% c("censReg")) { 
     return(as.vector(AIC(object.name)[1])) 
    } 
    if (model.name %in% c("fGARCH")) { 
     return([email protected]$ics["AIC"]) 
    } 
    if (model.name %in% c("maBina")) { 
     return(as.vector(object.name$w$aic)) 
    } 
    if (model.name %in% c("arima")) { 
     return(as.vector(object.name$aic)) 
    } 
    else if (!is.null(.summary.object$aic)) { 
     return(as.vector(.summary.object$aic)) 
    } 
    else if (!is.null(object.name$AIC)) { 
     return(as.vector(object.name$AIC)) 
    } 
    return(NA) 
} 

.get.model.name機能:1が見ることができるように
は、この機能はlmモデルのためにAICを計算しません。

if (object.name$call[1] == "lm()") { 
    return("ls") 
} 

ソリューション1:使用add.linesモデルの構成要素callはその後、.model.identify戻りlslm()ある場合。

set.seed(12345) 
n <- 100 
df <- data.frame(y=rnorm(n), x1=rnorm(n), x2=rnorm(n)) 

model1 <- lm(y ~ x1, data=df) 
model2 <- lm(y ~ x2, data=df) 

library(stargazer) 
stargazer(model1, model2, type="text", report="vc", header=FALSE, 
      title="Linear Models Predicting Forest Land", 
      keep.stat=c("rsq", "n"), omit.table.layout="n", 
      add.lines=list(c("AIC", round(AIC(model1),1), round(AIC(model2),1)))) 

、出力は次のとおりです。

Linear Models Predicting Forest Land 
================================= 
      Dependent variable: 
      -------------------- 
         y   
       (1)  (2) 
--------------------------------- 
x1    0.115    

x2      -0.052 

Constant  0.240  0.243 

--------------------------------- 
AIC   309.4  310.3 
Observations 100  100 
R2    0.011  0.002 
================================= 

ソリューション2:オブジェクトをモデル化するコンポーネントAICを追加します。

model1 <- lm(y ~ x1, data=df) 
model2 <- lm(y ~ x2, data=df) 

model1$AIC <- AIC(model1) 
model2$AIC <- AIC(model2) 

stargazer(model1, model2, type="text", report="vc", header=FALSE, 
      title="Linear Models Predicting Forest Land", 
      keep.stat=c("aic", "rsq", "n"), omit.table.layout="n") 

と出力は何スターゲイザーバージョンを使用している

Linear Models Predicting Forest Land 
====================================== 
        Dependent variable: 
        -------------------- 
          y   
        (1)  (2) 
-------------------------------------- 
x1     0.115    

x2       -0.052 

Constant   0.240  0.243 

-------------------------------------- 
Observations   100  100 
R2     0.011  0.002 
Akaike Inf. Crit. 309.413 310.318 
====================================== 
+0

9ページのような文書化された例がたくさんあります(https://cran.r-project.org/web /packages/stargazer/vignettes/stargazer.pdf)、AICが自動的に追加されます。私はソースコードも調べて、その機能が組み込まれているようだ。私はなぜそれが動作していないのか理解したいと思っていた。 –

+0

@AndyCarlson私の答えの更新を参照して、問題の原因を説明してください。 2番目に可能な解決方法も追加しました。 –

関連する問題