Mathematics Linear Algebra Statistics
New Version 5.1!

QuickStart Samples

# Multiple Linear Regression QuickStart Sample (Visual Basic)

Illustrates how to use the LinearRegressionModel class to perform a multiple linear regression in Visual Basic.

```Imports System.IO
Imports Extreme.Mathematics
Imports Extreme.Statistics
Imports Extreme.Statistics.Tests

Namespace Extreme.Numerics.QuickStart.VB
' Illustrates the use of the LinearRegressionModel class
' to perform multiple linear regression.
Module MultipleRegression

Sub Main()
' Multiple linear regression can be performed using
' the LinearRegressionModel class.
'
' This QuickStart sample uses old economic data about 50 countries
' from Belsley, Kuh and Welsch. The fields are as follows:
'   DispInc: Per capita disposable income.
'   Growth:  Percent rate of change of DispInc.
'   Pop15:   Percentage of population under 15.
'   Pop75:   Percentage of population over 75.
'   Savings: Aggregate savings divided by disposable income.
'
' We want to investigate the effect of the first four variables
' on the savings ratio.

' First, read the data from a file into an ADO.NET DataTable.
' For the sake of clarity, we put this code in its own method.
Dim table As DataTable = ReadData()
If table Is Nothing Then Exit Sub

' Next, create a VariableCollection from the data table:
Dim Data As VariableCollection = New VariableCollection(table)

' Now create the regression model. Parameters are the name
' of the dependent variable, a string array containing
' the names of the independent variables, and the VariableCollection
' containing all variables.
Dim model As LinearRegressionModel = New LinearRegressionModel(Data, _
"Savings", New String() {"Pop15", "Pop75", "DispInc", "Growth"})

' We can set model options now, such as whether to include a constant:
model.NoIntercept = False

' The Compute method performs the actual regression analysis.
model.Compute()

' The Parameters collection contains information about the regression
' parameters.
Console.WriteLine("Variable              Value    Std.Error  t-stat  p-Value")
For Each param As Parameter In model.Parameters
' Parameter objects have the following properties, in order:
'   - Name, usually the name of the variable:
'   - Estimated value of the parameter:
'   - Standard error:
'   - The value of the t statistic for the hypothesis that the parameter is zero.
'   - Probability corresponding to the t statistic.
Console.WriteLine("{0,-20}{1,10:F5}{2,10:F5}{3,8:F2} {4,7:F4}", _
param.Name, param.Value, param.StandardError, param.Statistic, param.PValue)
Next
Console.WriteLine()

' In addition to these properties, Parameter objects have a GetConfidenceInterval
' method that returns a confidence interval at a specified confidence level.
' Notice that individual parameters can be accessed using their numeric index.
' Parameter 0 is the intercept, if it was included.
Dim confidenceInterval As Interval = model.Parameters(0).GetConfidenceInterval(0.95)
Console.WriteLine("95% confidence interval for Growth: {0:F4} - {1:F4}", _
confidenceInterval.LowerBound, confidenceInterval.UpperBound)

' Parameters can also be accessed by name:
confidenceInterval = model.Parameters("DispInc").GetConfidenceInterval(0.95)
Console.WriteLine("95% confidence interval for Growth: {0:F4} - {1:F4}", _
confidenceInterval.LowerBound, confidenceInterval.UpperBound)
Console.WriteLine()

' There is also a wealth of information about the analysis available
' through various properties of the LinearRegressionModel object:
Console.WriteLine("Residual standard error: {0:F3}", model.StandardError)
Console.WriteLine("R-Squared:               {0:F4}", model.RSquared)
Console.WriteLine("F-statistic:             {0:F4}", model.FStatistic)
Console.WriteLine("Corresponding p-value:   {0:F5}", model.PValue)
Console.WriteLine()

' Much of this data can be summarized in the form of an ANOVA table:
Console.WriteLine(model.AnovaTable.ToString())

Console.WriteLine("Press Enter key to continue.")
End Sub

' Reads the data from a text file into a <see cref="DataTable"/>.
' Returns a DataTable.
Dim data As DataTable = New DataTable("savings")

Dim whitespace As Char() = New Char() {" "c, Chr(9)}
Try
Catch ex As FileNotFoundException
Console.WriteLine("The data file could not be found. Please verify that the path is correct.")
Return Nothing
End Try

Dim line As String = sr.ReadLine()
Dim pos As Integer = 0
Dim pos2 As Integer
Do
Do While (Char.IsWhiteSpace(line.Chars(pos)))
pos = pos + 1
Loop
pos2 = line.IndexOfAny(whitespace, pos)
If (pos2 < 0) Then
Exit Do
Else
End If
pos = pos2
Loop While (pos >= 0)

' Assumes all columns except the first are numerical.
Dim rowData As Object() = New Object(data.Columns.Count - 1) {}
Do While (Not (line Is Nothing) AndAlso line.Length > 0)

Dim column As Integer = 0
pos = 0
Do
Dim field As String
Do While (Char.IsWhiteSpace(line.Chars(pos)))
pos = pos + 1
Loop
pos2 = line.IndexOfAny(whitespace, pos)
If (pos2 < 0) Then
field = line.Substring(pos)
Else
field = line.Substring(pos, pos2 - pos)
End If
If (column = 0) Then
rowData(column) = field
Else
rowData(column) = Double.Parse(field)
End If
column = column + 1
pos = pos2
Loop While (pos >= 0 And column < data.Columns.Count)

Loop
Return data
End Function
End Module

End Namespace```