给定y计算x的R点对点方法

R point-to-point method for calculating x given y

我正在使用包含四种标准品的商业 ELISA 试剂盒。这些标准品用于创建标准曲线,y 轴为 ELISA 的光密度 reader,x 轴为每毫升国际单位的浓度。

我现在需要使用此标准曲线来获取只有光密度读数的样品的浓度。 ELISA 试剂盒说明书中明确指出“使用“点对点”绘图通过计算机计算标准曲线”。

我假设他们的意思是通过查看 y 击中标准曲线上各点之间的线并从那里下降到 x 轴来得出 x 的值。问题是我不知道如何在 r 中执行此操作(这是我用于我的完整分析管道的内容)。我徒劳地搜索了任何对应于“点对点”但找不到任何东西的 r 包、函数或代码。所有处理 ELISA 数据和/或标准曲线的 R 包(例如 drcELISAtools 似乎做的事情要复杂得多,即拟合对数模型并考虑板间差异等,这不是我需要的。

请注意,我不需要可视化标准曲线 - 我只需要一种方法来根据点对点线从标准曲线数据中获取浓度。

这是一些示例数据:

# Data for standard curve:
scdt <- data.table(id = c("Cal1", "Cal2", "Cal3", "Cal4"), 
                   conc = c(200, 100, 25, 5), 
                   od = c(1.783, 1.395, 0.594, 0.164))

> scdt
     id conc    od
1: Cal1  200 1.783
2: Cal2  100 1.395
3: Cal3   25 0.594
4: Cal4    5 0.164

# Some example OD values for which I would like to derive concentration:
unknowns <- c(0.015, 0.634, 0.891, 1.510, 2.345, 3.105) 

在我想为 x 求解的示例值中,我还包括了一些超出标准范围的值,因为这在我的真实数据中时常也会出现。套件制造商建议不要报告任何 OD 超过合理的最高标准 (Cal1) 的东西。IU/mL。

我如何做 R 等价于用尺子和方格纸从标准曲线中找到 x,这正式称为什么? (我认为我可能没有找到任何东西的一个原因是因为“点对点”不是一个数学术语,但必须有一个 - 它是插值吗?)。

听起来你想要一个简单的线性插值。这是在 R 中使用函数 approx 实现的。您将已知的 x 值、已知的 y 值和您想要相应 y 值的 x 的新值提供给它。 (注意,哪个变量叫x哪个叫y并不重要,只要一致即可)。

为了获得更易于使用的结果,我们可以将响应转换为具有适当列名的数据框:

new_data <- approx(scdt$od, scdt$conc, xout = unknowns) |> 
  setNames(c("od", "conc")) |> 
  as.data.frame() 

new_data
#>      od      conc
#> 1 0.015        NA
#> 2 0.634  28.74532
#> 3 0.891  52.80899
#> 4 1.510 129.63918
#> 5 2.345        NA
#> 6 3.105        NA

请注意(如制造商建议的那样),落在校准点极端范围之外的光密度将给出 NA 浓度值。要获得这些,您需要 extrapolate 而不是 interpolate

为了确认这就是您要查找的内容,让我们在根据初始数据形成的曲线上用红色绘制此插值的结果:

plot(scdt$od, scdt$conc, type = "l", lty = 2)
points(scdt$od, scdt$conc)
points(new_data$od, new_data$conc, col = "red")

我们可以看到每个新光密度下的估计浓度位于连接校准点的线上。