Trazar curvas de respuesta a la dosis con ggplot2 y drc

En biología, a menudo queremos trazar curvas de respuesta a la dosis. El paquete R 'drc' es realmente útil y los gráficos básicos pueden manejar fácilmente 'modelos drm'. Sin embargo, me gustaría agregar mis curvas drm a un ggplot2.

Mi conjunto de datos:

 library("drc")
 library("reshape2")
 library("ggplot2")
 demo=structure(list(X = c(0, 1e-08, 3e-08, 1e-07, 3e-07, 1e-06, 3e-06, 
 1e-05, 3e-05, 1e-04, 3e-04), Y1 = c(0, 1, 12, 19, 28, 32, 35, 
 39, NA, 39, NA), Y2 = c(0, 0, 10, 18, 30, 35, 41, 43, NA, 43, 
 NA), Y3 = c(0, 4, 15, 22, 28, 35, 38, 44, NA, 44, NA)), .Names = c("X", 
"Y1", "Y2", "Y3"), class = "data.frame", row.names = c(NA, -11L
))

Usando gráficos base:

plot(drm(data = reshape2::melt(demo,id.vars = "X"),value~X,fct=LL.4(),na.action = na.omit),type="bars")

produce un buen gráfico de respuesta de dosis de 4 parámetros.

Tratando de trazar la misma trama en ggplot2, me encuentro con 2 problemas.

No hay forma de agregar directamente la curva del modelo drm. Necesito reescribir el 4-PL como una función y agregarlo en forma de stat_function, lo cual es engorroso por decir lo menos.

ggplot(reshape2::melt(demo,id.vars = "X"),aes(X,value)) + 
  geom_point() + 
  stat_function(fun = function(x){
    drm_y=function(x, drm){
      coef(drm)[2]+((coef(drm)[3]-coef(drm)[2])/(1+exp((coef(drm)[1]*(log(x)-log(coef(drm)[4]))))))
    }
+ drm_y(x,drm = drm(data = reshape2::melt(demo,id.vars = "X"), value~X, fct=LL.4(), na.action = na.omit))
 })

Si eso no fuera suficiente, solo funciona si scale_x es continuo. Si quiero agregarscale_x_log10(), Yo obtengo:Warning message: In log(x): NaNs produced.

Me doy cuenta de quelog10(0) = -Inf pero hay formas de manejar esto. Ya sea (como es el caso con plot.drc), el valor x = 0 se representa en el eje x esencialmente como 1/100 del valor x más bajo. (demo$X[which.min(demo$X)+1]/100) o como en GraphPad Prism, los 0 se omiten por completo de la curva de respuesta a la dosis.

Mis preguntas son:

¿Hay alguna forma de trazar modelos drm en ggplot2 directamente?

¿Cómo puedo vincular un conjunto de datos con su correspondiente curva 4-PL para que se tracen en el mismo color?

Respuestas a la pregunta(2)

Su respuesta a la pregunta