箱线图不显示范围
Boxplot not showing range
我有预测值,通过:
glm0 <- glm(use ~ as.factor(decision), data = decision_use, family = binomial(link = "logit"))
predicted_glm <- predict(glm0, newdata = decision_use, type = "response", interval = "confidence", se = TRUE)
predict <- predicted_glm$fit
predict <- predict + 1
head(predict)
1 2 3 4 5 6
0.3715847 0.3095335 0.3095335 0.3095335 0.3095335 0.5000000
现在,当我使用 ggplot2 绘制箱线图时,
ggplot(decision_use, aes(x = decision, y = predict)) +
geom_boxplot(aes(fill = factor(decision)), alpha = .2)
我得到了一个箱形图,每个分类变量都有一条水平线。如果您查看预测数据,每个分类变量都是相同的,所以是有道理的。
但我想要一个包含范围的箱线图。我怎样才能得到它?当我使用 "use" 而不是预测时,我得到从一端延伸到另一端(1 到 0)的框。所以我想不是这样。先感谢您。
澄清一下,predicted_glm 包括 se.fit 个值。我想知道如何合并这些。
在这里做箱线图真的没有意义。箱线图显示组内连续变量的范围和分布。您的因变量是二进制的,因此值都是 0 或 1。由于您正在为每个组绘制 predictions,因此您的图将只有一个点代表预期值(即概率) 每组。
最接近的可能是绘制周围有 95% 置信度条的预测。
你还没有提供任何样本数据,所以我会在这里补充一些:
set.seed(100)
df <- data.frame(outcome = rbinom(200, 1, c(0.1, 0.9)), var1 = rep(c("A", "B"), 100))
现在我们将创建我们的模型,并使用 predict
的 newdata
参数对我的预测变量的每个级别进行预测。我要指定 type = "link"
因为我想要对数赔率,我还要指定 se.fit = TRUE
这样我就可以得到这些预测的标准误差:
mod <- glm(outcome ~ var1, data = df, family = binomial)
prediction <- predict(mod, list(var1 = c("A", "B")), se.fit = TRUE, type = "link")
现在我可以为我的预测计算出 95% 的置信区间:
prediction$lower <- prediction$fit - prediction$se.fit * 1.96
prediction$upper <- prediction$fit + prediction$se.fit * 1.96
最后,我将拟合和置信区间从对数几率转换为概率:
prediction <- lapply(prediction, function(logodds) exp(logodds)/(1 + exp(logodds)))
plotdf <- data.frame(Group = c("A", "B"), fit = prediction$fit,
upper = prediction$upper, lower = prediction$lower)
plotdf
#> Group fit upper lower
#> 1 A 0.13 0.2111260 0.07700412
#> 2 B 0.92 0.9594884 0.84811360
现在我准备好绘图了。我将使用 geom_point
s 作为概率估计,使用 geom_errorbar
s 作为置信区间:
library(ggplot2)
ggplot(plotdf, aes(x = Group, y = fit, colour = Group)) +
geom_errorbar(aes(ymin = lower, ymax = upper), size = 2, width = 0.5) +
geom_point(size = 3, colour = "black") +
scale_y_continuous(limits = c(0, 1)) +
labs(title = "Probability estimate with 95% CI", y = "Probability")
由 reprex package (v0.3.0)
于 2020-05-11 创建
我有预测值,通过:
glm0 <- glm(use ~ as.factor(decision), data = decision_use, family = binomial(link = "logit"))
predicted_glm <- predict(glm0, newdata = decision_use, type = "response", interval = "confidence", se = TRUE)
predict <- predicted_glm$fit
predict <- predict + 1
head(predict)
1 2 3 4 5 6
0.3715847 0.3095335 0.3095335 0.3095335 0.3095335 0.5000000
现在,当我使用 ggplot2 绘制箱线图时,
ggplot(decision_use, aes(x = decision, y = predict)) +
geom_boxplot(aes(fill = factor(decision)), alpha = .2)
我得到了一个箱形图,每个分类变量都有一条水平线。如果您查看预测数据,每个分类变量都是相同的,所以是有道理的。
但我想要一个包含范围的箱线图。我怎样才能得到它?当我使用 "use" 而不是预测时,我得到从一端延伸到另一端(1 到 0)的框。所以我想不是这样。先感谢您。
澄清一下,predicted_glm 包括 se.fit 个值。我想知道如何合并这些。
在这里做箱线图真的没有意义。箱线图显示组内连续变量的范围和分布。您的因变量是二进制的,因此值都是 0 或 1。由于您正在为每个组绘制 predictions,因此您的图将只有一个点代表预期值(即概率) 每组。
最接近的可能是绘制周围有 95% 置信度条的预测。
你还没有提供任何样本数据,所以我会在这里补充一些:
set.seed(100)
df <- data.frame(outcome = rbinom(200, 1, c(0.1, 0.9)), var1 = rep(c("A", "B"), 100))
现在我们将创建我们的模型,并使用 predict
的 newdata
参数对我的预测变量的每个级别进行预测。我要指定 type = "link"
因为我想要对数赔率,我还要指定 se.fit = TRUE
这样我就可以得到这些预测的标准误差:
mod <- glm(outcome ~ var1, data = df, family = binomial)
prediction <- predict(mod, list(var1 = c("A", "B")), se.fit = TRUE, type = "link")
现在我可以为我的预测计算出 95% 的置信区间:
prediction$lower <- prediction$fit - prediction$se.fit * 1.96
prediction$upper <- prediction$fit + prediction$se.fit * 1.96
最后,我将拟合和置信区间从对数几率转换为概率:
prediction <- lapply(prediction, function(logodds) exp(logodds)/(1 + exp(logodds)))
plotdf <- data.frame(Group = c("A", "B"), fit = prediction$fit,
upper = prediction$upper, lower = prediction$lower)
plotdf
#> Group fit upper lower
#> 1 A 0.13 0.2111260 0.07700412
#> 2 B 0.92 0.9594884 0.84811360
现在我准备好绘图了。我将使用 geom_point
s 作为概率估计,使用 geom_errorbar
s 作为置信区间:
library(ggplot2)
ggplot(plotdf, aes(x = Group, y = fit, colour = Group)) +
geom_errorbar(aes(ymin = lower, ymax = upper), size = 2, width = 0.5) +
geom_point(size = 3, colour = "black") +
scale_y_continuous(limits = c(0, 1)) +
labs(title = "Probability estimate with 95% CI", y = "Probability")
由 reprex package (v0.3.0)
于 2020-05-11 创建