Detrending spectral data
Normalizes each row of an input matrix by applying a SNV transformation followed by fitting a second order linear model and returning the fitted residuals.
detrend(X, wav, p = 2)
X |
a numeric matrix or vector to process (optionally a data frame that can be coerced to a numerical matrix) |
wav |
the wavelengths/ band centers. |
p |
an integer larger than 1 indicating the polynomial order (default is 2, as in the original paper of Barnes et al., 1989). |
The detrend is a row-wise transformation that allows to correct for wavelength-dependent scattering effects (variations in curvilinearity). A \(p\) order polynomial is fit for each spectrum (\(x_i\)) using the vector of bands (\(\lambda\), e.g. wavelengths) as explanatory variable as follows:
were a, b, c are estimated by least squares, and \(e_i\) are the spectral residuals of the least square fit. The residuals of the \(i\)th correspond to the \(i\)th detrended spectrum.
a matrix or vector with the detrended data.
Antoine Stevens and Leonardo Ramirez-Lopez
Barnes RJ, Dhanoa MS, Lister SJ. 1989. Standard normal variate transformation and de-trending of near-infrared diffuse reflectance spectra. Applied spectroscopy, 43(5): 772-777.
data(NIRsoil) wav <- as.numeric(colnames(NIRsoil$spc)) # conversion to reflectance opar <- par(no.readonly = TRUE) par(mfrow = c(2, 1), mar = c(4, 4, 2, 2)) # plot of the 10 first spectra matplot(wav, t(NIRsoil$spc[1:10, ]), type = "l", xlab = "", ylab = "Absorbance" ) mtext("Raw spectra") det <- detrend(NIRsoil$spc, wav) matplot(wav, t(det[1:10, ]), type = "l", xlab = "Wavelength /nm", ylab = "Absorbance" ) mtext("Detrend spectra") par(opar)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.