如何在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
相关产品推荐
相关产品推荐

