1

假设我有以下数据集

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 plot 函数有几个不错的图可以向您展示适合性,但我仍然想创建一个初始图:

1) 原始数据点 2) 逻辑曲线和两者 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 与用于模型的数据集和所有其他东西相匹配,但我根本无法将两者绘制在一起。有没有解决的办法?我基本上想在同一轴上过度绘制最后一个图。

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

4

2 回答 2

2

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

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

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

points (AggBd$size, AggBd$x, pch = 3)
于 2012-05-13T12:30:28.637 回答
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="")

给予:

在此处输入图像描述

于 2012-05-13T12:31:12.233 回答