Imports System Imports System.IO Imports CenterSpace.NMath.Core namespace CenterSpace.NMath.Examples.CSharp A .NET example in Visual Basic showing basic use of the PLS1 and PLS2 classes for solving partial least squares (PLS) problems. Module PLSExample Sub Main() Read in some chemometric data. The response, or Y, variable is a measure of the concentration of substances in a sample and the predictor, or x, variable is the absorption spectra of the sample sampled at discrete wavelengths. Well read in two sets of predictor values. One to construct the model with and the other for making predictions. Construct the absorption matrices A and A1, and the concentration matrix C Dim A As DoubleMatrix = New DoubleMatrix(New StreamReader("chemometricX1.dat")) Dim A1 As DoubleMatrix = New DoubleMatrix(New StreamReader("chemometricX2.dat")) Dim C As DoubleMatrix = New DoubleMatrix(New StreamReader("chemometricY.dat")) Dim NumComponents As Integer = 3 ********************************************************************** PLS1 PLS1 is used when the response variable is univariate, or one dimensional. Pick out the first column of our multivariate response variables as our univariate response variable y. Dim Y As DoubleVector = C.Col(0) Construct a PLS1 object and perform the calculation. Dim PlsOne As PLS1 = New PLS1() Console.WriteLine() Console.Write("Calculating PLS1... ") PlsOne.Calculate(A, Y, NumComponents) Check that the calculation succeeded. If it did not, prInteger out a diagnostic error message and exit. If (PlsOne.IsGood) Then Console.WriteLine("Success") Else Console.WriteLine("PLS1 calculation failed: " & PlsOne.Message) Return End If Pull out a sample from our predictor matrix A1 and make a prediction for the corresponding concentration value. Dim X As DoubleVector = A1.Row(0) Dim pls1Yhat As Double = PlsOne.Predict(X) Console.WriteLine() Console.WriteLine("Predicted value for x = " & pls1Yhat.ToString("G5")) Predict the concentration for all the samples in A1. Dim pls1YhatVec As DoubleVector = PlsOne.Predict(A1) Console.WriteLine() Console.Write("Predicted value for A1 = ") Console.WriteLine(pls1YhatVec.ToString("G5")) Construct an Analysis of Variance (ANOVA) object for PLS1 model and prInteger the results. Dim PlsOneAnova As PLS1Anova = New PLS1Anova(PlsOne) Console.WriteLine() Console.WriteLine() Console.WriteLine("PLS1 ANOVA results ------------------------") Console.WriteLine(" Sum of squares Total: " & PlsOneAnova.SumOfSquaresTotal) Console.WriteLine(" Sum of squares residuals: " & PlsOneAnova.SumOfSquaresResiduals) Console.WriteLine(" Standard Error: " & PlsOneAnova.StandardError) Console.WriteLine(" Root means square error prediction: " & PlsOneAnova.RootMeanSqrErrorPrediction) Console.WriteLine(" Coefficient of determination (R^2): " & PlsOneAnova.CoefficientOfDetermination) Perform the the PLS2 calculation on the multivariate response variable C and check that the calculation succeeded. If it did not, prInteger out a diagnostic error message and exit. Dim PlsTwo As PLS2 = New PLS2() Console.WriteLine() Console.WriteLine() Console.Write("Calculating PLS2... ") PlsTwo.Calculate(A, C, NumComponents) Check that the PLS computation succeeded. If (PlsTwo.IsGood) Then Console.WriteLine("Success") Else Console.WriteLine("PLS2 calculation failed: " & PlsTwo.Message) Return End If Grab a sample from the other absorption matrix and make a prediction of the concentrations of substances in the sample. X = A1.Row(0) Dim YHat As DoubleVector = PlsTwo.Predict(X) Console.WriteLine() Console.Write("Predicted value for x = ") Console.WriteLine(YHat.ToString("G5")) Make predictions for all the samples in the absorption matrix A1 Dim YHatMat As DoubleMatrix = PlsTwo.Predict(A1) Console.WriteLine() Console.Write("Predicted value for A1 = ") Console.WriteLine(YHatMat.ToString("G5")) Construct an Analysis of Variance (ANOVA) object for PLS2 model and prInteger the results. Dim PlsTwoAnova As PLS2Anova = New PLS2Anova(PlsTwo) Console.WriteLine() Console.WriteLine() Console.WriteLine("PLS2 ANOVA results ------------------------") Console.WriteLine() Console.WriteLine("Sum of squares total") Console.WriteLine(PlsTwoAnova.SumOfSquaresTotal) Console.WriteLine() Console.WriteLine("Sum of squares residuals") Console.WriteLine(PlsTwoAnova.SumOfSquaresResiduals) Console.WriteLine() Console.WriteLine("Standard error") Console.WriteLine(PlsTwoAnova.StandardError) Console.WriteLine() Console.WriteLine("Root means square error prediction") Console.WriteLine(PlsTwoAnova.RootMeanSqrErrorPrediction) Console.WriteLine() Console.WriteLine("Coefficient of determination (R^2)") Console.WriteLine(PlsTwoAnova.CoefficientOfDetermination) Console.WriteLine() Console.WriteLine("Press Enter Key") Console.Read() End Sub End Module End Namespace← All NMath Code Examples