r - 在逻辑回归后使用 +1sd/-1sd 在 ggplot 中绘制交互图

标签 r plot ggplot2 statistics interaction

我想绘制一个交互作用(一个自变量 -3 模态被视为分类,一个调节变量 -7 模态被视为连续;最后,一个二元因变量 -0 或 1)。

具体来说,我打算制作一个图表,其中 DV 位于 y 轴,分类 IV 位于 x 轴。现在,我想为连续调节变量绘制两条线,代表自变量 3 个水平的每个水平的平均值的 +1sd 和 -1sd(正如传统上在此类图表中所做的那样),而不是代表每种模式的七行。

如何让R软件使用ggplot计算并仅在图表中显示这两个特定信息片段?

[编辑 1] 这是我的数据的子集:内容是分类 IV、Motivcentered、主持人(连续),resp 是我的 DV(二进制):

structure(list(content = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3),
resp = c(1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1), 
motivcentered = c(-0.25, 1.75, 1.75, -0.25, -2.25, 1.75, 1.75, -1.25, 0.75, -0.25, 0.75, -0.25, -4.25, -1.25, 1.75), 
id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), 
item = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), 
.Names = c("content", "resp", "motivcentered", "id", "item"), 
row.names = c(NA, -15L), 
class = "data.frame", codepage = 65001L)

[编辑 2] 我现在尝试使用分类 ID(带有连续调节器和分类 DV)来绘制新数据。分类 ID 是与我之前的请求的唯一区别(见上文)。我在绘制这样的图表时遇到问题(仍然为主持人绘制 +1sd、-1sd 和平均线),因为它没有显示我的 IV 的每种模式(3 种模式,应该出现在 x 轴上)。你们中有人知道如何使用提供的子集来处理该问题吗?

最佳答案

编辑1:在提供了一个小样本数据集后,我更新了我的答案。如果连续变量是您的调节者,我想您希望 x 轴上有 content ,y 轴上有预测概率,并且 md 为不同的线,+1 和 -1 sd 为 以动机为中心

我将您的数据复制到名为 mydat 的数据框中:

# make categorical
mydat$content <- as.factor(mydat$content)
# fit model
fit <- glm(resp ~ content * motivcentered, 
           family = binomial("logit"), 
           data = mydat)
# load library
library(sjPlot)
# show plot
sjp.int(fit, type = "eff", 
        moderatorValues = "meansd", 
        swapPredictors = T)

moderatorValues 表示您想要使用调解器变量的哪些值,选项 meansd 表示平均值,+1/-1 sd。默认情况下,sjp.int 假定具有较少唯一值的变量作为调节器,但是,您希望反过来。因此,swapPredictors 现在使用 content 作为 x 轴上的 DV,并使用 motivcentered 作为调节器。

情节看起来像这样(有点奇怪,很可能是由于观察数量有限):

enter image description here

对于逻辑回归,y 轴上只有值 0 和 1 几乎没有意义,因此显示了对预测概率的交互影响。

您可以使用多种选项来更改绘图外观,例如:

sjp.int(fit, 
        type = "eff", 
        moderatorValues = "meansd", 
        swapPredictors = T, 
        showCI = T, 
        facet.grid = T, 
        legendLabels = c("-1 sd", "mean", "+1 sd"))

(请注意,由于观察有限,该图看起来再次有点奇怪,尤其是置信区间)

enter image description here

编辑2:原始帖子首先没有可重现的示例,因此我在这里尝试了“通用”猜测:可能是 sjPlot-packagesjp.int 函数适合你吗?

假设您希望交互项具有边际效应,且平均值和 +/- 1 sd,则函数调用将如下所示:

library(sjmisc) # for sample data
data(efc)
mydf <- data.frame(usage = efc$tot_sc_e,
                   sex = efc$c161sex,
                   education = efc$c172code,
                   burden = efc$neg_c_7,
                   barthel = efc$barthtot)
# convert gender predictor to factor
mydf$sex <- relevel(factor(mydf$sex), ref = "2")
# fit samplemodel
fit <- lm(usage ~ .*., data = mydf)

library(sjPlot)
sjp.int(fit, 
        type = "eff",
        moderatorValues = "meansd")

结果图可能如下所示:

enter image description here

该图取自this package vignette ,部分效果显示绘图类型的不同调节器值;显示所有相关示例的部分称为“有意选择连续调节器的值”。

关于r - 在逻辑回归后使用 +1sd/-1sd 在 ggplot 中绘制交互图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753968/

相关文章:

具有发散调色板的 R 热图

linux - R 在 shell 脚本 sh 中处理的文本数据

python - 基于列而不是行索引/索引的 Bokeh 链接/刷光

r - 在没有循环的情况下找到时间序列中最大的下降/上升(最好使用 tidy/dplyr)?

r - 如何在ggplot2中将标签居中放置在并排条形图上

r - 转换数据框中的列表调整化合物名称

r - 如何将列 append 到列表中的 data.frames,其中该列应包含这些 data.frames 的计算读出结构信息?

r - R 中的 corrplot 参数

python - 形状摘要图上的颜色图栏未正确显示

r - 我可以在 ggplot 条形图/柱形图上方添加分组线标签吗?