gpt4 book ai didi

r - 使用 ggplot2 绘制 loess 和 glm 绘图

转载 作者:行者123 更新时间:2023-12-03 01:34:34 24 4
gpt4 key购买 nike

我正在尝试使用泰坦尼克号的数据绘制二元选择 glm 的模型预测与经验概率的关系图。为了显示类(Class)和性别之间的差异,我使用了分面,但有两件事我不太明白。首先,我想将黄土曲线限制在 0 和 1 之间,但如果我将选项 ylim(c(0,1)) 添加到图的末尾,则如果黄土曲线的一侧超出边界,则黄土曲线周围的带状区域会被切断。我想做的第二件事是从每个方面的最小 x 值(glm 的预测概率)到最大 x 值(在同一方面内)和 y = 1 画一条线,以显示glm 预测概率。

loess-titanic

#info on this data http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3info.txt
load(url('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.sav'))
titanic <- titanic3[ ,-c(3,8:14)]; rm(titanic3)
titanic <- na.omit(titanic) #probably missing completely at random
titanic$age <- as.numeric(titanic$age)
titanic$sibsp <- as.integer(titanic$sibsp)
titanic$survived <- as.integer(titanic$survived)

training.df <- titanic[sample(nrow(titanic), nrow(titanic) / 2), ]
validation.df <- titanic[!(row.names(titanic) %in% row.names(training.df)), ]


glm.fit <- glm(survived ~ sex + sibsp + age + I(age^2) + factor(pclass) + sibsp:sex,
family = binomial(link = "probit"), data = training.df)

glm.predict <- predict(glm.fit, newdata = validation.df, se.fit = TRUE, type = "response")

plot.data <- data.frame(mean = glm.predict$fit, response = validation.df$survived,
class = validation.df$pclass, sex = validation.df$sex)

require(ggplot2)
ggplot(data = plot.data, aes(x = as.numeric(mean), y = as.integer(response))) + geom_point() +
stat_smooth(method = "loess", formula = y ~ x) +
facet_wrap( ~ class + sex, scale = "free") + ylim(c(0,1)) +
xlab("Predicted Probability of Survival") + ylab("Empirical Survival Rate")

最佳答案

第一个问题的答案是使用coord_cartesian(ylim=c(0,1))而不是ylim(0,1);这是一个中等的常见问题解答。

对于你的第二个问题,可能有一种方法可以在 ggplot 中完成,但对我来说在外部总结数据更容易:

g0 <- ggplot(data = plot.data, aes(x = mean, y = response)) + geom_point() +
stat_smooth(method = "loess") +
facet_wrap( ~ class + sex, scale = "free") +
coord_cartesian(ylim=c(0,1))+
labs(x="Predicted Probability of Survival",
y="Empirical Survival Rate")

(我通过消除一些默认值并使用labs稍微缩短了您的代码。)

ss <- ddply(plot.data,c("class","sex"),summarise,minx=min(mean),maxx=max(mean))
g0 + geom_segment(data=ss,aes(x=minx,y=minx,xend=maxx,yend=maxx),
colour="red",alpha=0.5)

关于r - 使用 ggplot2 绘制 loess 和 glm 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com