(実験と測定装置の)物理学があなたを導きましょう。
最終的に、吸収は媒体を通過する放射線の量を測定することによって決定され、それらの測定は光子のカウントに帰着します。媒体が巨視的である場合、濃度の熱力学的変動は無視できるため、エラーの主な原因はカウントにあります。このエラー(または「ショットノイズ」)には、ポアソン分布があります。これは、放射線がほとんど通過していない高濃度では、誤差が比較的大きいことを意味します。
実験室で十分な注意を払って、濃度は通常非常に正確に測定されるので、濃度の誤差について心配する必要はありません。
吸光度自体は、測定された放射の対数に直接関連しています。対数を取ることで、考えられるすべての濃度範囲でエラーの量が均等になります。この理由だけで、吸光度を再表現するのではなく、通常の値で吸光度を分析するのが最善です。 特に、Beer-Lambert法の表現を簡略化する場合でも、吸光度のログを取ることは避けてください。
また、非線形性の可能性についても注意が必要です。ビールランベールの法則 の導出は、吸光度対濃度の曲線が高濃度で非線形になることを示唆しています。これを検出またはテストする方法が必要です。
(Ci,Ai)
もちろん、これらはすべて理論的であり、いくらか推測的なものです-分析するための実際のデータはありません-ですが、開始するには妥当な場所です。実験室での繰り返しの経験から、データがここで説明する統計的行動から逸脱していることが示唆される場合、これらの手順のいくつかの変更が必要になります。
これらのアイデアを説明するために、ポアソンノイズや場合によっては非線形応答など、測定の主要な側面を実装するシミュレーションを作成しました。何度も実行することで、実験室で起こりそうな種類の変動を観察できます。これは、1回のシミュレーション実行の結果です。(他のシミュレーションは、以下のコードの開始シードを変更し、必要に応じてさまざまなパラメーターを変更するだけで実行できます。)

11/32
κ^=2.1321000
残差のヒストグラムは見た目が良くありません。右側に歪んでいます。これは、なんらかのトラブルを示しています。この問題は、各濃度での残差の非対称性に起因するものではありません。むしろ、それはフィット感の欠如から来ています。これは、右側の箱ひげ図で明らかです。最初の5つはほぼ水平に並んでいますが、最後の1つ(最高濃度)は、場所(高すぎる)とスケール(長すぎる)が明らかに異なります。 。これは、シミュレーションに組み込んだ非線形応答の結果です。非線形性は濃度の全範囲にわたって存在しますが、非常に高い濃度でのみかなりの影響があります。これも多かれ少なかれ実験室で起こることです。しかし、利用できるキャリブレーション実行が1つしかないため、そのような箱ひげ図を描くことはできませんでした。 非線形性が問題になる可能性がある場合は、複数の独立した実行を分析することを検討してください。
シミュレーションはで実行されましたR。ただし、実際のデータを使用した計算は、手作業またはスプレッドシートを使用して簡単に実行できます。非線形性の残差を確認してください。
#
# Simulate instrument responses:
# `concentration` is an array of concentrations to use.
# `kappa` is the Beer-Lambert law coefficient.
# `n.0` is the largest expected photon count (at 0 concentration).
# `start` is a tiny positive value used to avoid logs of zero.
# `beta` is the amount of nonlinearity (it is a quadratic perturbation
# of the Beer-Lambert law).
# The return value is a parallel array of measured absorbances; it is subject
# to random fluctuations.
#
observe <- function(concentration, kappa=1, n.0=10^3, start=1/6, beta=0.2) {
transmission <- exp(-kappa * concentration - beta * concentration^2)
transmission.observed <- start + rpois(length(transmission), transmission * n.0)
absorbance <- -log(transmission.observed / rpois(1, n.0))
return(absorbance)
}
#
# Perform a set of simulations.
#
concentration <- 2^(-(0:5)) # Concentrations to use
n.iter <- 50 # Number of iterations
set.seed(17) # Make the results reproducible
absorbance <- replicate(n.iter, observe(concentration, kappa=2))
#
# Put the results into a data frame for further analysis.
#
a.df <- data.frame(absorbance = as.vector(absorbance))
a.df$concentration <- concentration # ($ interferes with TeX processing on this site)
#
# Create the figures.
#
par(mfrow=c(1,3))
#
# Set up a region for the scatterplot.
#
plot(c(min(concentration), max(concentration)),
c(min(absorbance), max(absorbance)), type="n",
xlab="Concentration", ylab="Absorbance",
main=paste("Scatterplot of", n.iter, "iterations"))
#
# Make the scatterplot.
#
invisible(apply(absorbance, 2,
function(a) points(concentration, a, col="#40404080")))
slope <- mean(a.df$absorbance / a.df$concentration)
abline(c(0, slope), col="Red")
#
# Show the residuals.
#
a.df$residuals <- a.df$absorbance - slope * a.df$concentration # $
hist(a.df$residuals, main="Histogram of residuals", xlab="Absorbance Difference") # $
#
# Study the residual distribution vs. concentration.
#
boxplot(a.df$residuals ~ a.df$concentration, main="Residual distributions",
xlab="Concentration")