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

如何在R语言中绘制剂量效应图并获取剂量方程与R²值

在R语言中实现剂量反应曲线绘制、方程推导与指标计算

数据准备

你提供的原始数据可直接使用,这里以D137组数据为例:

# Raw Data
μM <- c(0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30)
DMSO <- c(97.01, 98.43, 98.29, 97.66, 96.51, 88.39, 38.54, 2.63) # D137
dat <- data.frame(μM, DMSO)

1. 拟合剂量反应模型(非线性logistic回归)

剂量反应曲线通常呈S型,推荐用四参数logistic模型拟合,可借助drc包(专门用于剂量反应分析)实现:

# 安装并加载drc包
install.packages("drc")
library(drc)

# 拟合四参数logistic模型
model <- drm(DMSO ~ μM, data = dat, fct = LL.4())
summary(model)
  • 模型输出包含参数估计值、标准误,以及R-squared(拟合优度)。
  • 四参数模型公式为:
    [ y = \frac{d - a}{1 + (x/c)^b} + a ]
    参数说明:
    • a:曲线下限(最低活性值)
    • d:曲线上限(最高活性值)
    • c:EC50值(活性达50%时的浓度)
    • b:曲线斜率

2. 绘制剂量反应曲线

用ggplot2绘制带拟合曲线的图表,x轴取对数(符合此类图表常规展示逻辑):

# 安装并加载ggplot2
install.packages("ggplot2")
library(ggplot2)

# 生成拟合曲线的预测数据
new_data <- data.frame(μM = seq(min(dat$μM), max(dat$μM), length.out = 100))
new_data$pred <- predict(model, newdata = new_data)

# 绘制图表
ggplot(dat, aes(x = μM, y = DMSO)) +
  geom_point(size = 3, color = "#2c3e50") +  # 原始数据点
  geom_line(data = new_data, aes(y = pred), color = "#e74c3c", linewidth = 1) +  # 拟合曲线
  scale_x_log10(breaks = dat$μM) +  # x轴设为对数刻度,显示原始浓度点
  labs(x = "浓度 (μM)", y = "活性 (%)", title = "剂量反应曲线") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))

3. 提取剂量方程与R平方值

从拟合模型中提取参数并构建可读方程,同时获取R平方:

# 提取模型参数
params <- coef(model)
a <- params[1]
b <- params[2]
c <- params[3]
d <- params[4]

# 构建剂量方程
dose_equation <- paste0("y = ", round(d - a, 2), "/(1 + (x/", round(c, 4), ")^", round(b, 2), ") + ", round(a, 2))
cat("剂量方程:", dose_equation, "\n")

# 获取R平方值
r_squared <- summary(model)$r.squared
cat("R平方值:", round(r_squared, 4), "\n")

补充:线性回归拟合(若Excel使用对数转换后的线性拟合)

如果Excel中是对log(浓度)和log(活性)做线性拟合,可执行以下代码:

# 准备对数转换后的数据
log_dat <- data.frame(log_μM = log(dat$μM), log_DMSO = log(dat$DMSO))

# 拟合线性模型
linear_model <- lm(log_DMSO ~ log_μM, data = log_dat)
summary(linear_model)

# 提取线性方程与R平方
linear_eq <- paste0("log(y) = ", round(coef(linear_model)[1], 2), " + ", round(coef(linear_model)[2], 2), "*log(x)")
cat("线性回归方程:", linear_eq, "\n")
cat("线性回归R平方:", round(summary(linear_model)$r.squared, 4), "\n")

注意:线性拟合仅适配数据的线性段,整体拟合效果通常弱于非线性logistic模型。

内容的提问来源于stack exchange,提问作者JeongSoo Na

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:37:01