如何在函数中使用lmer
我正在尝试编写一个函数来收集我在脚本中经常使用的一些调用如何在函数中使用lmer,r,lme4,R,Lme4,我正在尝试编写一个函数来收集我在脚本中经常使用的一些调用 我在示例中使用了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
我在示例中使用了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
}
如果我在控制台中调用了trimModel1函数的命令,那么模型摘要的前三行如下所示:Linear mixed model fit by REML
Formula: frm
Data: df
Linear mixed model fit by REML
Formula: Reaction ~ Days + (Days | Subject)
Data: sleepstudy
差异是一个问题,因为使用lme4包的多个包使用公式和数据字段。例如,当我使用上面的trimModel1函数时,effects包使用这些字段,下面这样的命令将不起作用:
library(effects)
plot(allEffects(fm1))
我在stackoverflow和R讨论组中查找解决方案,发现可以更改模型的公式字段。如果您取消注释lm@call$formula这样做:
trimModel1 <- function(frm, df) {
require(LMERConvenienceFunctions)
require(lme4)
dfname <- as.name(deparse(substitute(df)))
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
lm@call$data <- dfname
mcp.fnc(lm)
lm
}
trimModel1对于那些搜索数据参数的人:effects
在数据集具有保留名称时也会抛出此错误(all
)。
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))
trimModel1 <- function(frm, df) {
require(LMERConvenienceFunctions)
require(lme4)
dfname <- as.name(deparse(substitute(df)))
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
lm@call$data <- dfname
mcp.fnc(lm)
lm
}