R - 具有聚合点的逻辑曲线图

时间:2012-05-13 12:09:41

标签: r

假设我有以下数据集

bodysize=rnorm(20,30,2) 
bodysize=sort(bodysize) 
survive=c(0,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1) 
dat=as.data.frame(cbind(bodysize,survive)) 

我知道glm情节函数有几个不错的图表来展示你的合适, 但是我想用以下方法创建一个初始情节:

1)原始数据点 2)loigistic曲线和两者 3)预测点 4)和多个预测水平的聚合点

library(Hmisc)   
plot(bodysize,survive,xlab="Body size",ylab="Probability of survival") 
g=glm(survive~bodysize,family=binomial,dat)
curve(predict(g,data.frame(bodysize=x),type="resp"),add=TRUE)
points(bodysize,fitted(g),pch=20)

一切都很好。

现在我想绘制给定水平x1

的实际数据存活率
dat$bd<-cut2(dat$bodysize,g=5,levels.mean=T)
AggBd<-aggregate(dat$survive,by=list(dat$bd),data=dat,FUN=mean)
plot(AggBd,add=TRUE)
#Doesn't work

我试图将AggBd与用于模型的数据集和其他所有东西相匹配,但我根本无法将两者一起绘制。有没有解决的办法? 我基本上想要沿着相同的轴重叠最后一个情节。

除了这个特定的任务,我经常想知道如何过度绘制不同的图,这些图描绘了不同的变量,但在二维图上具有相似的比例/范围。我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

AggBd的第一列是一个因素,您需要将这些级别转换为数字才能将点添加到绘图中。

AggBd$size <- as.numeric (levels (AggBd$Group.1))[AggBd$Group.1]

要将点添加到现有图表,请使用points

points (AggBd$size, AggBd$x, pch = 3)

答案 1 :(得分:1)

您最好指定y轴。也许可以使用par(new=TRUE)

plot(bodysize,survive,xlab="Body size",ylab="Probability of survival") 
g=glm(survive~bodysize,family=binomial,dat)
curve(predict(g,data.frame(bodysize=x),type="resp"),add=TRUE)
points(bodysize,fitted(g),pch=20)
#then
par(new=TRUE)
#
plot(AggBd$Group.1,AggBd$x,pch=30)

显然删除或更改轴刻度以防止重叠,例如

plot(AggBd$Group.1,AggBd$x,pch=30,xaxt="n",yaxt="n",xlab="",ylab="")

,并提供:

enter image description here