0

私は非常に大規模なグローバル モデルのパッケージ MuMIn を足がかりとして使用して、各変数の重要度の値を取得することを最終目標として浚渫を実行してきました。dredge は 2 日間で正常に実行されましたが、後で 2 つの変数を追加する必要があり、それらを追加した後も実行が完了していません。Rがクラッシュする前に初めて7日間実行されました(私は推測しています)。次にチェックしたときにRがシャットダウンし、RStudioを再度起動したときにエラーメッセージがなく、新しいウィンドウだったからです。コードを再度開始したところ、今度は同じことを行う前に 8 日間実行されました。

コードの実行に時間がかかる理由が明確になるように、グローバル モデルとサブセットについて説明します。これは、19 の変数と 4 つの相互作用項 (カテゴリカルである「年」を除いてすべて数値) を持つゲームです。一方が他方の代替バージョンであるため、モデルに一緒に表示できない特定の変数があるため、これらをサブセット化しました。交互作用項がモデル内にある場合、項の平滑化されていないバージョンが自動的に含まれるため、項の平滑化されたバージョンは主効果になることができず、項の平滑化されていないバージョンは項の平滑化されたバージョンがすでに存在する可能性があるため、交互作用項がモデルにない場合の主効果。どちらのオプションも、モデル内の 1 つの項の二重表現になるため、それらのオプションもサブセット化しました。グローバル モデルとドレッジのコードを示すコードを次に示します。

library(MuMIn)
options(na.action = "na.fail")

real.model2 <- gam(resqpa ~ factor(year) + s(elev) + factor(year)*elev + 
s(bf1) + s(bf2) + s(bf3) + s(open) + s(water) + s(bfbs1) + s(bfbs2) + 
s(bfbs3) + s(bs2) + s(bs3) + s(mix) + s(cs1) + s(cs2) + factor(year)*bfbs2 + 
factor(year)*bfbs3 + factor(year)*bs2 + factor(year)*bs3 + s(allbf) + s(ct1) 
+ s(ct2) + s(allcs), family=binomial(link="cloglog"))

fits6 <- dredge(real.model2, subset =  (!("s(allbf)" & "s(bf1)")) 
            & (!("s(allbf)" & "s(bf2)")) 
            & (!("s(allbf)" & "s(bf3)")) 
            & (!("s(ct1)" & "s(bf1)")) 
            & (!("s(ct1)" & "s(bfbs1)")) 
            & (!("s(ct2)" & "s(bf2)")) 
            & (!("s(ct2)" & "s(bfbs2)"))
            & (!("s(ct2)" & "s(bs2)"))
            & (!("s(allcs)" & "s(cs1)"))
            & (!("s(allcs)" & "s(cs2)"))
            & (!(`s(elev)` & "elev:factor(year)")) & (!elev  | `elev:factor(year)`) 
            & (!(`s(bfbs2)` & "bfbs2:factor(year)")) & (!bfbs2  | `bfbs2:factor(year)`) 
            & (!(`s(bfbs3)` & "bfbs3:factor(year)")) & (!bfbs3  | `bfbs3:factor(year)`) 
            & (!(`s(bs2)` & "bs2:factor(year)")) & (!bs2  | `bs2:factor(year)`) 
            & (!(`s(bs3)` & "bs3:factor(year)")) & (!bs3  | `bs3:factor(year)`))

R が 2 回目にクラッシュした後、診断を実行しました。ただし、エラーのタイム スタンプは R がクラッシュした時刻と一致していないため、これが参考になるかどうかはわかりません。

24 Sep 2018 03:06:26 [rdesktop] ERROR system error 231 (All pipe instances 
are busy); OCCURRED AT: virtual void 
rstudio::core::http::NamedPipeAsyncClient::connectAndWriteRequest()

これは、より多くの計算能力が必要なことに問題がありますか?それとも、このコードを完了するためのより簡潔で正確な方法はありますか? これについて何か助けてくれてありがとう!

4

1 に答える 1

1

RStudio で R を実行した場合、エラーの原因を特定するのは困難です。RGui ではなく (または経由で R CMD batch) コンソールでプレーン R で R スクリプトを実行してみてください。そうすれば、クラッシュ後も出力が保持されます。また、dredge引数traceTRUEに設定すると、どのモデルが問題を引き起こしているかがわかります。

もう 1 つの方法は、 をlist介してすべてのモデル呼び出しのを作成することです。この呼び出しdredge(..., evaluate = FALSE)を後でループできますeval。これらすべてのモデル オブジェクトをリストに保存できますが、これは非常に巨大なオブジェクトを作成するためsave、メモリに保持するよりも毎回ディスクに保存したり、rbind後でマージできる部分的なモデル選択テーブルを作成したりする方がよい場合があります。の上。このアプローチには、以前にクラッシュしたポイントを超えてループを再開できるという利点があります (save必要なデータがすべてディスク上にある場合)。

于 2018-09-26T13:19:40.157 に答える