を使用して、混合モデル ステートメントから固定効果を特定して削除する方法を自動化しようとしていlmer
ます。簡単に言えば、私のアプローチは、 を使用fixef
して固定効果名を取得し、 を使用update
してそれらをモデル ステートメントから削除することです。いくつかの障害に遭遇しました...
まず、固定因子が連続的でない場合fixef
は、変数名に処理レベルが追加されて返されます (たとえば、およびlevels(variable1)=c("A","B","C")
が返さvariable1B
れvariable1C
ます)。部分一致でこれを回避しようとしましたが、すべての場合に成功するとは限りません (以下を参照)。
第 2 に、交互作用がある場合、部分一致はバラバラになり、最初の項のみを識別します (たとえば、 のみvariable1
が から返されvariable1:variable
ます)。これを回避する方法がわかりません。
コード例を次に示します。
#Create example data
set.seed(9)
data=data.frame(y=rnorm(100,5,10),y.binom=rbinom(100,1,0.5),
y.poisson=rpois(100,5),fixed1=rnorm(100,20,100),
fixed2=c("Treatment1","Treatment2"),covar=rnorm(100,20,100),
rand1=LETTERS[1:2],
rand2=c(rep("W",25),rep("X",25),rep("Y",25),rep("Z",25)))
library(lme4)
#Fit generalized linear mixed effects model
mod=glmer(y.poisson~fixed1*fixed2+covar+(1|rand2/rand1),family="poisson",data)
#Pull out names of fixed effects
fixef.names=do.call(rbind,lapply(1:length(names(fixef(mod))[-1]),function(j) {
d=colnames(mod@frame)[pmatch(colnames(mod@frame),names(fixef(mod))[-1][j])>0]
d[!is.na(d)] } ) )[,1]
# Generate null model (intercept and random effects only, no fixed effects)
null.mod=update(mod,paste(".~.-",paste(fixef.names,collapse="-"),sep=""))
どんな助けでも大歓迎です!