首页 > 解决方案 > 为什么绘制的预测值和边际效应不同?

问题描述

我正在使用具有以下规格的 LMER 模型:

m12 <- glmer(vote_share ~
              previous_vote_share + coal + coalshare*cabpol.g + coalshare*cabpol.s + coalshare*cabpol.e +
              (1|country_name) + (1|party_name),
            data = df)

mtable(m12)

Calls:
m12: lme4::lmer(formula = vote_share ~ previous_vote_share + coal + 
    coalshare * cabpol.g + coalshare * cabpol.s + coalshare * 
    cabpol.e + (1 | country_name) + (1 | party_name), data = df)

======================================
  (Intercept)               3.977**   
                           (1.429)    
  previous_vote_share       0.689***  
                           (0.025)    
  coal                     -2.360*    
                           (0.967)    
  coalshare                 0.029     
                           (0.016)    
  cabpol.g                  0.615     
                           (0.482)    
  cabpol.s                 -0.383     
                           (0.354)    
  cabpol.e                 -0.425     
                           (0.454)    
  coalshare x cabpol.g     -0.016     
                           (0.011)    
  coalshare x cabpol.s      0.008     
                           (0.008)    
  coalshare x cabpol.e      0.022*    
                           (0.011)    
--------------------------------------
  Var(residual)            30.038     

--------------------------------------
  Var(~1|party_name)        8.633     

--------------------------------------
  Var(~1|country_name)      3.833     

--------------------------------------
  Total                  1390         
  party_name              284         
  country_name             37         
--------------------------------------
  Log-likelihood        -4469.922     
  Deviance               8939.844     
  AIC                    8965.844     
  BIC                    9033.925     
======================================

我想绘制 和 的交互cabpol.e效果coalshare

所以这里是vote_share(因变量)与这两个变量的预测值:

df$pred.vote_share <- predict(m12)

ggplot(df, aes(y = pred.vote_share, x = cabpol.e, color = coalshare)) +
  geom_point() +
  scale_color_gradient2(midpoint=50, low="blue", high="red", space ="Lab") +
  geom_smooth(method='lm', se=F)

在此处输入图像描述

(在旁注问题上,如何为连续数据的子集添加不同的趋势线?我想为和coalshare >= 67设置一条线。)coalshare > 33 & coalshare < 67coalshare <= 34

但是,当我ggpredict从包中使用函数时,ggeffects效果似乎大不相同:

me <- ggpredict(m12, terms = c("cabpol.e", "coalshare"))
plot(me)

在此处输入图像描述

预测值不应该与 所说明的边际效应相似ggpredict吗?代码中有什么错误可以解释这种差异吗?谢谢!

标签: rggplot2predict

解决方案


predict()没有 - 参数的情况下newdata,根据每个观察值的其他变量的值,返回每个观察值的预测值。

ggpredict(),但是,计算(您在 中的两个变量)cabpol.e的代表值的预测值。对于,因为它是连续的,所以选择平均值 +/- 1SD 作为“代表值”(有关更多详细信息,请参阅此小插图)。所有其他模型预测变量都保持不变(在它们的平均值或参考水平上)。但是,您可以使用调用添加原始数据点,请参阅此示例coalsharetermscoalshareadd.data = TRUEplot()

我想要一条煤股 >= 67、煤股 > 33 和煤股 <67 和煤股 <= 34 的线。)

您不能为值区域绘制线(例如 colshare > 33 和 coalshare < 67)。这就是为什么ggpredict()选择“代表值”。如果您查看平均值和 +/- 1 SD 的值,这些值(18.1、52.3、86.5)看起来像是在您想要的范围的中间,所以这些确实可能反映了您正在寻找的线条出色地。

如果您想使用除predict()(由 使用ggpredict())之外的其他功能,您可以替换ggpredict()ggeffect()(调用效果包中的函数)或ggemmeans()(使用emmeans包)。所以你可以利用它们的功能,但创建 ggplot-plots。


推荐阅读