生物学では、しばしば線量応答曲線をプロットする必要があります。 Rパッケージ 'drc'は本当に便利で、基本グラフィックは 'drmモデル'を簡単に扱うことができます。しかし、私はdrmカーブをggplot2に追加したいと思います。ggplot2とdrcによる線量応答曲線のプロット
マイセット:ベースのグラフィックスを使用して
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
))
:
plot(drm(data = reshape2::melt(demo,id.vars = "X"),value~X,fct=LL.4(),na.action = na.omit),type="bars")
は素敵な4パラメータ用量応答プロットを生成します。
ggplot2に同じプロットをプロットすると、2つの問題が発生します。
drmモデルカーブを直接追加する方法はありません。私は関数として4-PLを書き直し、stat_functionの形でそれを追加する必要があります。
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)) })
これで十分でない場合は、scale_xが連続している場合にのみ機能します。
scale_x_log10()
を追加したい場合は、Warning message: In log(x): NaNs produced
となります。
これを実現するには、これを処理する方法があります。いずれか(plot.drcの場合)のように、x = 0の値はx軸上にプロットされ、基本的には最低x値の1/100となります。 (demo$X[which.min(demo$X)+1]/100
)またはGraphPad Prismの場合と同様に、0は線量応答曲線から完全に除外されます。
私の質問は以下のとおりです。
直接ggplot2でDRMモデルをプロットする方法はありますか?
データセットを対応する4-PL曲線とリンクして、同じ色でプロットする方法を教えてください。
私はggplotの外でdrmの計算を行い、その結果をdata.frameに入れてggplotに与えたいと思っています –