2014-01-23 6 views
1

Я уже некоторое время сражаюсь с этим, хотя кажется, что это должно быть довольно просто. Я следовал за советом по этому вопросу:добавление линий «LD50» к графику логистической регрессии с использованием ggplot2

Predicted values for logistic regression from glm and stat_smooth in ggplot2 are different

Что у меня есть логистическая кривая регрессии, и я хочу, чтобы добавить строку «ЛД50», как в плотности, где 0,5 из испытаний являются успехи (у = 1). Я вычислил значение плотности, используя функцию dose.p, и использую эти значения для направления моего geom_line. Но почему-то линии не идут туда, куда я хочу, чтобы они пошли, и я не могу понять, почему! Я хочу, чтобы они работали под углом 90 градусов, как в приведенном выше примере, но почему-то я получаю диагональную линию вместо этого, и я действительно не могу понять, почему!

Treatment=c(rep("Live", 50), rep("Degraded", 50)) 
Density=c(rep(141.9015767,10), rep(165.4903068, 10), rep(186.4801865,10), rep(325.9259259,10), rep(662.8471167, 10), rep(141.9015767,10), rep(165.4903068, 10), rep(186.4801865,10), rep(325.9259259,10), rep(662.8471167, 10)) 
Code=c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1) 
Choice=data.frame(Treatment, Density, Code) 

##plot 
Choice_plot=ggplot(data=Choice, aes(x=Density, y=Code, linetype=Treatment)) + geom_point(size=2.5, colour="black", alpha=1/6)+ 
#LD50 line Live 
geom_segment(aes(y = 0.5, yend = 0.5, xend = 316.8520),x = -Inf,linetype = "dashed") + 
geom_segment(aes(x=316.8520, xend=316.8520, y=0, yend=0.5),x = -Inf,linetype = "dotted") +  

#LD50 line Dead 
geom_segment(aes(y = 0.5, yend = 0.5, xend = 411.8904),x = -Inf,linetype = "dashed") + 
geom_segment(aes(x=411.8904, xend=411.8904, y=0, yend=0.5),x = -Inf,linetype = "dotted") + 
stat_smooth(method="glm", family="binomial", se=FALSE, colour="black", size=0.3)+ 
labs(y="Colony Choice", size=1.5)+ 
labs(x="P. mol density on established colony (ind/m2)", size=1.5)+ 

## Make it pretty 
theme_bw()+ 
theme(panel.background = element_rect(colour = NA))+ 
theme(panel.grid.minor = element_line(colour = NA))+ 
theme(panel.grid.major = element_line(colour = NA)) 
Choice_plot 

Горизонтальная линия работает нормально, но предположительно, вертикальная линия заканчивается по диагонали от у, х = 0 у = 0,5, х = 316,8520 или 411,8904, а не вертикально! Я не могу опубликовать изображения, но я новичок, извините!

Для записи, изначально я начал использовать подобный код geom_segment как для горизонтального и вертикального сегмента:

geom_segment(aes(y = 0.5, yend = 0.5, xend = 411.8904),x = -Inf,linetype = "dashed") + 
    geom_segment(aes(x=411.8904, xend=411.8904, yend=0.5),x = -Inf,linetype = "dotted") 

В этом случае я в конечном итоге с двумя диагональными линиями, проходящими от конца горизонтальной линии до y = 1 & 0, x = 0

Кто-нибудь знает, где я ошибаюсь?

+1

В вашей второй 'geom_segment()' вы сопоставили 'x' дважды (' х = 411.8904' и 'х = -Inf'), удалите вторую, и вы должны быть правы - голосование, чтобы закрыть, как это, по-видимому, простая ошибка, которая вряд ли поможет другим. – alexwhan

ответ

1

Изменить на пунктирные линии x = -Inf до y = -Inf. Обратите внимание, что я также переместил все x и y в aes().

ggplot(data=Choice, aes(x=Density, y=Code, linetype=Treatment)) + geom_point(size=2.5, colour="black", alpha=1/6)+ 
     #LD50 line Live 
     geom_segment(aes(y = 0.5, yend = 0.5, xend = 316.8520, x = -Inf),linetype = "dashed") + 
     geom_segment(aes(x=316.8520, xend=316.8520, yend=0.5,y = -Inf),linetype = "dotted") +  

     #LD50 line Dead 
     geom_segment(aes(y = 0.5, yend = 0.5, xend = 411.8904,x = -Inf),linetype = "dashed") + 
     geom_segment(aes(x=411.8904, xend=411.8904, y=-Inf, yend=0.5),linetype = "dotted") + 
     stat_smooth(method="glm", family="binomial", se=FALSE, colour="black", size=0.3)+ 
     labs(y="Colony Choice", size=1.5)+ 
     labs(x="P. mol density on established colony (ind/m2)", size=1.5)+ 

     ## Make it pretty 
     theme_bw()+ 
     theme(panel.background = element_rect(colour = NA))+ 
     theme(panel.grid.minor = element_line(colour = NA))+ 

    theme(panel.grid.major = element_line(colour = NA)) 
Смежные вопросы