Aufzeichnen von Dosis-Wirkungs-Kurven mit ggplot2 und drc

n der Biologie wollen wir oft Dosis-Wirkungs-Kurven zeichnen. Das R-Paket 'drc' ist sehr nützlich und Basisgrafiken können problemlos mit 'drm-Modellen' umgehen. Ich möchte jedoch meine drm-Kurven zu einem ggplot2 hinzufügen.

Mein Datensatz:

 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
))

Basisgrafiken verwenden:

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

Erzeugt eine schöne 4-Parameter-Dosis-Wirkungskurve.

eim Versuch, dasselbe Diagramm in ggplot2 zu zeichnen, stoße ich auf zwei Problem

Das direkte Hinzufügen der DRM-Modellkurve ist nicht möglich. Ich muss die 4-PL als Funktion umschreiben und in Form einer stat_function hinzufügen, was gelinde gesagt umständlich ist.

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))
 })

Wenn das nicht ausreicht, funktioniert es nur, wenn scale_x stetig ist. Wenn ich @ hinzufügen möchscale_x_log10(), Ich bekomme:Warning message: In log(x): NaNs produced.

Ich merke, dasslog10(0) = -Inf aber es gibt Möglichkeiten, damit umzugehen. Entweder wird (wie bei plot.drc) der x = 0-Wert auf der x-Achse im Wesentlichen als 1/100 des vorniedrigsten x-Werts aufgetragen. demo$X[which.min(demo$X)+1]/100) oder wie bei GraphPad Prism werden die Nullen in der Dosis-Wirkungs-Kurve vollständig weggelassen.

Meine Fragen sind:

Gibt es eine Möglichkeit, DRM-Modelle direkt in ggplot2 zu zeichnen?

Wie kann ich einen Datensatz mit der entsprechenden 4-PL-Kurve verknüpfen, damit sie in derselben Farbe dargestellt werden?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage