首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用R语言进行Elisa标曲制作——四参数拟合(4-pl)

使用R语言进行Elisa标曲制作——四参数拟合(4-pl)

作者头像
生信菜鸟团
发布2024-12-05 14:10:38
发布2024-12-05 14:10:38
3.8K0
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

📊【探索数据拟合的奥秘:四参数拟合模型】📊

在数据分析的世界里,理解浓度与效应之间的关系是关键。今天,我要和大家分享一个强大的工具——四参数拟合模型(4-PL),它能帮助我们精确地揭示这种关系。🔬

四参数拟合(Four-Parameter Logistic, 4PL)是一种广泛应用于生物学、药理学以及实验数据分析的非线性回归模型。它特别适用于处理具有“S型”趋势的曲线,例如ELISA实验中的标准曲线拟合。

什么是四参数拟合?

四参数拟合公式如下: y=d+a−d1+(xc)by = d + \frac{a - d}{1 + \left( \frac{x}{c} \right)^b}y=d+1+(cx)ba−d

其中:

  • a:曲线的上限(最大值)。
  • d:曲线的下限(最小值)。
  • b:曲线的斜率(陡峭程度)。
  • c:半效浓度(EC50),也称为曲线的中点。

该模型的核心优势是可以精确描述许多生物实验中的非线性关系,比如浓度与信号之间的关系。

四参数拟合的应用场景
  • ELISA数据分析:用于绘制标准曲线,计算样品浓度。
  • 药效学研究:分析药物的剂量-效应关系。
  • 生物学实验:拟合细胞增殖、酶动力学等曲线。
为什么选择四参数拟合?
  1. 精准性:可以很好地拟合非线性数据,尤其是上下限不对称的情况。
  2. 普适性:适用于多种实验类型,结果具有较高的可信度。
  3. 直观性:参数清晰明了,每个参数都有明确的生物学意义。

🌐【示例数据】🌐 我们从一组简单的示例数据开始:浓度(X)和OD值(Y)。这些数据点是我们探索世界的起点。

  1. 使用示例数据查看
代码语言:javascript
复制
#
  # # # 示例数据:浓度(X)和 OD 值(Y)
# 示例数据
data <- data.frame(
  concentration = c(15.625, 31.250, 62.500, 125.000, 250.000, 500.000, 1000.000),
  OD = c(0.1675, 0.2935, 0.4365, 1.0835, 2.0930, 3.0355, 3.5870)
)
  # # head(data)
  # 
  # # 查看数据
  print(data)

2.函数拟合

代码语言:javascript
复制
 # 四参数拟合模型
  fit <- drm(OD ~ concentration, data = data, fct = LL.4())  # LL.4() 表示四参数 Log-Logistic 模型
  fit
  # 查看拟合结果
  summary(fit)

3.输出拟合函数和和曲线

代码语言:javascript
复制
{
  # 提取拟合的四参数
  params <- coef(fit)  # 提取参数
  b <- params["b:(Intercept)"]; print(b)  # Slope 参数
  c <- params["c:(Intercept)"]  # 最小值
  d <- params["d:(Intercept)"]  # 最大值
  e <- params["e:(Intercept)"]  # 半数效应浓度

  # 输出拟合函数
  cat("拟合的四参数方程为:\n")
  cat(sprintf("Y = %.4f + (%.4f - %.4f) / (1 + (X / %.4f)^%.4f)\n", c, d, c, e, b))

  # 计算 R² 值
  # 根据 Residual Sum of Squares (RSS) 和 Total Sum of Squares (TSS) 来计算
  fitted_values <- fitted(fit)  # 模型拟合值
  rss <- sum((data$OD - fitted_values)^2)  # 残差平方和
  tss <- sum((data$OD - mean(data$OD))^2)  # 总平方和
  r_squared <- 1 - (rss / tss)
  cat(sprintf("拟合的 R² 值为:%.4f\n", r_squared))
  cat(sprintf("Y = %.4f + (%.4f - %.4f) / (1 + (X / %.4f)^%.4f)\n", c, d, c, e, b))

  # 预测新数据点,用于绘制曲线
  new_data <- data.frame(concentration = seq(min(data$concentration), max(data$concentration), length.out = 100))
  new_data$predicted_OD <- predict(fit, newdata = new_data)
  head(new_data)

  # 绘制拟合曲线和原始数据点
  ggplot(data, aes(x = concentration, y = OD)) +
    geom_point(color = "blue", size = 3) +  # 原始数据点

    geom_line(data = new_data, aes(x = concentration, y = predicted_OD), color = "red", size = 1) +  # 拟合曲线
    scale_x_log10() +  # 对浓度轴取对数
    labs(title = "四参数拟合曲线", x = "浓度", y = "OD 值") +
    theme_minimal()

  # 保存拟合结果到文件(可选)

}

4. 制作函数,方便后续使用

代码语言:javascript
复制
#制作函数--------
fit_4pl <- function(data) {
  library(drc)

  # 拟合四参数模型
  fit <- drm(OD ~ concentration, data = data, fct = LL.4())

  # 提取拟合参数
  params <- coef(fit)
  b <- params["b:(Intercept)"]  # Slope 参数
  c <- params["c:(Intercept)"]  # 最小值
  d <- params["d:(Intercept)"]  # 最大值
  e <- params["e:(Intercept)"]  # 半数效应浓度

  # 检查原始数据趋势是否递增
  is_increasing <- all(diff(data$OD) > 0)

  # 如果拟合方向与数据方向不一致,交换 c 和 d
  if ((c > d && is_increasing) || (c < d && !is_increasing)) {
    c_temp <- c
    c <- d
    d <- c_temp
  }

  # 输出拟合公式
  formula <- sprintf("Y = %.4f + (%.4f - %.4f) / (1 + (X / %.4f)^%.4f)", c, d, c, e, b)

  # 计算 R² 值
  fitted_values <- fitted(fit)
  rss <- sum((data$OD - fitted_values)^2)
  tss <- sum((data$OD - mean(data$OD))^2)
  r_squared <- 1 - (rss / tss)


  print(  cat("拟合公式为:", fit_result$equation, "\n"))
  print( cat("拟合的 R² 为:", fit_result$R2, "\n"))

  # 返回结果
  list(
    fit_model = fit,
    equation = formula,
    R2 = r_squared
  )

}

使用函数

代码语言:javascript
复制
# 使用修正后的函数拟合
fit_result <- fit_4pl(data)

# 打印拟合公式
cat("拟合公式为:", fit_result$equation, "\n")

# 打印 R² 值
cat("拟合的 R² 为:", fit_result$R2, "\n")

如有不足,欢迎关注、留言

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 什么是四参数拟合?
  • 四参数拟合的应用场景
  • 为什么选择四参数拟合?
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档