Imports System Imports CenterSpace.NMath.Core Namespace CenterSpace.NMath.Examples.VisualBasic A .NET example in Visual Basic showing Partial Least Squares (PLS) with scores and loadings. In chemometrics one often wishes to know the chemical composition of a sample of, say, a gas or liquid. One common technique is to study the absorption spectrum of light passing through the sample. Partial Least Squares (PLS) is often used to construct a predictive model in this situation. Suppose we wish to measure the concentration of a constituent in the substance and that we look at n different absorption spectra (an absorption spectra measures the amount of light absorbed at each wavelength). Pick p different wavelengths in the absorption spectra and let A = {aij} be the be the nxp matrix where aij is the absorption measurement at the jth wavelength in the ith sample. And let C = {ci} be the m vector where ci is the concentration of the constituent in the ith sample. This example constructs a predictive model for C given A using PLS. In particular the scores and loadings for the response variable, C, and the predictor variable, A, are examined. Module PLS1ScoresAndLoadingsExample Sub Main() Dim Rng As New RandGenUniform(124) Rng.LowerBound = 0.1 Rng.UpperBound = 1.1 Dim N As Integer = 7 number of samples (spectra) Dim P As Integer = 10 number of data points (wavelength) Dim F As Integer = 4 number of PLS eigenvectors Dim A As New DoubleMatrix(N, P, Rng) spectral absorbances Dim C As New DoubleVector(N, Rng) constituent concentrations Dim PLS As New PLS1() Console.WriteLine() Console.WriteLine("Performing calculation...") PLS.Calculate(A, C, F) Console.WriteLine() Console.WriteLine("Is it good? " & PLS.IsGood) Console.WriteLine() Dim ALG = DirectCast(PLS.Calculator, PLS1NipalsAlgorithm) Get the spectral scores Dim S As DoubleMatrix = ALG.Scores Console.WriteLine() Console.WriteLine("Spectral Scores ------------------------------") Console.WriteLine() For I As Integer = 0 To (F - 1) Console.Write("spectral score ") Console.WriteLine(I) Console.WriteLine(S.Col(I).ToString("G5")) Console.WriteLine() Next Console.WriteLine() Get spectral loadings Dim Bx As DoubleMatrix = ALG.Loadings Console.WriteLine("Spectral Loadings ------------------------------") Console.WriteLine() For I As Integer = 0 To (F - 1) Console.Write("spectral loading ") Console.WriteLine(I) Console.WriteLine(Bx.Col(I).ToString("G5")) Console.WriteLine() Next Console.WriteLine() Predict the constituent concentrations from a vector of spectral responses. The regression vector, r, can be used for prediction as follows: Let Cu be the predicted concentration for the spectral response vector Au, let Abar the mean of the spectral data and Cbar be the mean of the concentrations data used to create the model. Then / Cu = Cbar + (Au - Abar)r. Dim Au As New DoubleVector(P, Rng) spectral responses Dim CBar As Double = ALG.ResponseMean Dim Abar As DoubleVector = ALG.PredictorMean Dim R As DoubleVector = ALG.RegressionVector Dim CU As Double = CBar + NMathFunctions.Dot((Au - Abar), R) Console.WriteLine() Console.WriteLine("Prediction Using Regression Vector ------------------") Console.WriteLine() Console.WriteLine("Predicted concentrations for spectral response ") Console.WriteLine() Console.WriteLine(Au.ToString("G5")) Console.WriteLine() Console.WriteLine("is") Console.WriteLine() Console.WriteLine(CU) Console.WriteLine() Console.WriteLine("Press Enter Key") Console.Read() End Sub End Module End Namespace← All NMath Code Examples