我正在尝试在R中绘制类似SPSS样式的审核图here (bottom image)的内容。我尝试使用QuantPsyc
包但完全失败了。有人可以帮我正确地绘制这个吗?我不期望图像中的确切数据,这只是我想要的格式。我在这个例子中使用data(tra)
。我试过了:
data(tra)
lm.mod1 <- moderate.lm(beliefs, values, attitudes, tra)
ss.mod1 <- sim.slopes(lm.mod1, tra$values)
## requires user interaction
graph.mod(ss.mod1,beliefs,attitudes,tra,"Interaction Example")
这根本不是我想要的。感谢我发现this post的评论,这使我得到了这段代码:
library(effects)
data(Prestige)
mod5 <- lm(prestige ~ income*type + education, data=Prestige)
eff_cf <- effect("income*type", mod5)
print(plot(eff_cf, multiline=TRUE))
更接近,但仍然没有正确的格式,具体来说:
绘制的数据不限于平均值之上和之下的一个标准偏差(我相信它在示例中)
x轴被标记(不在SPSS中)
答案 0 :(得分:2)
您可以通过预测值手动相对轻松地完成此操作。我猜你的帖子中有某种拼写错误,因为“type”是Prestige数据集中的分类预测器。我假设你想要“收入*教育”。对于绘图,我使用ggplot2
包只是因为我比它更熟悉它而不是基础图形,但也可能有一个解决方案。我已经完成了这里的绘图细节,但似乎你真的想要完全模仿你链接的例子,这就是我所做的。
# model
mod5 <- lm(prestige ~ income * education, data = Prestige)
# first, create data frame to store predictions
m <- mean(Prestige$education) # mean of education
s <- sd(Prestige$education) # sd of education
newdata <- data.frame(education = c(rep(m - s, 2), rep(m, 2), rep(m + s, 2)), # add in +/- 1 SD and mean
income = with(Prestige, rep(range(income), 3))) # range of income values
# predict new values using the predict() function
newdata$prestige.predicted <- predict(mod5, newdata)
# plot
library(ggplot2)
ggplot(newdata, aes(x = income, y = prestige.predicted, linetype = factor(education))) +
geom_line() +
scale_linetype_manual(values = c("dotted", "solid", "dashed"), name = "Education", labels = c("1 SD Below Mean", "Mean", "1 SD Above Mean")) +
theme_bw() +
theme(axis.text.x = element_blank(), # get rid of axis labels
axis.ticks.x = element_blank(),
panel.grid.major.x = element_blank(), # get rid of vertical lines
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_line(color = "black"), # make horizontal gridlines black
panel.grid.minor.y = element_blank())