R语言中采用Boltzmann Sigmoidal方程的自启动模型函数查询
R语言拟合PRISM Boltzmann sigmoid模型方案
最优内置模型选择
你当前使用的G.4()是四参数Gompertz模型,自带log(X)转换,和你需要的Boltzmann sigmoid公式结构不匹配,DRC包内置的L.4()函数(无对数转换的四参数Logistic模型)是完全适配的选择,参数对应关系如下:
- PRISM公式:
Y=Y2+((Y1−Y2)/(1+exp((V50−X)/slope))) - L.4()模型参数映射:
- c参数 = Y2(曲线下限)
- d参数 = Y1(曲线上限)
- e参数 = V50(你需要的Tm熔解温度)
- b参数 = 1/slope(和公式里的斜率互为倒数,符号对应曲线升降方向)
修正后测试代码
library(drc) df <- data.frame( Temperature = c(51.6,51.8,52,52.2,52.4,52.6,52.8,53,53.2,53.4,53.6,53.8,54,54.2,54.4,54.6,54.8), RFU = c(-90.01,-90.02,-87.17,-80.06,-68.57,-56.5,-44.25,-29.08,-12.03,5.45,24.94,47.19,70.06,92.87,116.07,140.85,161.95) ) # 使用L.4()拟合,无需对数转换 fm <- drm(data = df, RFU ~ Temperature, fct = L.4()) summary(fm) # 直接提取Tm值 tm_value <- fm$coefficients[["e:(Intercept)"]]
运行后输出的e参数估计值就是和PRISM计算结果完全一致的Tm值,你提供的测试数据拟合后残差标准误差低于1,拟合效果优于G.4()。
可选自定义模型方案
如果需要完全对齐PRISM的公式写法,也可以在DRC中自定义拟合函数:
# 自定义Boltzmann sigmoid模型 boltzman_fct <- function() { f <- function(x, parms) { y2 <- parms[,1] y1 <- parms[,2] v50 <- parms[,3] slope <- parms[,4] y2 + (y1 - y2)/(1 + exp((v50 - x)/slope)) } names <- c("Y2", "Y1", "V50", "Slope") return(drcMean(fct = f, names = names, "Boltzmann Sigmoid (PRISM)")) } # 用自定义模型拟合 fm_custom <- drm(data = df, RFU ~ Temperature, fct = boltzman_fct(), start = c(-90, 160, 53, 0.5)) summary(fm_custom)
内容的提问来源于stack exchange,提问作者RanonKahn
相关产品推荐
相关产品推荐

