【问题标题】:Ploting interaction plot in ggplot using +1sd/-1sd following logistic regression在逻辑回归之后使用 +1sd/-1sd 在 ggplot 中绘制交互图
【发布时间】:2015-10-23 14:14:05
【问题描述】:

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

具体来说,我打算在 y 轴上用 DV 和在 x 轴上的分类 IV 制作一个图表。现在,我想为我的连续调节变量绘制两条线,分别表示自变量的 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)

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

【问题讨论】:

  • 请花时间创建一个reproducible example。您应该提供样本输入。如果可能的话,也许你可以画出你想要的输出,或者找到另一个看起来像你想要创建的图的图像。这样可以更轻松地为您提供帮助。

标签: r plot ggplot2 statistics interaction


【解决方案1】:

编辑1:在提供了一个小样本数据集后,我更新了我的答案。如果连续变量是您的主持人,我想您希望在 x 轴上有 content,在 y 轴上预测概率,md 的不同线,motivcentered 的 +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 作为主持人。

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

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

您有多种选择来更改绘图外观,例如:

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

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

编辑 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")

生成的图可能如下所示:

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

【讨论】:

  • 那么,请告诉我,fit 究竟可能是什么?
  • 由 lm、glm、lmer、glmer... 返回的拟合模型,带有交互项。请参阅我的帖子中的链接包小插图。
  • 好的,我添加了包小插图中显示的完整代码,所以它可以直接重现。
  • 我赞成它,因为它在说明交互图的概念方面“有用”,但我认为它实际上并没有解决使用逻辑来说明使用 ggplot2 进行交互图的请求回归模型。我怀疑制作一个ggplot“交互图”不会太难,但发问者没有回应作为示例使用数据集的请求。
  • 亲爱的,我真诚地感谢您的回复。我很抱歉没有提供数据集,我对论坛不熟悉。好吧,作为一个初学者,我什至不知道如何共享我的数据集(我使用 Rcmdr 命令从一个 spss 文件运行它)。如果它对社区有用,也许你会让我知道如何存储数据。再次感谢您的大力帮助。
猜你喜欢
  • 2014-04-22
  • 2017-11-05
  • 2016-08-09
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2021-11-23
  • 2015-05-15
  • 2020-08-31
相关资源
最近更新 更多