2012-11-14 10 views
8

Iは、以下のRコードを使用し、glm結果をデータなしで保存するか、または予測のための係数のみを保存する方法はありますか?

model_glm=glm(V1~. , data=xx,family="binomial"); 
save(file="modelfile",model_glm); 

MODELFILEのサイズは私の場合に1GIGされるデータ、限りであろう。 model_glmの結果でデータ部分を削除するにはどうしたらよいですか?小さなファイルしか保存できません。

+0

返されてからmodel.frameを防ぐためにglm' 'への呼び出しで' biglm'パッケージ – hadley

+3

設定 'モデル= false'をを使用してください。 – BenBarnes

答えて

6

glmへの電話でmodel = FALSEを設定すると、model.frameが返されないようにする必要があります。また、を設定すると、応答ベクトルが返されなくなります。 x = FALSEがデフォルト設定であり、model.matrixが返されないようにします。

この組み合わせでは、glmオブジェクトのサイズを縮小する必要があります。

はもちろん、あなたも

summary(model_glm)$coef 
+0

結果のモデルを見ましたか?それはまだ非常に重い:残差、近似値、完全なqr行列。 'biglm'パッケージは非常に軽いモデルオブジェクトを返します。 – hadley

+0

はい、 'bigglm'関数は実行可能な選択肢です。あなたが答えを投稿すると、私から投票を得るでしょう。それにもかかわらず、保存する前に 'glm'オブジェクトから必要なコンポーネントだけを選択することは可能です。 – BenBarnes

0

は、あなたはそれを保存する前に、モデルオブジェクト内のデータをNULLでき、標準エラーで、coef(model_glm)での係数を抽出したりすることができます。私は簡単なテストを行い、予測を生成しました。

model_glm$data <- NULL 
6

私は、生産におけるRの一部として、GLMを実行していたこの問題を持っていたし、GLMのサイズが大幅に私を鈍化。 $data以上のものを殺す必要があることがわかった。 Hereは私のポストで、以下の例があります。

> object.size(sg) 
96499472 bytes 
> sg$residuals <- NULL 
> sg$weights <- NULL 
> sg$fitted.values <- NULL 
> sg$prior.weights <- NULL 
> sg$na.action<- NULL 
> sg$linear.predictors <- NULL 
> sg$fitted.values <- NULL 
> sg$effects <-NULL 
> sg$data <- NULL 
> object.size(sg) 
3483976 bytes 
> sg$qr$qr <- NULL 
> object.size(sg) 
79736 bytes 
+0

コメント...あなたのブログでは、黄色で強調表示されたものをほとんど読むことができません。 –

+0

あなたは 'sg [c("残余 "、"重み付け "、" fitted.values ")] - そこにはあなたが取り除こうとしているすべての名前をそのベクトルに含めます。 – Dason

+1

@RichardScriven Oh my - それは私の目を燃やした。 – Dason

関連する問題