Несовместимость R stargazer, lme4 и lmerTest

R новичок здесь. У меня проблемы с работой lmerTest и stargazer. Я следовал инструкциям здесь, чтобы заставить stargazer работать с lme4 в R.

http://svmiller.com/blog/2015/02/quasi-automating-the-inclusion-of-random-effects-in-rs-stargazer-package/

Я запустил этот пример без проблем.

library(lme4)
library(stargazer)
data(cake)
summary(M1 <- lmer(angle ~ temp + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
summary(M2 <- lmer(angle ~ factor(temperature) + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
anova(M1,M2)
stargazer(M1, M2, style="ajps", title="An Illustrative Model Using Cake Data", dep.var.labels.include = FALSE, 
          covariate.labels=c( "Temperature (Continuous)", "Temperature (Factor $<$ 185)", "Temperature (Factor $<$ 195)", "Temperature (Factor $<$ 205)", "Temperature (Factor $<$ 215)", "Temperature (Factor $<$ 225)")
)

Хотя это работает, если я включу пакет lmerTest, stargazer перестанет работать.

library(lme4)
library(lmerTest)
library(stargazer)
data(cake)
summary(M1 <- lmer(angle ~ temp + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
summary(M2 <- lmer(angle ~ factor(temperature) + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
anova(M1,M2)
stargazer(M1, M2, style="ajps", title="An Illustrative Model Using Cake Data", dep.var.labels.include = FALSE, 
          covariate.labels=c( "Temperature (Continuous)", "Temperature (Factor $<$ 185)", "Temperature (Factor $<$ 195)", "Temperature (Factor $<$ 205)", "Temperature (Factor $<$ 215)", "Temperature (Factor $<$ 225)")
)

Error in objects[[i]]$zelig.call : 
  $ operator not defined for this S4 class

Я действительно хотел бы использовать stargazer, но мои эксперименты требуют использования merModLmerTest объектов, которые stargazer не поддерживаются. Кто-нибудь знает обходной путь? Насколько сложно было бы преобразовать объект merModLmerTest в объект lmerMod, который был бы совместим?


person Nick Ruiz    schedule 09.07.2015    source источник


Ответы (2)


Это простое решение. Преобразуйте вывод lmerTest (который находится в классе merModLmerTest) в класс lmerMod. Это будет совместимо со звездочётом.

class(model) <- "lmerMod"
person Daniel Yudkin    schedule 27.04.2018
comment
Это работает для всех, кто занимается серфингом в Интернете. Отлично сделано. - person TheSciGuy; 06.05.2018
comment
Это также помогает, если вы получаете Error: $ operator not defined for this S4 class, если вы даете модель взора от lmer. Полный рабочий код: lmm.data <- read.table("http://bayes.acs.unt.edu:8083/BayesContent/class/Jon/R_SC/Module9/lmm.data.txt", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) MLexamp.6 <- lmer(extro ~ open + agree + social + (1|school), data=lmm.data) class(MLexamp.6) <- "lmerMod" stargazer(MLexamp.6, type = "text") - person vasili111; 10.09.2019

Просто просматривая этот код, я думаю, что это stargazer проблема. stargazer может читать объекты класса lmerMod, но не merModLmerTest. Поскольку для описываемого автором взлома требуется пакет stargazer для включения случайных эффектов через stargazer, я думаю, вы застряли.

Если вам действительно нужен lmerTest для работы (похоже на функцию anova, верно?), Я бы порекомендовал следующее.

  1. Запустите свою модель и получите анову. Смотрите так, как считаете нужным.
  2. Снова запустите свои модели, но укажите, что вы хотите lme4 оценить модели. Вы делаете это, набирая lme4::lmer(y + x1, Data). Поскольку вы загрузили пакет lmerTest после lme4, lmerTest фактически становится пакетом по умолчанию для выполнения lmer функций. Вот почему ваш объект стал классом, который stargazer не может читать. В конце концов, это та же самая модель, только хранящаяся по-другому.
  3. Наконец, используйте xtable для создания результатов anova в LaTeX, если вы этого хотели.

Этот исправленный код должен вам помочь.

library(lme4)
library(lmerTest)
library(stargazer)
library(xtable)
data(cake)

# Get the table first.
summary(M1 <- lme4::lmer(angle ~ temp + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
summary(M2 <- lme4::lmer(angle ~ factor(temperature) + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))

stargazer(M1, M2, style="ajps", title="An Illustrative Model Using Cake Data", dep.var.labels.include = FALSE, 
      covariate.labels=c( "Temperature (Continuous)", "Temperature (Factor $<$ 185)", "Temperature (Factor $<$ 195)", "Temperature (Factor $<$ 205)", "Temperature (Factor $<$ 215)", "Temperature (Factor $<$ 225)")
)

# now for lmerTest
summary(M1a <- lmer(angle ~ temp + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
summary(M2a <- lmer(angle ~ factor(temperature) + (1 | replicate) + (1|recipe:replicate), cake, REML= FALSE))
anovadf <- data.frame(anova(M1a,M2a))
xtable(anovadf)
person steve    schedule 15.07.2015