Regresi linier pada sampel yang mencakup banyak urutan besarnya


8

Hukum bir dari kimia mengatakan bahwa absorbansi cairan A sebanding dengan konsentrasi Cjadi:

A=kC
Hal standar yang harus dilakukan kemudian adalah menyiapkan serangkaian solusi dengan konsentrasi yang diketahui, mengukur absorbansi untuk membentuk 'kurva standar' (kurva kalibrasi pada dasarnya), dan melakukan regresi linier sederhana pada data tersebut untuk mendapatkan proporsionalitas (yang dapat kemudian digunakan untuk memprediksi konsentrasi solusi yang tidak diketahui).

Salah satu cara mudah untuk melakukan ini adalah mulai dengan konsentrasi yang diketahui dan melakukan pengenceran serial, yang akan membuat Anda pengenceran 2x, 4x, 8x, 16x .... dll. Yaitu jika Anda mulai dengan solusi100μg/mL Anda akan mendapatkan solusi 50μg/mL, 25μg/mL, 12.5μg/mL dll ...

Sekarang ketika Anda melakukan regresi linier, Anda memiliki kumpulan data dengan banyak titik data pada konsentrasi rendah dan sangat sedikit pada konsentrasi yang lebih tinggi. Tampaknya jauh lebih alami untuk merepresentasikan masalah ini pada skala log. Pertanyaan saya adalah, apakah saya harus melakukan regresi linierA vs. C atau logA vs. logC? Ketika saya membandingkan model, mereka tampaknya memberikan jawaban yang berada pada urutan yang sama besarnya tetapi pada urutan 30% berbeda.

data diplot pada skala linier data diplot pada skala log log

Jawaban:


13

Biarkan fisika (percobaan dan alat pengukur) membimbing Anda.

Pada akhirnya, penyerapan ditentukan dengan mengukur jumlah radiasi yang melewati media dan pengukuran tersebut turun ke penghitungan foton. Ketika medianya makroskopis, fluktuasi termodinamika dalam konsentrasi dapat diabaikan sehingga sumber kesalahan utama terletak pada penghitungan. Kesalahan ini (atau "suara tembakan" ) memiliki distribusi Poisson . Ini menyiratkan kesalahan relatif besar pada konsentrasi tinggi ketika sedikit radiasi yang lewat.

Dengan perawatan yang memadai di laboratorium, konsentrasi biasanya diukur dengan sangat akurat, jadi saya tidak akan khawatir tentang kesalahan konsentrasi.

Absorbansi itu sendiri secara langsung berkaitan dengan logaritma radiasi yang diukur . Mengambil logaritma meratakan jumlah kesalahan di seluruh rentang konsentrasi yang memungkinkan. Untuk alasan ini saja, yang terbaik adalah menganalisis absorbansi dalam hal nilai-nilai biasanya daripada mengekspresikannya kembali. Secara khusus, kita harus menghindari pengambilan log absorbansi, meskipun itu akan menyederhanakan ekspresi hukum Beer-Lambert.

Kita juga harus waspada terhadap kemungkinan non-linearitas. Derivasi Hukum Beer-Lambert menunjukkan kurva absorbansi vs konsentrasi akan menjadi nonlinier pada konsentrasi tinggi. Diperlukan beberapa cara untuk mendeteksi atau menguji ini.

Pertimbangan ini menyarankan prosedur sederhana untuk menganalisis serangkaian (Ci,Ai) pasang konsentrasi dan absorbansi yang diukur:

  • Perkirakan koefisien κ sebagai mean aritmatika dari A/C, κ^=iAiCi.

  • Memprediksi absorbansi pada setiap konsentrasi dalam hal koefisien yang diperkirakan: A^(C)=κ^C.

  • Periksa residu aditifAiAi^ untuk tren nonlinier di Ci.

Tentu saja semua ini teoretis dan agak spekulatif - kami belum memiliki data aktual untuk dianalisis - tetapi ini adalah tempat yang wajar untuk memulai. Jika pengalaman laboratorium berulang-ulang menyarankan data berangkat dari perilaku statistik yang dijelaskan di sini, maka beberapa modifikasi dari prosedur ini akan diperlukan.


Untuk mengilustrasikan ide-ide ini, saya telah membuat simulasi yang mengimplementasikan aspek-aspek kunci dari pengukuran, termasuk kebisingan Poisson dan kemungkinan respons nonlinier. Dengan menjalankannya berkali-kali, kita dapat mengamati jenis variasi yang mungkin ditemui di laboratorium. Berikut adalah hasil dari satu simulasi dijalankan. (Simulasi lain dapat dilakukan hanya dengan mengubah seed awal pada kode di bawah ini dan memodifikasi berbagai parameter yang diinginkan.)

Tokoh

Eksperimen simulasi ini mengukur absorbansi pada konsentrasi 1 ke 1/32. Penyebaran vertikal dalam nilai-nilai yang terlihat di sebar menunjukkan efek dari (a) noise tembakan dalam pengukuran transmisi dan (b) noise tembakan dalam pengukuran transmisi awal pada konsentrasi nol. (Perhatikan bagaimana ini benar-benar menciptakan beberapa nilai absorbansi negatif .) Meskipun kesalahan yang dihasilkan tidak akan memiliki distribusi yang persis sama pada setiap konsentrasi, sebaran yang kurang lebih sama adalah bukti empiris bahwa distribusi cukup dekat untuk menjadi sama yang kita butuhkan ' jangan khawatir tentang itu. Dengan kata lain, tidak perlu menimbang absorbansi sesuai konsentrasi.

Garis diagonal merah telah diperkirakan dari semua 50 simulasi. Ini memiliki kemiringanκ^=2.13, Yang sedikit berbeda dari kemiringan yang benar secara fisik 2yang digunakan dalam simulasi. Penyimpangan ini sangat besar karena saya berasumsi ada sangat sedikit radiasi untuk diukur; jumlah foton maksimum hanya1000. Dalam praktiknya, jumlah maksimum bisa jadi banyak urutan besarnya lebih besar dari ini, yang mengarah ke perkiraan kemiringan yang sangat tepat - tetapi kita tidak akan belajar banyak dari angka ini!

Histogram residu tidak terlihat bagus: ia condong ke kanan. Ini menunjukkan beberapa jenis masalah. Masalah itu tidak datang dari asimetri dalam residu pada setiap konsentrasi; melainkan, itu berasal dari kurangnya kecocokan. Itu terbukti dalam plot-plot kotak di sebelah kanan: walaupun lima di antaranya berbaris hampir secara horizontal, yang terakhir - pada konsentrasi tertinggi - jelas berbeda di lokasi (terlalu tinggi) dan skala (terlalu panjang) . Ini hasil dari respons nonlinier yang saya masukkan ke dalam simulasi. Meskipun nonlinier hadir di seluruh rentang konsentrasi penuh, ia memiliki efek yang cukup besar hanya pada konsentrasi paling tinggi. Ini kurang lebih apa yang akan terjadi di laboratorium juga. Namun, dengan hanya satu kali kalibrasi yang tersedia, kami tidak dapat menggambar plot kotak tersebut. Pertimbangkan untuk menganalisis beberapa proses independen jika nonlinier mungkin menjadi masalah.


Simulasi dilakukan di R. Namun, perhitungan dengan data aktual mudah dilakukan dengan tangan atau dengan spreadsheet: pastikan untuk memeriksa residu untuk nonlinier.

#
# 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")

5

Tidak satu pun dari model yang cocok Anda dapat benar untuk persamaan asli Anda, dan persamaan asli Anda tidak dapat menjadi model yang benar untuk variabel acak yang Anda amati.

Mari kita bahas beberapa masalah satu per satu.

1) Persamaan asli Anda adalah A=kC, tapi tentu saja data tidak diamati pada nilai populasi (jika tidak, Anda hanya perlu satu x dan y nilai, sejak k=y/x. Jelas ini bukan model yang tepat untuk data atau Anda tidak akan mencoba mencocokkan regresi. Kita akan melihat bagaimana cara menulis ulang.

2) Jika kedua variabel diamati dengan kesalahan, Anda memerlukan teknik yang lebih khusus daripada model regresi linier sederhana.

3) Jika C diamati tanpa kesalahan (atau kesalahan sangat rendah relatif terhadap A), Anda mungkin berarti model sesuatu seperti katakan E(A|C)=kC.

Pertanyaannya kemudian adalah "bagaimana memodelkan variasi tentang rata-rata" - kita perlu distribusi untuk A setiap C, atau setidaknya beberapa informasi yang berkaitan dengan distribusi.

a) Seperti yang Anda sarankan, Anda bisa memasukkan model linear langsung ke data pada skala asli:

E(A|C)=kC

Ini mungkin cocok jika variabilitas mendekati konstan pada skala ini (Var(A|C) hampir konstan).

Perhatikan bahwa model ini, berdasarkan model populasi Anda, tidak memiliki istilah intersep; itu melewati asal.

Atau, jika Anda memiliki beberapa model lain untuk variasi tentang garis, seperti Var(A|C)Cp, maka Anda bisa memasukkan regresi tertimbang.

b) Seperti yang Anda sebutkan, model lain yang mungkin dapat dipasang pada skala log:

E(log10A|log10C)=log10k+log10C

Ini mungkin cocok jika variasi mendekati konstan pada skala log (Var(log10A|log10C) near-constant) ... yang cenderung Anda lihat jika varians-power dalam (a) adalah 2 atau mendekati 2.

Perhatikan bahwa model ini memiliki intersep, tetapi memiliki koefisien kemiringan 1. Cara untuk menyesuaikan model ini adalah dengan mencocokkan:

E(log10A|log10C)log10C=log10k

(Yang mengatakan, Anda mungkin ingin memeriksa model yang lebih umum yang asli Anda, seperti mempertimbangkan kemiringan non-unit di (b) misalnya.

Yang cocok di (a) dan (b) berat data berbeda (meskipun dengan p=2di (a) hasilnya akan sangat dekat), sehingga mereka tidak akan memberikan jawaban yang identik. Pada data Anda, mereka berbeda sekitar 26%, yang menggambarkan bahwa untuk sampel seperti itu pilihannya cukup penting.

Jika Anda tidak memiliki pengetahuan sebelumnya untuk memandu pilihan, analisis residual mungkin merupakan cara untuk sampai pada suatu model (terutama jika Anda memiliki kumpulan data lain di mana Anda dapat mendasarkan pilihan itu); atau Anda bisa membuatnyap parameter model yang lebih besar.

(Seperti yang terjadi, sedikit analisis residual menunjukkan kepada saya mungkin ada masalah potensial dengan keduanya (a) dengan varians konstan dan dengan model dalam (b); model, atau bahkan, mungkin, model yang lebih umum (a) - with0intercept dan (b) -dengan non-unit slope tentu cocok (ada saran kelengkungan tentang garis) .Salah satu kekhawatiran adalah leverage dalam (a), yang berasal dari 'banyak urutan besarnya')

4) Perhatikan bahwa ada banyak model lain yang mungkin dipasang.

Sebagai contoh, pertimbangkan E(Aq|C)=kqCq untuk beberapa konstanta yang ditentukan q (log-model sesuai dengan q=0).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.