R stargazer,lme4和lmerTest不兼容

时间:2015-07-09 13:31:22

标签: r latex lme4 stargazer

R新手在这里。我在使用lmerTeststargazer时遇到问题。我按照此处的教程让stargazer与R中的lme4一起使用。

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对象有多难?

2 个答案:

答案 0 :(得分:8)

只是查看代码,我认为这是一个stargazer问题。 stargazer可以读取类lmerMod的对象,而不是merModLmerTest。由于该黑客攻击描述需要stargazer包以便通过stargazer包含随机效果,我认为你被卡住了。

如果你真的需要lmerTest来完成你的工作(对于anova函数来说,对吗?),我建议如下。

  1. 运行你的模型并获得你的anova。看看你认为合适。
  2. 再次运行模型,但指定您希望lme4估算模型。您可以通过输入lme4::lmer(y + x1, Data)来完成此操作。由于您在lmerTest之后加载了lme4包,lmerTest实际上已成为运行lmer函数的默认包。这就是您的对象成为stargazer无法读取的类的原因。在一天结束时,它是相同的模型,只是以不同的方式存储。
  3. 最后,使用xtable在LaTeX中创建anova结果,如果那是您想要的。
  4. 此修订后的代码可以为您提供帮助。

    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)
    

答案 1 :(得分:4)

这是一个简单的解决方法。将lmerTest(在类merModLmerTest中)的输出转换为lmerMod类。这将与观星者兼容。

class(model) <- "lmerMod"