我的数据集有两列。第一列:一个二分变量--“是”或“否”。第2列:连续预测,范围为3- 6。
在基数R中,通过简单地使用plot(outcome~predictor),我可以很容易地可视化这个连续预测因子对实现上述二分法结果的概率的影响。如果我这样做,我会得到一个类似于下面这样的图:

我无法使用ggplot2复制这种类型的图,也找不到任何其他人使用我认为的简单方法来可视化数据的示例。如果有人能够解释我如何使用ggplot2生成这个图,我将不胜感激。
发布于 2021-11-24 10:36:40
您可以使用geom_rect实现此目的,如下所示:
首先,一些玩具数据:
x <- runif(1000)
y <- rbinom(1000,1,0.2)
df <- data.frame(x,y)现在创建一个包含每个矩形坐标的新数据帧。你需要定义如何分解轴,你可以均匀地做,使用分位数,无论什么..我选择了一些任意值:
limits <- c(0,.3,.9,1)现在我可以找到我想要的每个组的比例:
df$xcut <- cut(x, c(0,.3,.9,1))
df2 <- aggregate(data=df, y~xcut, mean)
df2$max <- limits[-1]
df2$min <- limits[-(length(limits))]
df2
xcut y max min
1 (0,0.3] 0.2052980 0.3 0.0
2 (0.3,0.9] 0.2128378 0.9 0.3
3 (0.9,1] 0.2358491 1.0 0.9现在,您已经拥有了geom_rect所需的一切
ggplot(df2) + geom_rect(aes(xmin=min,xmax=max, ymin=0, ymax=y ), fill="white", col="black") +
labs(y="Proportion",x="x") +
scale_x_continuous(breaks=limits)

你可以调整y轴的比例并添加“no”框来获得你想要的效果,尽管这看起来有点多余。
发布于 2021-11-24 11:04:37
这是一个基于R和ggplot的解决方案。首先,我们创建一些数据
set.seed(1)
df <- data.frame(Predictor= round(rnorm(10000, 5, 2), 0),
Dichotomous_outcome= factor(sample(c("Yes", "No"), 10000, replace= TRUE)))然后,我们将预测的二进制变量表出来,并计算分数
df_table <- aggregate(Dichotomous_outcome ~ Predictor, df, table)
df_table$Yes_fraction <- df_table$Dichotomous_outcome[, "Yes"]/ rowSums(df_table$Dichotomous_outcome)
df_table$No_fraction <- df_table$Dichotomous_outcome[, "No"]/ rowSums(df_table$Dichotomous_outcome)
df_table <- df_table[order(df_table$Predictor), ]现在我们转换数据帧,这样我们就可以生成一个矩形
df_rect <- data.frame(x_min= rep(df_table$Predictor[1:(nrow(df_table)-1)], 2),
x_max= rep(df_table$Predictor[2:(nrow(df_table))], 2),
y_min= c(rep(0, nrow(df_table)-1), df_table$Yes_fraction[-1]),
y_max= c(df_table$Yes_fraction[-1], rep(1, nrow(df_table)-1)),
col= rep(c("Yes", "No"), each= nrow(df_table)-1))现在我们可以绘制它了
library(ggplot2)
ggplot(df_rect) +
geom_rect(aes(xmin= x_min, xmax= x_max, ymin= y_min, ymax= y_max, fill= col), col= "black") +
labs(x= "Predictor", y= "Dichotomuous Outcome") +
scale_y_continuous(breaks= c(.25, .75), labels= c("Yes", "No"))

https://stackoverflow.com/questions/70094262
复制相似问题