← All NMath Code Examples
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