首页 > 解决方案 > 如何在 R 中运行具有二元结果的高原二次模型?

问题描述

我正在尝试在 R 中建立一个广义线性模型,其中 y 的预测概率遵循二次曲线,但在最大值处达到一个平台。

我已经找到了一些使用 Mistcherlich 曲线 ( https://plantcropmodels.files.wordpress.com/2016/11/growth-models1.pdf ) 的线性模型的解决方案,但是,我正在努力为 glm 找到一个解决方案。

查看 R - mtcars 中的示例数据集 - 我想将 vs 建模为 mpg 的函数,但与下面的方法不同,我希望 vs 的预测概率在某个最大值处达到稳定。在示例中,这将是 mpg==32.4 但我希望如果应用不同的函数,这可能会有所不同(否则我只需复制所有 mpg >= 32.4 值的最大值

model <- glm(vs ~ poly(mpg,2), data = mtcars, family = "binomial")
summary(model)

temp.data <- expand.grid(mpg = seq(10, 34, 0.1))
temp.data$pred <- predict(model, temp.data, type="response", allow.new.levels=TRUE)
glimpse(temp.data)
temp.data <- temp.data %>% group_by(mpg) %>% mutate(predprob = mean(pred, na.rm=TRUE))

# which mpg has the highest predicted probability
temp.data[which.max(temp.data$predprob), c("mpg", "predprob")] # 32.4
output <- aggregate(temp.data, by = list(temp.data$mpg),FUN = mean, na.rm=TRUE)
output
output[unique(output$mpg), c("mpg", "predprob")]


reg <- ggplot(temp.data, aes(x=mpg, y=predprob)) + 
  geom_line(color = "black") +
  geom_vline(xintercept = 32.4, color = "darkgrey", linetype = "dotted") +
  scale_x_continuous(name = "mpg", 
                     breaks = seq(10,34,2)) +
  scale_y_continuous(labels = scales::percent, 
                     limits = c(0,1)) +
  theme_bw() +
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.text.x = element_text(face="bold", size=14),
        axis.text.y = element_text(face="bold", size=12),
        axis.title.x = element_text(size = 16, margin = margin(t = 20, r = 0, b = 10, l = 0)),
        axis.title.y = element_text(size = 16, margin = margin(t = 0, r = 20, b = 0, l = 10)),
        legend.title = element_blank(), legend.position = "none") +
  ylab("Probability of vs")
reg

阴谋

标签: rmodel

解决方案


推荐阅读