我想绘制一个交互作用(一个自变量 -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
作为调节器。
情节看起来像这样(有点奇怪,很可能是由于观察数量有限):
对于逻辑回归,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-package 的 sjp.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 ,部分效果显示绘图类型的不同调节器值;显示所有相关示例的部分称为“有意选择连续调节器的值”。
关于r - 在逻辑回归后使用 +1sd/-1sd 在 ggplot 中绘制交互图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753968/