R语言 如何绘制交互作用项的标准差变化的边际效应?

zed5wv10  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(121)

我想画出交互作用项的标准差变化的边际效应。我试图绘制交互作用项的条件边际效应,模型的偏导数(斜率),但由于我的数据的性质和变化,单位变化可能有点误导。因此,我想把数字转换成标准差的变化,而不是单位的变化,这样我就可以得到实质的效果,以便更好地解释。我目前正在使用marginaleffects包来绘制它。这里有一个例子。
假设我有下面的模型,我想看看hp对mpg的边际效应在disp的值上(只是作为例子,我不确定这些变量的含义):

data(mtcars)
mod <- lm(mpg ~ hp * disp + factor(am), data = mtcars)
summary(mod)

Call:
lm(formula = mpg ~ hp * disp + factor(am), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3599 -1.7385 -0.2522  0.7915  5.2211 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.600e+01  3.678e+00   9.786 2.25e-10 ***
hp          -9.196e-02  2.441e-02  -3.767 0.000816 ***
disp        -5.418e-02  1.858e-02  -2.915 0.007062 ** 
factor(am)1  2.289e+00  1.455e+00   1.573 0.127297    
hp:disp      2.269e-04  9.377e-05   2.419 0.022563 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.623 on 27 degrees of freedom
Multiple R-squared:  0.835, Adjusted R-squared:  0.8105 
F-statistic: 34.15 on 4 and 27 DF,  p-value: 3.355e-10

要查看条件边际效应,我使用marginaleffects包绘制图:

library(marginaleffects)
plot1 <- plot_slopes(mod, variables = "hp", condition = "disp") +
      geom_hline(yintercept=0,linetype=2) +
      geom_rug(aes(x=disp), data=mtcars, sides="b") +
      theme_grey()
    plot1

其结果为下图:

它显示了hp在disp上单位变化的边际效应(斜率)。而不是一个单位的变化,我想得到的边际效应的标准差变化的hp。我愿意使用其他软件包和替代方法来绘制边际效应。不知道边缘效果包的可塑性有多大。如果你需要进一步澄清,请告诉我。

6tdlim6h

6tdlim6h1#

您可以使用plot_comparisons()函数轻松实现这一点,其中您可以使用variables参数来指定预测值增加1 SD:

library(marginaleffects)

mod <- lm(mpg ~ hp * disp + factor(am), data = mtcars)

plot_comparisons(mod, variables = list(hp = "sd"), condition = "disp")

当然,艾伦-卡梅隆的解决方案在这个简单的线性模型中是等价的。这种方法的好处是它允许一系列其他比较(例如:四分位数,2SD,自定义增量),而不必弄清楚适当的标准化是什么,也不必重新拟合模型。

4nkexdtk

4nkexdtk2#

显而易见的解决方案是将scale作为感兴趣的变量(在本例中为hp),它等价于(hp - mean(hp))/sd(hp)。这样,1个单位的变化 * 将 * 是1个标准差的变化。

library(marginaleffects)
library(ggplot2)

mtcars2 <- within(mtcars, hp <- scale(hp)[,1])
mod <- lm(mpg ~ hp * disp + factor(am), data = mtcars2)

plot_slopes(mod, variables = "hp", condition = "disp") +
  geom_hline(yintercept = 0, linetype = 2) +
  geom_rug(aes(x = disp), data = mtcars2, sides = "b") +
  theme_grey()

创建于2023-09-28带有reprex v2.0.2

相关问题