将逻辑回归与条形图相结合以获得成熟度结果
Combine logistic regression with bar graph for maturity results
我正在尝试展示鱼类成熟度时间表的逻辑回归分析结果。以下是我的可重现代码。
#coded with R version R version 3.0.2 (2013-09-25)
#Frisbee Sailing
rm(list=ls())
library(ggplot2)
library(FSA)
#generate sample data 1 mature, 0 non mature
m<-rep(c(0,1),each=25)
tl<-seq(31,80, 1)
dat<-data.frame(m,tl)
# add some non mature individuals at random in the middle of df to
#prevent glm.fit: fitted probabilities numerically 0 or 1 occurred error
tl<-sample(50:65, 15)
m<-rep(c(0),each=15)
dat2<-data.frame(tl,m)
#final dataset
data3<-rbind(dat,dat2)
ggplot 可以生成逻辑回归图,显示所使用的每个数据点,代码如下:
#plot logistic model
ggplot(data3, aes(x=tl, y=m)) +
stat_smooth(method="glm", family="binomial", se=FALSE)+
geom_point()
我想结合获得的给定大小的成熟概率,并使用以下代码绘制:
#plot proportion of mature
#clump data in 5 cm size classes
l50<-lencat(~tl,data=data3,startcat=30,w=5)
#table of frequency of mature individuals by size
mat<-with(l50, table(LCat, m))
#proportion of mature
mat_prop<-as.data.frame.matrix(prop.table(mat, margin=1))
colnames(mat_prop)<-c("nm", "m")
mat_prop$tl<-as.factor(seq(30,80, 5))
# Bar plot probability mature
ggplot(mat_prop, aes(x=tl,y=m)) +
geom_bar(stat="bin")
我一直在尝试做的是制作一个结合两者的图表,但没有成功,因为轴是相同的,所以应该很简单,但我似乎无法使它工作。我试过:
ggplot(mat_prop, aes(x=tl,y=m)) +
geom_bar(stat="bin")+
stat_smooth(method="glm", family="binomial", se=FALSE)
但不起作用。任何帮助将不胜感激。我是新手,所以无法将生成的图表添加到此 post。
我发现您的代码存在三个问题:
在 geom_bar()
中使用 stat="bin"
与给定 y 轴值 (y=m
) 不一致。如果您分箱,那么您计算一个区间内 x 值的数量并将该计数用作 y 值,因此无需将您的数据映射到 y 轴。
glm-plot 的数据在 data3
中,但您的组合图仅使用 mat_prop
.
两个图的 x 轴实际上并不完全相同。在条形图中,您在 x 轴上使用因子变量,使轴离散,而在 glm 图中,您使用数值变量,这导致连续的 x 轴。
以下代码给出了结合您的两个图的图表:
mat_prop$tl<-seq(30,80, 5)
ggplot(mat_prop, aes(x=tl,y=m)) +
geom_bar(stat="identity") +
geom_point(data=data3) +
geom_smooth(data=data3,aes(x=tl,y=m),method="glm", family="binomial", se=FALSE)
我可以 运行 在首先采购您的脚本来定义所有变量之后。上述三个问题解决如下:
我使用 geom_bar(stat="identity")
是为了不在条形图中使用分箱。
我在 geom_point
和 geom_smooth
中使用 data
参数,以便为这些部分使用正确的数据 (data3
)剧情.
我重新定义 mat_prop$tl
使其成为数字。然后它与data3
中的列tl
一致,也是数字。
(点数我也加了,不想要的直接去掉geom_point(data=data3)
即可。)
剧情如下:
我正在尝试展示鱼类成熟度时间表的逻辑回归分析结果。以下是我的可重现代码。
#coded with R version R version 3.0.2 (2013-09-25)
#Frisbee Sailing
rm(list=ls())
library(ggplot2)
library(FSA)
#generate sample data 1 mature, 0 non mature
m<-rep(c(0,1),each=25)
tl<-seq(31,80, 1)
dat<-data.frame(m,tl)
# add some non mature individuals at random in the middle of df to
#prevent glm.fit: fitted probabilities numerically 0 or 1 occurred error
tl<-sample(50:65, 15)
m<-rep(c(0),each=15)
dat2<-data.frame(tl,m)
#final dataset
data3<-rbind(dat,dat2)
ggplot 可以生成逻辑回归图,显示所使用的每个数据点,代码如下:
#plot logistic model
ggplot(data3, aes(x=tl, y=m)) +
stat_smooth(method="glm", family="binomial", se=FALSE)+
geom_point()
我想结合获得的给定大小的成熟概率,并使用以下代码绘制:
#plot proportion of mature
#clump data in 5 cm size classes
l50<-lencat(~tl,data=data3,startcat=30,w=5)
#table of frequency of mature individuals by size
mat<-with(l50, table(LCat, m))
#proportion of mature
mat_prop<-as.data.frame.matrix(prop.table(mat, margin=1))
colnames(mat_prop)<-c("nm", "m")
mat_prop$tl<-as.factor(seq(30,80, 5))
# Bar plot probability mature
ggplot(mat_prop, aes(x=tl,y=m)) +
geom_bar(stat="bin")
我一直在尝试做的是制作一个结合两者的图表,但没有成功,因为轴是相同的,所以应该很简单,但我似乎无法使它工作。我试过:
ggplot(mat_prop, aes(x=tl,y=m)) +
geom_bar(stat="bin")+
stat_smooth(method="glm", family="binomial", se=FALSE)
但不起作用。任何帮助将不胜感激。我是新手,所以无法将生成的图表添加到此 post。
我发现您的代码存在三个问题:
在
geom_bar()
中使用stat="bin"
与给定 y 轴值 (y=m
) 不一致。如果您分箱,那么您计算一个区间内 x 值的数量并将该计数用作 y 值,因此无需将您的数据映射到 y 轴。glm-plot 的数据在
data3
中,但您的组合图仅使用mat_prop
.两个图的 x 轴实际上并不完全相同。在条形图中,您在 x 轴上使用因子变量,使轴离散,而在 glm 图中,您使用数值变量,这导致连续的 x 轴。
以下代码给出了结合您的两个图的图表:
mat_prop$tl<-seq(30,80, 5)
ggplot(mat_prop, aes(x=tl,y=m)) +
geom_bar(stat="identity") +
geom_point(data=data3) +
geom_smooth(data=data3,aes(x=tl,y=m),method="glm", family="binomial", se=FALSE)
我可以 运行 在首先采购您的脚本来定义所有变量之后。上述三个问题解决如下:
我使用
geom_bar(stat="identity")
是为了不在条形图中使用分箱。我在
geom_point
和geom_smooth
中使用data
参数,以便为这些部分使用正确的数据 (data3
)剧情.我重新定义
mat_prop$tl
使其成为数字。然后它与data3
中的列tl
一致,也是数字。
(点数我也加了,不想要的直接去掉geom_point(data=data3)
即可。)
剧情如下: