我是生物系的学生。我们进行了许多酶联免疫吸附试验 (ELISA) 实验和 Bradford 检测。4 参数逻辑回归(参考)通常用于回归这些数据遵循此函数: How我可以这样做吗?我想获得、、和值并绘制曲线。
R
PS。如果我有一些数据,如何使用计算出的函数来获取值?我的意思是如何从“数据-> F(x)-> 值”开始?
我是生物系的学生。我们进行了许多酶联免疫吸附试验 (ELISA) 实验和 Bradford 检测。4 参数逻辑回归(参考)通常用于回归这些数据遵循此函数: How我可以这样做吗?我想获得、、和值并绘制曲线。
R
PS。如果我有一些数据,如何使用计算出的函数来获取值?我的意思是如何从“数据-> F(x)-> 值”开始?
几天后,我在这里记录我的发现:
http://www.bioassay.dk/index-filer/start/DraftDrcManual.pdf为我提供了 R 中 drc 包的当前手册。例如:
library(drc) model1 <- drm(SLOPE~DOSE, CURVE, fct=LL.4(names=c("Slope", "Lower", "Upper", "ED50")),data=spinach) 摘要(model1 ) plot(model1) 如果我想通过观察预测剂量。
model2 <- drm(DOSE~SLOPE, CURVE, fct=LL.4(names=c("Slope", "Lower", "Upper", "ED50")),data=spinach) predict(model2, newdata, type ="response") newdata 是一个数据框
在这种情况下,“预测”不是从 SLOPE 估计 DOSE 的最佳方法,因为您必须在模型 2 中反转它们,这在本示例中不起作用。
如果您想从 SLOPE 估计 DOSE,或者在 ELISA 的情况下从“OD”估计“浓度”,只需使用“drc”包的 ED 功能
例子:
library(drc)
model1 <- drm(SLOPE~DOSE, CURVE,
fct=LL.4(names=c("Slope", "Lower", "Upper", "ED50")),data=spinach)
plot(model1)
# the ED function is used to give the EDx value. For example, the ED50 is the
# DOSE value for the 50% response
ED(model1,50)
# check ?ED
?ED
# The result is a matrix, from which the Estimate values can be extracted using
# the index (display=F is a good option also)
ED(model1,50,display=F)[1:5]
# type="absolute" gives you the ability to use absolute values for the response, to
# estimate the DOSE
response<-0.5 #lets use 0.5 for the response
DOSEx<-ED(model1,response,type="absolute",display=F)[1:5] # the estimated DOSE
points(y=rep(response,5),x=DOSEx,col="blue",pch=1:5)
您可以使用非线性回归找到参数的最小二乘估计。例子:
f=function(B,x)
(B[1]-B[4])/(1+(x/B[3])^B[2])+B[4]
LS=function(B,y,x)
sum((y-f(B,x))^2)
x=runif(100,0,5)
B=c(1,5,2.5,5)
y=f(B,x)
plot(x,y)
### Estimate should be very close to B
nlm(LS,c(1,1,1,1),x=x,y=y)
谷歌搜索的第二个答案4 parameter logistic r
是这篇有前途的论文,其中作者开发并实施了用于分析检测的方法,例如 R 包drc中的 ELISA 。具体来说,作者开发了一个LL.4()
实现 4 参数逻辑回归函数的函数,用于与一般剂量反应建模函数一起使用drm
。
克里斯蒂安·里茨,延斯·史翠伯格。 使用 R 进行生物测定分析。统计软件杂志,2005,卷。12 号,第 5 号。
Ritz 等人发表了一篇新论文,其中涵盖了对“drc”R 包的改进。 使用 R 进行剂量反应分析(PLOS ONE,2015)
这里有一个关于为校准目的拟合 4 参数逻辑模型(例如关于 ELISA 数据)的优秀 R 教程:http: //weightinginbayesianmodels.github.io/poctcalibration/over_tutorials.html http://weightinginbayesianmodels.github.io/poctcalibration /calib_tut4_curve_ocon.html http://weightinginbayesianmodels.github.io/poctcalibration/calib_tut5_precision_ocon.html http://weightinginbayesianmodels.github.io/poctcalibration/AMfunctions.html#sdXhat
他们只是使用nlsLM
minpack.lm 包中的函数。即它们适合形式的模型
x <- c(478, 525, 580, 650, 700, 720, 780, 825, 850, 900, 930, 980, 1020, 1040, 1050, 1075, 1081, 1100, 1160, 1180, 1200)
y <- c(1.70, 1.45, 1.50, 1.42, 1.39, 1.90, 2.49, 2.21, 2.57, 2.90, 3.55, 3.80, 4.27, 4.10, 4.60, 4.42, 4.30, 4.52, 4.40, 4.50, 4.15)
M.4pl <- function(x, lower.asymp, upper.asymp, inflec, hill){
f <- lower.asymp + ((upper.asymp - lower.asymp)/
(1 + (x / inflec)^-hill))
return(f)
}
require(minpack.lm)
nlslmfit = nlsLM(y ~ M.4pl(x, lower.asymp, upper.asymp, inflec, hill),
data = data.frame(x=x, y=y),
start = c(lower.asymp=min(y)+1E-10, upper.asymp=max(y)-1E-10, inflec=mean(x), hill=1),
control = nls.control(maxiter=1000, warnOnly=TRUE) )
summary(nlslmfit)
# Parameters:
# Estimate Std. Error t value Pr(>|t|)
# lower.asymp 1.5371 0.1080 14.24 7.06e-11 ***
# upper.asymp 4.5508 0.1497 30.40 2.93e-16 ***
# inflec 889.1543 14.0924 63.09 < 2e-16 ***
# hill 13.1717 2.5475 5.17 7.68e-05 ***
require(investr)
xvals=seq(min(x),max(x),length.out=100)
predintervals = data.frame(x=xvals,predFit(nlslmfit, newdata=data.frame(x=xvals), interval="prediction"))
confintervals = data.frame(x=xvals,predFit(nlslmfit, newdata=data.frame(x=xvals), interval="confidence"))
require(ggplot2)
qplot(data=predintervals, x=x, y=fit, ymin=lwr, ymax=upr, geom="ribbon", fill=I("red"), alpha=I(0.2)) +
geom_ribbon(data=confintervals, aes(x=x, ymin=lwr, ymax=upr), fill=I("blue"), alpha=I(0.2)) +
geom_line(data=confintervals, aes(x=x, y=fit), colour=I("blue"), lwd=2) +
geom_point(data=data.frame(x=x,y=y), aes(x=x, y=y, ymin=NULL, ymax=NULL), size=5, col="blue") +
ylab("y")
他们还展示了如何使用权重和迭代修正的最小二乘来允许非齐次方差。它还包括如何进行逆预测和计算衍生统计数据,如确定检测限、定量限和工作范围。
我自己虽然使用受约束的严格单调 P 样条拟合,但使用scam
包拟合来做校准曲线,我有更多的运气,因为这导致比使用四参数逻辑模型更窄的 95% 置信区间和预测区间......即形式的模型
require(scam)
nknots = 20 # desired nr of knots
fit = scam(y~s(conc,k=nknots,bs="mpi",m=2), family=gaussian, data=data)
如果您的数据是离散计数而不是某些连续测量,您也可以使用family=poisson
对数链接,或使用log(y+1)
转换后的因变量。你也可以log(conc+1)
在你的公式中使用,因为浓度永远不会变成负数。