(This article was first published on

**NIR-Quimiometria**, and kindly contributed to R-bloggers)This is another way to pre-treat aspectra set with the SNV math-treatment

(Standard Normal Variate). You can see the other one in the post :

In this post, I use the R function

**"sweep**".**library(ChemometricsWithR)**

**#in a first step I calculate the average value**

**#of all the data points for every spectrum and**

**#subtract it to every data point of the**

**#spectrum using the function "colMeans"**

**#from the package "ChemometricsWhithR"**

**#the mean value for every spectrum is now cero.**

**NIR.1<-sweep(gasoline$NIR,MARGIN=1,**

**+colMeans(t(gasoline$NIR)),FUN="-")**

#sd function calculates the SD for all the data

#points of every #spectrum.

#We divide now the value of every data point

#by the SD of all the values of that spectrum.

**NIR.2<-sweep(NIR.1,MARGIN=1,**

**+sd(t(gasoline$NIR)),FUN="/")**

**#Now the spectrum has a mean of cero and a SD of 1.**

**#Use matplot to plot the spectra.**

**matplot(wavelengths,t(NIR.2),type="l",lty=1,**

**+xlab="nm",ylab="log 1/R",**

**+main="SNV Gasoline Spectra",col="blue")**

samples and the columns the wavelengths, so we have to transpose the matrix

for some calculations.

Gasoline is a data set included in the “pls” package. Is not a set to see the benefits

of the SNV math treatment (not enough scatter), but you can try

with other data sets as "yarn".

To

**leave a comment**for the author, please follow the link and comment on his blog:**NIR-Quimiometria**.R-bloggers.com offers

**daily e-mail updates**about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...