在 ggplot2 中绘制时,我的模型不会继续朝向渐近线,尽管它在 R 基础图形中会如此。在 ggplot2 中,它停在 X 轴上的某些点(如下图所示),我 90% 确定这与seq()
.
我正在使用predict()
从 drm(剂量响应包)logit 模型转换数据。在基础图形中,sigmoidal 曲线看起来很棒,在 ggplot2 中,没有那么多:
library(drc)
library(ggplot2)
将数据拟合到 logit 模型:
mod1 <- drm(probability ~ (dose), weights = total, data = mydata1, type ="binomial", fct = LL.2())
plot(mod1,broken=FALSE,type="all",add=FALSE, col= "purple", xlim=c(0, 10000))
基本图形 2 参数 logit 的图像:
使用作者演示中的代码(链接如下)提取模型的数据,我有:
newdata1 <-expand.grid(dose=exp(seq(log(0.5),log(100),length=200)))
pm1<- predict(mod1, newdata=newdata1,interval="confidence")
newdata1$p1 <-pm1[,1]
newdata1$pmin1 <-pm1[,2]
newdata1$pmax1 <- pm1[,3]
最后是 ggplot2 图形:
p1 <- ggplot(mydata1, aes(x=dose01,y=probability))+
geom_point()+
geom_ribbon(data=newdata1, aes(x=dose,y=p1,
ymin=pmin1,ymax=pmax1),alpha=0.2,color="blue",fill="pink") +
geom_step(data=newdata1, aes(x=dose,y=p1))+
coord_trans(x="log") + #creates logline for x axis
xlab("dose")+ylab("response")
图像 1&2 和 3&4 显示了我的情节中的差异,具体取决于 seq:
当以下用于 时seq()
,图形被拉出数据! (seq(log(0.5),**log(10000)**,length=200)))
(图 1 和 2)
seq()
尽管研究了它,但我不明白。我的阴谋怎么了?
seq 中的第一项似乎定义了下限,但是第三项定义的是什么?您可以在图像 3 和 4 中看到这一点 - 图形很不错;我有点混淆了这个问题,但它仍然没有继续朝着infin方向发展。这是一个小问题,因为我将共同绘制 8 个 logit 模型。
对于使用 ggplot2 绘制 drc/drm 模型时遇到问题的任何人,以下帖子非常有帮助:搜索
plotting-dose-response-curves-with-ggplot2-and-drc
和此标题: plotting -dose-response-curves- with- ggplot2-and-drc
我已经按照 DRC 的作者的说明进行操作,可以在他的文章的支持信息中找到 - 上面使用了部分代码。文章标题:使用 R 进行剂量反应分析,Christopher Ritz。PlosOne。
数据:
> dput(mydata1)
structure(list(dose = c(25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 75L, 75L, 75L, 75L, 75L, 75L,
75L, 75L, 75L, 75L, 75L, 75L, 75L, 75L, 75L, 100L, 100L, 100L,
100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L, 100L,
100L, 150L, 150L, 150L, 150L, 150L, 150L, 150L, 150L, 150L, 150L,
150L, 150L, 150L, 150L, 150L, 200L, 200L, 200L, 200L, 200L, 200L,
200L, 200L, 200L, 200L, 200L, 200L, 200L, 200L, 200L), total = c(25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L,
25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L, 25L), affected = c(2L,
0L, 0L, 0L, 0L, 1L, 1L, 2L, 2L, 4L, 1L, 1L, 4L, 0L, 10L, 0L,
1L, 0L, 1L, 0L, 3L, 0L, 4L, 2L, 0L, 2L, 0L, 1L, 2L, 3L, 2L, 0L,
2L, 0L, 0L, 4L, 0L, 1L, 2L, 3L, 0L, 21L, 1L, 3L, 1L, 2L, 7L,
0L, 0L, 0L, 0L, 8L, 7L, 3L, 7L, 2L, 2L, 10L, 3L, 4L, 0L, 7L,
0L, 3L, 3L, 20L, 25L, 22L, 23L, 22L, 18L, 14L, 20L, 20L, 21L),
probability = c(0.08, 0, 0, 0, 0, 0.04, 0.04, 0.08, 0.08,
0.16, 0.04, 0.04, 0.16, 0, 0.4, 0, 0.04, 0, 0.04, 0, 0.12,
0, 0.16, 0.08, 0, 0.08, 0, 0.04, 0.08, 0.12, 0.08, 0, 0.08,
0, 0, 0.16, 0, 0.04, 0.08, 0.12, 0, 0.84, 0.04, 0.12, 0.04,
0.08, 0.28, 0, 0, 0, 0, 0.32, 0.28, 0.12, 0.28, 0.08, 0.08,
0.4, 0.12, 0.16, 0, 0.28, 0, 0.12, 0.12, 0.8, 1, 0.88, 0.92,
0.88, 0.72, 0.56, 0.8, 0.8, 0.84)), .Names = c("dose", "total",
"affected", "probability"), row.names = c(NA, -75L), class = "data.frame")