You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言的剂量-反应曲线添加EC50值并调整Y轴刻度

解决方案

1. 扩大Y轴刻度范围

在plot.drm()函数中通过ylim参数直接指定Y轴的上下限,结合你的数据特性(发芽率),将范围设为0到1既符合逻辑,又能解决图幅过窄的问题:

# 先补全模型拟合的缺失括号
sporecount <- drm(AR1 ~ conc, data = Spore_Count_Averages_Plot_, 
                  fct = LL.4(names = c("Slope", "Lower Limit", "Upper Limit", "ED50")))

# 绘制曲线并自定义Y轴范围
plot(sporecount, broken = FALSE, xlab="Concentration", ylab="Percent Germinated", 
     lwd=2, cex=1.2, cex.axis=1.2, cex.lab=1.2,
     ylim = c(0, 1))  # 设置Y轴从0到1

如果需要额外的留白空间,也可以将ylim设为c(-0.05, 1.05)。

2. 在曲线上标注EC50值

利用ED()函数从拟合好的模型中提取EC50数值,结合模型参数计算对应的响应值(Y坐标),最后用text()函数完成标注:

# 提取EC50的纯数值
ec50_val <- as.numeric(ED(sporecount, 50))

# 获取模型拟合的上下限,计算EC50对应的Y坐标(四参数模型的50%效应位置)
model_coefs <- coef(sporecount)
upper_limit <- model_coefs[["Upper Limit"]]
lower_limit <- model_coefs[["Lower Limit"]]
ec50_y <- (upper_limit + lower_limit) / 2

# 在曲线对应位置标注EC50
text(x = ec50_val, y = ec50_y, 
     labels = paste0("EC50 = ", round(ec50_val, 4)),  # 保留4位小数提升可读性
     pos = 4,  # 文本放在点的右侧避免遮挡曲线
     cex = 1.1,
     col = "darkred")

# 可选:添加辅助线增强直观性
abline(v = ec50_val, lty = 2, col = "gray50")  # EC50对应的垂直线
abline(h = ec50_y, lty = 2, col = "gray50")  # 对应响应值的水平线

关键说明

  • ED(sporecount, 50)是drc包专门用于提取剂量-反应模型50%效应浓度的函数,用as.numeric()可提取纯数值(默认返回带置信区间的对象)
  • 用模型拟合的上下限均值计算ec50_y,比硬设0.5更符合四参数log-logistic模型的定义,标注位置更准确

内容的提问来源于stack exchange,提问作者Sasha Zvenigorodsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:23:13