2

次の回帰を実行しようとしています。

m1=glm(y~x1+x2+x3+x4,data=df,family=binomial())
m2=glm(y~x1+x2+x3+x4+x5,data=df,family=binomial())
m3=glm(y~x1+x2+x3+x4+x5+x6,data=df,family=binomial())
m4=glm(y~x1+x2+x3+x4+x5+x6+x7,data=df,family=binomial())

そして、stargazerパッケージを使用してそれらを印刷します。

stargazer(m1,m2,m3,m4 type="html", out="models.html")

つまり、データ フレーム df はかなり大きい (~600MB) ため、作成する各 glm オブジェクトは少なくとも ~1.5GB です。これにより、メモリの問題が発生し、stargazerで印刷する必要があるすべての回帰を作成できなくなります。

glm オブジェクトのサイズを小さくするために、2 つのアプローチを試しました。

  1. このチュートリアルを使用して glm オブジェクトをトリムします。スターゲイザー関数から次のエラーが発生しますが、これは確かに glm オブジェクトを <1MB にトリミングします。
Error in Qr$qr[p1, p1, drop = FALSE] : incorrect number of dimensions
  1. パッケージspeedglmを使用します。ただし、stargazerではサポートされていません。

助言がありますか?

4

2 に答える 2

2

私にとってうまくいったオプションは、最初にlmtestパッケージを使用して大きな *lm オブジェクトを「coeftest」クラスに変換することです。「coeftest」オブジェクトは、実際には要約された回帰結果の単なるマトリックスであり、結果としてスペースをほとんど占有しません。さらに、Stargazer は入力として「coeftest」クラスを簡単に受け入れるため、コードを大幅に変更する必要はまったくありません。

あなたの例を使用して:

library(lmtest)

m1 <- glm(y~x1+x2+x3+x4,data=df,family=binomial())
m1 <- coeftest(m1)
m2 <- glm(y~x1+x2+x3+x4+x5,data=df,family=binomial())
m2 <- coeftest(m2)
m3 <- glm(y~x1+x2+x3+x4+x5+x6,data=df,family=binomial())
m3 <- coeftest(m3)
m4 <- glm(y~x1+x2+x3+x4+x5+x6+x7,data=df,family=binomial())
m4 <- coeftest(m4)

stargazer(m1,m2,m3,m4 type="html", out="models.html")

メモリの問題に対処することとは別に、このアプローチには、coeftest()変換自体が非常に高速であるという追加の利点があります。(「vcov = vcovHC」オプションを呼び出して、特に大きな *lm オブジェクトで堅牢な/クラスター化された標準エラーを生成するように要求する場合は例外です。ただし、その場合でも、coeftest()変換はエクスポートに必要なステップです。最初にロバストな回帰結果が得られます。)

このアプローチの小さな欠点は、Stargazer テーブルにとって重要な回帰統計 (R-squared または N など) が保存されないことです。ただし、変換する前に *lm オブジェクトからこれらを簡単に取得できます。

于 2016-10-13T19:36:46.523 に答える