r - 为什么绘制的预测值和边际效应不同?
问题描述
我正在使用具有以下规格的 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 < 67
coalshare <= 34
但是,当我ggpredict
从包中使用函数时,ggeffects
效果似乎大不相同:
me <- ggpredict(m12, terms = c("cabpol.e", "coalshare"))
plot(me)
预测值不应该与 所说明的边际效应相似ggpredict
吗?代码中有什么错误可以解释这种差异吗?谢谢!
解决方案
predict()
没有 - 参数的情况下newdata
,根据每个观察值的其他变量的值,返回每个观察值的预测值。
ggpredict()
,但是,计算(您在 中的两个变量)cabpol.e
的代表值的预测值。对于,因为它是连续的,所以选择平均值 +/- 1SD 作为“代表值”(有关更多详细信息,请参阅此小插图)。所有其他模型预测变量都保持不变(在它们的平均值或参考水平上)。但是,您可以使用调用添加原始数据点,请参阅此示例。coalshare
terms
coalshare
add.data = TRUE
plot()
我想要一条煤股 >= 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。
推荐阅读
- delphi - E2015 运算符不适用于此操作数类型(Delphi 10.2)
- c++ - 在 while 语句(第 40 行)出现错误,其中“输入未在此范围内声明”c++
- phpmyadmin - Phpmyadmin 在加载表时使用自定义查询
- angular - 从 json 创建动态表单时出错找不到名称为“数据”的控件
- java - 带有返回 ArrayList 的方法的 @MethodSource 的参数化 JUnit 测试
- react-native - react-native create 应用程序在创建时挂起
- javascript - 使用 fastify-multer 上传图片时出错
- python - pyqt中的切换按钮
- excel - 在 2 张纸上匹配多个标准并从 excel 中的匹配中提取一些数据
- java - 为什么 TextToSpeech synthesizeToFile 返回 -1?