- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在生物学中,我们经常想要绘制剂量 react 曲线。 R 包“drc”非常有用,基础图形可以轻松处理“drm 模型”。但是,我想将我的 drm 曲线添加到 ggplot2 中。
我的数据集:
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 中绘制相同的图,我偶然发现了两个问题。
没有办法直接添加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()
,我会得到:警告消息:
。
在 log(x) 中:产生 NaN
我意识到 log10(0) = -Inf
但有一些方法可以处理这个问题。或者(与plot.drc 的情况一样)x=0 值基本上以预先最低x 值的1/100 绘制在x 轴上。 (demo$X[which.min(demo$X)+1]/100
) 或如在 GraphPad Prism 中一样,剂量响应曲线中完全省略了 0。
我的问题是:
有没有办法直接在ggplot2中绘制drm模型?
如何将数据集与其相应的 4-PL 曲线拟合链接起来,以便它们以相同的颜色绘制?
最佳答案
一个recent paper drc
包的作者提供了提取 ggplot2 使用的参数的说明。它们不在 ggplot2 中工作,但从模型中提取数据。这是他们应用于您的数据的解决方案。
demo1 <- reshape2::melt(demo,id.vars = "X") # get numbers ready for use.
demo.LL.4 <- drm(data = demo1,value~X,fct=LL.4(),na.action = na.omit) # run model.
predict
函数可以从drm
模型中提取参数。它与使用 curveid
拟合的多条曲线不兼容。
# predictions and confidence intervals.
demo.fits <- expand.grid(conc=exp(seq(log(1.00e-04), log(1.00e-09), length=100)))
# new data with predictions
pm <- predict(demo.LL.4, newdata=demo.fits, interval="confidence")
demo.fits$p <- pm[,1]
demo.fits$pmin <- pm[,2]
demo.fits$pmax <- pm[,3]
他们建议改变零浓度以避免 coord_trans 出现问题。
demo1$XX <- demo1$X
demo1$XX[demo1$XX == 0] <- 1.00e-09
然后绘制曲线,省略 geom_ribbon
会阻止绘制错误。
ggplot(demo1, aes(x = XX, y = value)) +
geom_point() +
geom_ribbon(data=demo.fits, aes(x=conc, y=p, ymin=pmin, ymax=pmax), alpha=0.2) +
geom_line(data=demo.fits, aes(x=conc, y=p)) +
coord_trans(x="log")
要将多条曲线绘制在一起,可以重复该过程。向每组添加 ID。
demo.fits_1 <- data.frame(label = "curve1", demo.fits)
然后使用rbind
组合所有提取的参数。从那里 ggplot 可以处理颜色。
关于r - 使用 ggplot2 和 drc 绘制剂量 react 曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780357/
我收到有关触发器的问题 SimpleDocTemplate.build()它会挂很长时间。我检查了内存和cpu使用情况,没有任何问题。而且我无法在另一台服务器上重现该问题。所以我想获取一些关于repo
我有以下剂量 react 数据,并希望绘制剂量 react 模型和全局拟合曲线。 [xdata = 药物浓度; ydata(0-5) = 不同药物浓度下的响应值]。我毫无问题地绘制了标准曲线。 标准曲
我想找出instance_eval和class_eval的区别,所以我做了一些工作。在网上搜索后,我想通了一些东西,但是又出现了一个我无法理解的问题!当我这样做时: class FindMe de
raw) 文件如下所示 FID IID FA MO SEX PHENO SNP1 SNP2 SNP3 1 1 0 0 1 1 0 2 1 1 2 0 0 1 1 0 2 1 1 3 0 0 1 1 0
我正在尝试建立一种高通量的方法来绘制大型筛选实验的剂量 react 曲线。显然,Prism 拥有绘制剂量 react 曲线的最简单方法,但我无法复制和粘贴这么多数据。 由于 CRAN 删除了 drc,
我正在研究 bluetooth4.0,但我发现 CoreblueTooth 无法在 iOS 6+ 上运行,我的 iphone4s 是 IOS 6.1.2。 它找不到任何设备(我确定设备已打开电源),每
我是一名优秀的程序员,十分优秀!