【问题标题】:R - logistic curve plot with aggregate pointsR - 具有聚合点的逻辑曲线图
【发布时间】:2012-05-13 12:09:40
【问题描述】:

假设我有以下数据集

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您最好指定您的 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="")
      

      给予:

      【讨论】:

        猜你喜欢
        • 2018-10-02
        • 1970-01-01
        • 2018-06-02
        • 2021-08-07
        • 2021-12-15
        • 2013-08-03
        • 2013-08-29
        • 1970-01-01
        • 2019-10-13
        相关资源
        最近更新 更多