3

lmer(lme4パッケージから)を実行したいdfにいくつかの変数(列)があります。
df というデータフレームがあるとします。

par1   par2 resp1 resp2
plant1 rep1 3     8
plant2 rep2 5     2
...

これを行う関数を作成しようとしていますが、引数を渡して関数で使用するのに問題があります。

model1 = function(df, varname){
  library(lme4)
  model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)
  return(model1)
}

resp1model = model1(df, "resp1")
resp2model = model1(df, "resp2")

誰かがこれを行うための最良の方法についてアドバイスできますか? 多分関数は答えではありませんか?ループ?その理由は、関数が機能するようになったら、関数がモデルから他のものを返すようにしたいからです..AIC、BLUPなど..

4

3 に答える 3

4

私はこのようにしました、さらに良いかもしれません

varlist=names(df)[i:j] #define what vars you want

blups.models <- lapply(varlist, function(x) {
  lmer(substitute(i ~ (1|par1)+(1|par2)+(1|par3), list(i = as.name(x))), data = df, na.action=na.exclude)
})

ここに、必要なすべての変数のモデルのリストがあります

于 2014-03-02T23:19:20.523 に答える
2

別の方法は、あなたの行を置き換えることです:

model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)

model1 = lmer(paste0(varname," ~ + (1 | par1) + (1 | par2)"), data=df)

これにより、式が文字列として渡され、式lmer(...)が強制されます。

于 2014-03-02T23:31:23.017 に答える
0

ここに別のアプローチがあります..もう少し複雑に思えます..しかし、完全を期すために追加すると思いました: R:混合効果モデル(lme4)で複数の応答(従属変数)を分析する

于 2014-03-04T22:01:14.063 に答える