Я успешно использовал пакет effects
для моделей lm
и glm
раньше. Предполагается, что он поддерживает lme4
смешанные модели, но я не могу заставить его работать в большинстве случаев.
Любой совет? У меня есть воспроизводимый пример ниже с двумя действительными lmer
моделями, которые выдают effects
ошибки.
Существуют ли какие-либо альтернативные пакеты для расчета и построения модельных эффектов?
library(lme4)
library(effects)
# example from documentation works
fm1 <- lmer(angle ~ recipe * temperature + (1|recipe:replicate), cake,
REML = FALSE)
print(Effect(c("recipe", "temperature"), fm1))
#>
#> recipe*temperature effect
#> temperature
#> recipe 175 185 195 205 215 225
#> A 29.13333 31.53333 30.80000 33.53333 38.66667 35.06667
#> B 26.86667 29.40000 31.73333 32.13333 34.46667 35.26667
#> C 27.93333 28.93333 31.73333 30.86667 34.40000 35.73333
# this is a valid model with no singularities
fm2 <- lmer(angle ~ temp + (1 | replicate), cake)
print(fm2)
#> Linear mixed model fit by REML ['lmerMod']
#> Formula: angle ~ temp + (1 | replicate)
#> Data: cake
#> REML criterion at convergence: 1671.711
#> Random effects:
#> Groups Name Std.Dev.
#> replicate (Intercept) 6.260
#> Residual 4.849
#> Number of obs: 270, groups: replicate, 15
#> Fixed Effects:
#> (Intercept) temp
#> 0.5159 0.1580
# effects doesn't work
Effect(c("temp", "replicate"), fm2)
#> Error in Analyze.model(focal.predictors, mod, xlevels, default.levels, : the following predictor is not in the model: replicate
Effect(c("replicate"), fm2)
#> Error in Analyze.model(focal.predictors, mod, xlevels, default.levels, : the following predictor is not in the model: replicate
Effect(c("temp"), fm2)
#>
#> temp effect
#> temp
#> 180 190 200 210 220
#> 28.96159 30.54190 32.12222 33.70254 35.28286
# this doesn't work either
my_cake <- cake
my_cake <- within(my_cake, temp <- temp - mean(temp))
fm3 <- lmer(angle ~ (temp || replicate), my_cake)
Effect(c("temp", "replicate"), fm3)
#> Error in Analyze.model(focal.predictors, mod, xlevels, default.levels, : the following predictors are not in the model: temp, replicate
Effect(c("replicate"), fm3)
#> Error in Analyze.model(focal.predictors, mod, xlevels, default.levels, : the following predictor is not in the model: replicate
Effect(c("temp"), fm3)
#> Error in Analyze.model(focal.predictors, mod, xlevels, default.levels, : the following predictor is not in the model: temp
Created on 2022-04-22 by the reprex package (v2.0.1)
Ваша проблема в том, что вы пытаетесь построить эффекты, используя случайные термины. В вашем первом примере ваши эффекты включают только термины с фиксированным эффектом.
Самое близкое, что я могу получить быстро, это
cowplot::plot_grid(
plot(Effect("temp", fm2)),
lattice::dotplot(ranef(fm2))$replicate
)
или
library(sjPlot)
cowplot::plot_grid(
plot_model(fm2, "eff")$temp,
plot_model(fm2, "re")
)
emmeans
, ни effects
не обрабатывают случайные эффекты.sjPlot
имеет множество различных возможностей, но я не думаю, что обработка случайных эффектов как «эффектов» является одной из них.Как показано здесь, вы можете создать прогнозный график с 9 случайно выбранными уровнями, но (AFAICT) невозможно использовать> 9 уровней (из-за жестко закодированного ограничения на количество цветов!)
plot(ggpredict(fm2, terms = c("temp", "replicate [sample = 9]"), type = "random"))
Пакет
emmeans
поможет? cran.r-project.org/web/packages/emmeans/vinnettes/…