VB PLS2 Scores And Loadings Example

← All NMath Code Examples

 

Imports System
Imports System.IO
Imports System.Threading

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 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 
  loadings for the response variable, C, and the predictor variable, A, 
  are examined.

  Module PLS2ScoresAndLoadingsExample

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

      Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")

      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 scores and loadings availability and access are specific
      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()

      Get spectral loadings
      Dim Bx As DoubleMatrix = Alg.PredictorLoadings
      Console.WriteLine()
      Console.WriteLine("Spectral Loadings ------------------------------")
      Console.WriteLine()
      For I As Integer = 0 To (numComponents - 1)
        Console.WriteLine("spectral loading " & I)
        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()

      Get concentration loadings
      Dim By As DoubleMatrix = Alg.ResponseLoadings
      Console.WriteLine()
      Console.WriteLine("Concentration Loadings ------------------")
      Console.WriteLine()
      For I As Integer = 0 To (numComponents - 1)
        Console.WriteLine("concentration loading " & I)
        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")
      Console.Read()

    End Sub
  End Module
End Namespace


← All NMath Code Examples
Top