← All NMath Code Examples

```Imports System
Imports System.IO

Imports CenterSpace.NMath.Core

Namespace CenterSpace.NMath.Examples.VisualBasic

A .NET example in Visual Basic showing Partial Least Squares (PLS) with scores

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 m different
constituents 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 = {cij} be the nxm matrix where cij is the concentration of
the jth constituent in the ith sample. This example constructs a
predictive model for C given A Imports PLS. In particular the scores and
are examined.

The main entry point for the application.
Sub Main()

Read in absorption data matrices. Well use A to calculate the
PLS model and predict concentrations Imports the absorption data
in A1
Dim A As DoubleMatrix = New DoubleMatrix(New StreamReader("chemometricX.dat"))
Dim A1 As DoubleMatrix = New DoubleMatrix(New StreamReader("chemometricX1.dat"))
Dim C As DoubleMatrix = New DoubleMatrix(New StreamReader("chemometricY.dat"))

Dim numComponents As Integer = 3
Dim pls As PLS2 = New PLS2()
Console.WriteLine()
Console.WriteLine("Calculating...")
pls.Calculate(A, C, numComponents)

Check that the PLS computation succeeded.
Console.WriteLine("Is it good? " & pls.IsGood)

the particular PLS algorithm used. We used the NIPALS algorithm,
which is the default, so we must retrieve the algorithm object
from the PLS object and extract the scores and loadings from it.
Dim Alg As PLS2NipalsAlgorithm = DirectCast(pls.Calculator, PLS2NipalsAlgorithm)

Get the spectral scores
Dim S As DoubleMatrix = Alg.PredictorScores
Console.WriteLine()
Console.WriteLine("Spectral Scores ------------------------------")
Console.WriteLine()
For I As Integer = 0 To (numComponents - 1)
Console.WriteLine("spectral score " & I)
Console.WriteLine(S.Col(I).ToString("G5"))
Console.WriteLine()
Next
Console.WriteLine()

Console.WriteLine()
Console.WriteLine()
For I As Integer = 0 To (numComponents - 1)
Console.WriteLine(Bx.Col(I).ToString("G5"))
Console.WriteLine()
Next
Console.WriteLine()

Get concentration weighted scores
Dim U As DoubleMatrix = Alg.ResponseScores
Console.WriteLine()
Console.WriteLine("Concentration Weighted Scores ------------------")
Console.WriteLine()
For I As Integer = 0 To (numComponents - 1)
Console.WriteLine("concentration score " & I)
Console.WriteLine(U.Col(I).ToString("G5"))
Console.WriteLine()
Next
Console.WriteLine()

Console.WriteLine()
Console.WriteLine()
For I As Integer = 0 To (numComponents - 1)
Console.WriteLine(By.Col(I).ToString("G5"))
Console.WriteLine()
Next
Console.WriteLine()

Prediction Imports the coefficients matrix. Predict the constituent
concentrations from a vector of spectral responses.
The coefficient matrix, B, can be used for prediction as follows:
Let Cu be the predicted concentrations 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)B.
Dim CBar As DoubleVector = Alg.ResponseMean
Dim ABar As DoubleVector = Alg.PredictorMean
Dim B As DoubleMatrix = Alg.Coefficients

Dim Au As DoubleVector = A1.Row(0)
Dim CU As DoubleVector = CBar + NMathFunctions.TransposeProduct(B, (Au - ABar))
Console.WriteLine("Prediction Using Coefficient Matrix ------------------")
Console.WriteLine()
Console.WriteLine("Predicted concentrations for spectral response")
Console.WriteLine()
Console.WriteLine()
Console.WriteLine(Au.ToString("G5"))
Console.WriteLine()
Console.WriteLine("is")
Console.WriteLine()
Console.WriteLine(CU)

Console.WriteLine()
Console.WriteLine("Press Enter Key")