Я хочу добавить установленную функцию из GLM на ggplot
. По умолчанию он автоматически создает график со взаимодействием. Я задаюсь вопросом, могу ли я построить функцию, созданную из модели, без взаимодействия. Например,ggplot GLM встроенная кривая без взаимодействия
dta <- read.csv("http://www.ats.ucla.edu/stat/data/poisson_sim.csv")
dta <- within(dta, {
prog <- factor(prog, levels=1:3, labels=c("General", "Academic", "Vocational"))
id <- factor(id)
})
plt <- ggplot(dta, aes(math, num_awards, col = prog)) +
geom_point(size = 2) +
geom_smooth(method = "glm", , se = F,
method.args = list(family = "poisson"))
print(plt)
Однако я хочу участок от модели,
`num_awards` = ß0 + ß1*`math` + ß2*`prog` + error
Я пытался получить это таким образом,
mod <- glm(num_awards ~ math + prog, data = dta, family = "poisson")
fun.gen <- function(awd) exp(mod$coef[1] + mod$coef[2] * awd)
fun.acd <- function(awd) exp(mod$coef[1] + mod$coef[2] * awd + mod$coef[3])
fun.voc <- function(awd) exp(mod$coef[1] + mod$coef[2] * awd + mod$coef[4])
ggplot(dta, aes(math, num_awards, col = prog)) +
geom_point() +
stat_function(fun = fun.gen, col = "red") +
stat_function(fun = fun.acd, col = "green") +
stat_function(fun = fun.voc, col = "blue") +
geom_smooth(method = "glm", se = F,
method.args = list(family = "poisson"), linetype = "dashed")
Есть ли простой способ в ggplot
, чтобы сделать это эффективно?
спасибо, но я не думаю, что это вполне делает то, что ОП хочет. «без взаимодействия» означает, что они хотят построить предсказания аддитивной модели ('~ math + prog') ... –
Хорошо, что ваш ответ выглядит как самый короткий способ получить сюжет. «Без взаимодействия» и «num_awards = ß0 + ß1 * math + ß2 * prog + error» смотрели на меня так, как маргинальные эффекты были тем, что искали OP. – Daniel
... Я попробовал 'sjp.glm (mod, type =" y.pc ", axisLabels =" math ")', что я думаю, чего хочет OP, с sjPlot версии 1.9.4.2 (свежий от Github, если только Я прищурился) и получил пустой сюжет и предупреждающее сообщение ... –