Я пытаюсь автоматизировать способ определения и удаления фиксированных эффектов из выражения смешанной модели с использованием lmer
. Вкратце, мой подход заключается в использовании fixef
для получения имен фиксированных эффектов, затем используйте update
, чтобы удалить те из оператора модели. Я столкнулся несколько коряг ...удалить все фиксированные эффекты из смешанной модели
Во-первых, если фиксированные факторы не являются непрерывными, то fixef
возвращает имена переменных добавляемые с уровнями лечения (например, levels(variable1)=c("A","B","C")
вернется variable1B
и variable1C
). Я попытался обойти это с частичным сопоставлением, но я уверен, что он не будет успешным во всех случаях (см. Ниже).
Во-вторых, если есть взаимодействия, частичное совпадение разваливается и идентифицирует только первое слагаемое (например, только 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([email protected])[pmatch(colnames([email protected]),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=""))
Любая помощь приветствуется!
Ах-ха, очень умный, принимая противоположный подход и изолируя случайные факторы. Не знал о 'findbars'. Спасибо, Бен! – jslefche