スクリプトでよく使用するいくつかの呼び出しを収集する関数を作成しようとしています
。例では lme4 パッケージの sleepstudy データを使用しています。これが
(簡略化されたバージョンの) 私が始めた関数です。
trimModel1 <- function(frm, df) {
require(LMERConvenienceFunctions)
require(lme4)
lm<-lmer(frm,data=df)
lm.trimmed = romr.fnc(lm, df)
df = lm.trimmed$data
# update initial model on trimmed data
lm<-lmer(frm,data=df)
# lm@call$formula<-frm
mcp.fnc(lm)
lm
}
以下のようにこの関数を呼び出すと:
(fm1<-trimModel1(Reaction ~ Days + (Days|Subject),sleepstudy))
出力の最初の 3 行は次のようになります。
Linear mixed model fit by REML
Formula: frm
Data: df
コンソールで trimModel1 関数のコマンドを呼び出した場合、モデルの概要の最初の 3 行は次のようになります。
Linear mixed model fit by REML
Formula: Reaction ~ Days + (Days | Subject)
Data: sleepstudy
lme4 パッケージを使用するいくつかのパッケージは式とデータ フィールドを使用するため、違いが問題になります。たとえば、効果パッケージはこれらのフィールドを使用し、上記の trimModel1 関数を使用すると、以下のようなコマンドは機能しません。
library(effects)
plot(allEffects(fm1))
解決策を求めて、stackoverflow と R のディスカッション グループを調べたところ、モデルの数式フィールドを変更できることがわかりました。trimModel1 関数の行のコメントをlm@call$formula<-frm
外すと、集計の数式フィールドが正しく表示されます。残念ながら、エフェクト パッケージから関数を実行すると、まだエラーが発生します。
Error in terms.formula(formula, data = data) :
'data' argument is of the wrong type
これは、データ フィールドがまだ正しくないためです。
私が見つけた別の解決策は、次の関数です。
trimModel2 <- function(frm, df) {
require(LMERConvenienceFunctions)
require(lme4)
lm<-do.call("lmer",list(frm,data=df))
lm.trimmed = romr.fnc(lm, df)
df = lm.trimmed$data
# update initial model on trimmed data
lm<-do.call("lmer",list(frm,data=df))
mcp.fnc(lm)
lm
}
コンソールに次のコマンドを入力すると、エラーは発生しません。
(fm2<-trimModel2(Reaction ~ Days + (Days|Subject),sleepstudy))
plot(allEffects(fm2))
allEffects 関数は機能しますが、問題は、fm2 モデルの要約に生の sleepstudy データが表示されることです。これは sleepstudy データでは大きな問題ではありませんが、非常に大きなデータセットでは、モデルを表示するときに Rstudio がクラッシュすることがありました。
これらの機能の 1 つ (または両方) を正しく機能させる方法を知っている人はいますか?
fm1@call$data フィールドを変更する必要があると思いますが、方法がわかりません。