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

文摘   2024-12-04 07:52   江苏  

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

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

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

什么是四参数拟合?

四参数拟合公式如下:
y=d+ad1+(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. 使用示例数据查看

#  # # # 示例数据:浓度(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.函数拟合

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


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

{  # 提取拟合的四参数  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))
# 计算 # 根据 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. 制作函数,方便后续使用

#制作函数--------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)
# 计算 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 )
}

使用函数

# 使用修正后的函数拟合fit_result <- fit_4pl(data)
# 打印拟合公式cat("拟合公式为:", fit_result$equation, "\n")
# 打印 cat("拟合的 R² 为:", fit_result$R2, "\n")

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

生信小博士
【生物信息学】R语言开始,学习生信。Seurat,单细胞测序,空间转录组。 Python,scanpy,cell2location。资料分享
 最新文章