Search code examples
rmodeling

Error message when making QQ plots of residuals (lmer)


Does anyone know how to fix this error when trying to make QQ plots of residuals, data and code below;

head(final_data)
              Country             Continent Life_Expectancy 
1         Afghanistan Eastern Mediterranean        62.68935                         
2             Albania                Europe        76.37373                         
3             Algeria                Africa        76.36365                      
4              Angola                Africa        62.63262                       
5 Antigua and Barbuda              Americas        74.99754                       
6           Argentina              Americas        76.94621                        

mod6 = lmer(Life_Expectancy ~ Concentration_of_PM2.5 + 
            (1|Continent),
     data=final_data)

res5 = data.frame(Residuals=resid(mod5),
              Continent=final_data$Continent,
              Fitted=fitted(mod5))

qq_plot6 = ggplot(final_data, aes(sample = mod6$residuals)) + 
  geom_qq() +
  geom_qq_line(col = 'red') +
  xlab('Theoretical residuals') +
  ylab('Sample residuals') +
  ggtitle('QQ plot for residual mod6') +
  theme(plot.title = element_text(hjust = 0.5))

I get this error when making the QQ plot here:

Error in mod6$residuals : $ operator not defined for this S4 class


Solution

  • merMod objects (the results of an lmer fit) aren't lists (they're S4 objects) and don't have a $residuals element. Try residuals(mod6) instead; it's always better practice to use accessor methods (which don't depend on the internal structure of model objects) anyway.

    See also: broom.mixed::augment(), lattice::qqmath(mod6), performance::check_model(mod6).