如何用ggplot2拟合SPR动力学数据的1:1 Langmuir模型?
用ggplot2结合pbm包拟合1:1 Langmuir模型的SPR动力学数据
步骤1:安装并加载依赖包
先确保所需工具包已安装,未安装则执行:
install.packages(c("pbm", "ggplot2", "dplyr", "tidyr", "purrr"))
加载包:
library(pbm) library(ggplot2) library(dplyr) library(tidyr) library(purrr)
步骤2:整理SPR数据
假设你导入的数据框名为spr_data,需包含以下核心列:
time:时间点数值response:SPR响应信号值concentration:小分子浓度(建议设为因子类型,如"32nM"、"8nM")
步骤3:用pbm拟合1:1 Langmuir模型
pbm包的fitLangmuir函数专门适配SPR的1:1结合解离模型,按浓度分组拟合:
# 按浓度分组执行拟合 fit_results <- spr_data %>% group_by(concentration) %>% do(fit = fitLangmuir(.$time, .$response, start = list(kass = 1e5, kdiss = 1e-3, rmax = 100))) # 提取拟合预测值,整理为ggplot可用格式 pred_data <- fit_results %>% mutate(pred = map(fit, ~data.frame( time = .$data$time, fitted = .$fitted.values ))) %>% select(concentration, pred) %>% unnest(pred)
注:
start参数需根据你的数据设置合理初始值,kass(结合速率)、kdiss(解离速率)、rmax(最大响应)可参考同类型实验的典型值调整,初始值不合理会导致拟合不收敛。
步骤4:用ggplot绘制原始数据+拟合曲线
模仿你提到的多浓度示例图样式(分色展示不同浓度,原始散点+拟合线):
ggplot() + # 绘制原始数据点 geom_point(data = spr_data, aes(x = time, y = response, color = concentration), size = 1, alpha = 0.6) + # 绘制拟合曲线 geom_line(data = pred_data, aes(x = time, y = fitted, color = concentration), linewidth = 1) + # 可选:添加结合/解离阶段分隔虚线 geom_vline(xintercept = 你的结合阶段结束时间, linetype = "dashed", color = "gray50") + # 调整标签与主题 labs(x = "Time (s)", y = "Response (RU)", color = "Ligand Concentration") + theme_bw() + theme(legend.position = "top")
关键补充
- 1:1 Langmuir模型的核心逻辑:结合阶段响应随时间趋近饱和值,解离阶段响应指数下降,
fitLangmuir会自动分阶段拟合两个过程 - 若拟合不收敛,优先调整
start参数的初始值,或检查数据是否包含完整的结合-解离阶段 - 如需展示拟合参数(如解离常数KD=kdiss/kass),可从
fit_results$fit中提取后用annotate()添加到图中
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

