2017-11-22 3 views
1

巨大であるとき、私は例えば、Rの3つの線形回帰モデルに取り組んでいた:どのようにRで出力重回帰結果をデータが

reg1=lm(y~x1,data=dataset) 
reg2=lm(y~x2,data=dataset) 
reg3=lm(y~x3,data=dataset) 

私は、これらの結果は、「スターゲイザー」パッケージを使用して出力したいです。コードは次のようになります:

library(stargazer) 
stargazer(reg1, reg2, reg3, title="Results", align=TRUE,type = "html",style = "qje", out="Table1.html") 

しかし、私が作業しているデータセットは巨大です。したがって、reg1、reg2、reg3のサイズは巨大です(それぞれ約3.8Gbです)。私のコンピュータは、3つの回帰モデルの結果をすべて同時に保存することはできません。しかし直感的には、係数、標準偏差、p値などが必要です。これらの項目はあまりにも多くの領域を取るべきではありません。この問題を回避するにはどうすればよいですか?

+0

'lm()'の 'model = FALSE'引数を試してみてください。 –

+0

[broom :: 'package](https://cran.r-project.org/web/packages/broom/vignettes/broom.html)をチェックアウトしてください。どのように複雑なモデルを扱うのかは分かりませんが、 'lm()'に適合する線形モデルから係数を抽出するだけであれば、そのトリックができます。 – lefft

+0

@benbolker、model = FALSEを追加しても問題は解決しません。オブジェクトはまだ巨大です。 – Allen

答えて

1

lmオブジェクトをかなり削除することは可能ですが、完全に削除することはできません。 (より原理的なアプローチは異なる行に沿ってstargazerを再構築することですが、それはもっと多くの作業です)特に、コンポーネントのいくつかに関連する残差と行/列名を取り除くことは、大いに役立ちます単一の数値プレディクタが存在する上の例で最も大きな影響を与えます;より大きなプレディクタセットがあれば、それはずっと少なくなります)。 stargazerが働くために必要とする最大の残りの成分は、QR行列と適合した値です。モデルのコンポーネントのサイズを探索するための

set.seed(101) 
dd <- data.frame(y=rnorm(1e5),x1=rnorm(1e5),x2=rnorm(1e5),x3=rnorm(1e5)) 
reg1=lm(y~x1,data=dd) 
reg2=lm(y~x2,data=dd) 
reg3=lm(y~x3,data=dd) 

ユーティリティ関数:

例を生成

inspect <- function(x=reg1) { 
    sapply(x,function(z) round(as.numeric(object.size(z))/2^20,2)) 
} 
s <- function(x) cat(format(object.size(x),units="Mb"),"\n") 

はそれらを試してみてください:

s(reg1) ## 24.4 Mb 
inspect(reg1) 
## coefficients  residuals  effects   rank fitted.values 
##   0.00   6.87   1.53   0.00   6.87 
##  assign   qr df.residual  xlevels   call 
##   0.00   7.63   0.00   0.00   0.00 
##   terms   model 
##   0.00   1.53 

機能をコンポーネントを削除します:

strip_lm <- function(x) { 
    x$residuals <- NULL 
    x$model <- NULL 
    x$effects <- NULL 
    names(x$fitted.values) <- NULL 
    dimnames(x$qr$qr) <- NULL 
    return(x) 
} 

それを試してみてください。この場合

reg1B <- strip_lm(reg1) 
s(reg1B) 
##2.3 Mb 
inspect(reg1B) 
## coefficients   rank fitted.values  assign   qr 
##   0.00   0.00   0.76   0.00   1.53 
## df.residual  xlevels   call   terms 
##  0.00   0.00   0.00   0.00 

を、残された唯一の大型部品は当てはめ値とQR分解、両方のstargazerニーズがありますが、名前を削除することは多くのスペースを保存しています。名前を削除する(すなわちX行列だけ長く、広くない)の予測がたくさんある場合はほぼ同じくらいの助けにはなりません...

確認我々はそれが必要と何も削除していないにするためにstargazerを試してみてください:

library(stargazer) 
res <- capture.output(stargazer(reg1B,reg2,reg3, 
      title="Results", align=TRUE,type = "html", 
      style = "qje", out="Table1.html")) 
+0

Benありがとうございます。これは、オブジェクトのサイズを大幅に減らします。しかし、すべての標準偏差が0になるようです。 – Allen

+0

"stargazer' /' summaryのコードを見てください。必要なものが見つかるまで実験的に再構成/削除しないでください。 (あなたは残差を残す必要があるように見えますが、名前を取り除くことができるはずです) –

関連する問題