16

3 つの固定効果変数を持つ 480.000 エントリの比較的大きなデータ フレームでロジスティック回帰を実行する必要があります。固定効果変数 A には 3233 レベル、変数 B には 2326 レベル、変数 C には 811 レベルがあります。全体として、6370 の固定効果があります。データは横断的です。glm回帰行列がメモリに対して大きすぎるため、通常の関数を使用してこの回帰を実行できない場合(メッセージ " Error: cannot allocate vector of size 22.9 Gb" が表示されます)。Macbook Air (OS X 10.9.5 8GB RAM) でこのリグレッションを実行する別の方法を探しています。16GB RAM のサーバーにもアクセスできます。

私はいくつかの異なる方法で問題を解決しようとしましたが、これまでのところ満足のいく結果にはなりませんでした:

lfe/felm :lfeパッケージのフェルム回帰関数を使用して、回帰を実行する前に固定効果を減算します。これは完全に機能し、わずか数分で上記の回帰を通常の線形モデルとして実行できました。ただし、lfeロジスティック回帰と glms はサポートしていません。したがって、フェルムはさまざまなモデルに適合するモデルについてのアイデアを得るのに最適でしたが、最終的なロジスティック回帰モデルでは機能しません。

biglm/bigglmbigglm :関数をより管理しやすいチャンクに分割するために使用することを考えました。ただし、いくつかのソース (例: link1link2link3) それが機能するためには、因子レベルがチャンク全体で一貫している必要があることに言及してください。つまり、各チャンクには、各因子変数の各因子が少なくとも 1 つ含まれている必要があります。因子 A と B には 1 回しか現れないレベルが含まれているため、セットを一貫したレベルで異なるチャンクに分割することはできません。固定効果 A の 10 個の因子と B の 8 個の因子を削除すると (小さな変更)、残りは 4 レベル以上の因子のみになり、データを 4 つのチャンクに分割することで、より管理しやすくなります。ただし、480.000 エントリが 4 つのチャンクにソートされ、3 つの因子のそれぞれの各因子レベルが少なくとも 1 回出現するように、df をソートする方法を理解する必要があります。

GlmmGS/glmgs : 同名のパッケージ内の関数は、「Gauss-Seidel」アルゴリズムを使用したロジスティック回帰glmmgsのパッケージのような固定効果減算を実行します。lfe残念ながら、パッケージは開発されていません。R に比較的慣れておらず、統計に関する深い経験がないため、出力を理解できず、通常の「効果の大きさ」、「モデルの適合性」、「 glm 回帰サマリーが提供する有意間隔」指標。

パッケージの作者にメッセージを送りました。彼らは親切に次のように答えました。

このパッケージは、glm オブジェクトと同じ形式の出力を提供しません。ただし、現在の出力が与えられると、ほとんどの適合統計 (推定値の標準誤差、適合度) を簡単に計算できます (CRAN バージョンでは、現在の出力は係数の推定値のベクトルであり、関連するベクトル標準誤差の; 共分散成分についても同じですが、ランダム効果なしでモデルを適合させる場合は、それらについて心配する必要はありません)。標準誤差の計算に使用される共分散行列は、Gauss-Seidel アルゴリズムに関連付けられた精度行列の対角ブロックの逆数であるため、同時尤度の標準誤差を過小評価する傾向があることに注意してください。私はもはやパッケージを保守していません。特定の詳細に入る時間がありません。 マニュアルで参照されている紙、他のすべてはペンと紙であなたが解決する必要があります:)。

統計の教育を受けていない人がそれを理解できるように「ほとんどの適合統計を簡単に計算する」方法を誰かが説明できる場合 (不可能かもしれません)、またはこれがどのように行われるかの例を示す R コードを提供することができれば、私はとても感謝しております!

Revolution Analytics : Mac で Windows 7 をシミュレートする仮想マシンに Revolution Analytics Enterprise をインストールしました。プログラムには、RxLogit大規模なロジスティック回帰用に最適化されたという関数があります。RxLogit私が得る関数を使用するthe error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation)と、その関数もメモリの問題に遭遇しすぎているようです。ただし、このソフトウェアを使用すると、分散コンピューティング クラスターで回帰を実行できます。したがって、大量のメモリを備えたクラスターでコンピューティング時間を購入することで、「問題を殺す」ことができました。しかし、革命分析プログラムは、私が知らない数式や方法を提供するのではないかと思いlfeますbigglm.

MatrixModels/glm4 : ある人は、計算を高速化するために、属性を持つパッケージのglm4関数を使用することを提案しました。すべての固定効果で回帰を実行すると、 「エラーが発生します。固定効果変数 B または A と C のみで実行すると、計算が機能し、オブジェクトが返されます。出力を標準的な方法ではうまくいかないように見えるので、私にとっては理にかなっているフォームです。MatrixModelssparse = TRUEglm4"Error in Cholesky(crossprod(from), LDL = FALSE) : internal_chm_factor: Cholesky factorization failed"glpModel"glmmGSsummary()

上記の問題のいずれか、またはメモリの制約がある R で複数の大きな固定効果を使用してロジスティック回帰を実行するためのまったく異なるアプローチについてアドバイスをいただければ幸いです。

4

4 に答える 4

7

チェックアウト

glmmboot{glmmML}

http://cran.r-project.org/web/packages/glmmML/glmmML.pdf

Brostrom と Holmberg による素晴らしいドキュメントもあります ( http://cran.r-project.org/web/packages/eha/vignettes/glmmML.pdf ) 。

彼らのドキュメントの例を次に示します。

dat <- data.frame(y = rbinom(5000, size = 1, prob = 0.5),
               x = rnorm(5000), group = rep(1:1000, each = 5))
fit1 <- glm(y ~ factor(group) + x, data = dat, family = binomial)

require(glmmML)
fit2 <- glmmboot(y ~ x, cluster = group,data = dat)

計算時間の差が「大きい」!

于 2015-02-27T11:59:42.067 に答える
4

speedglm後世のために、大規模なデータセットでロジスティック回帰を実行しようとするときに役立つことがわかったパッケージもお勧めします。よりも約半分のメモリを使用しているようで、はるかに速く終了しglmます。

于 2016-08-29T23:36:36.763 に答える