private void btnCompute_Click(object sender, EventArgs e)
{
if (dgvAnalysisSource.DataSource == null)
{
MessageBox.Show("Please load some data first.");
return;
}
// Finishes and save any pending changes to the given data
dgvAnalysisSource.EndEdit();
DataTable table = dgvAnalysisSource.DataSource as DataTable;
// Creates a matrix from the source data table
double[][] sourceMatrix = table.ToArray(out inputColumnNames);
// Creates the Simple Descriptive Analysis of the given source
sda = new DescriptiveAnalysis(inputColumnNames).Learn(sourceMatrix);
// Populates statistics overview tab with analysis data
dgvDistributionMeasures.DataSource = sda.Measures;
// Extract variables
List<string> inputNames = new List<string>();
foreach (string name in clbInput.CheckedItems)
inputNames.Add(name);
this.inputColumnNames = inputNames.ToArray();
List<string> outputNames = new List<string>();
foreach (string name in clbOutput.CheckedItems)
outputNames.Add(name);
this.outputColumnNames = outputNames.ToArray();
DataTable inputTable = table.DefaultView.ToTable(false, inputColumnNames);
DataTable outputTable = table.DefaultView.ToTable(false, outputColumnNames);
double[][] inputs = inputTable.ToArray();
double[][] outputs = outputTable.ToArray();
// Creates the Partial Least Squares of the given source
pls = new PartialLeastSquaresAnalysis()
{
Method = (AnalysisMethod)cbMethod.SelectedValue,
Algorithm = (PartialLeastSquaresAlgorithm)cbAlgorithm.SelectedValue
};
// Computes the Partial Least Squares
pls.Learn(inputs, outputs);
// Populates components overview with analysis data
dgvWeightMatrix.DataSource = new ArrayDataView(pls.Weights);
dgvFactors.DataSource = pls.Factors;
dgvAnalysisLoadingsInput.DataSource = new ArrayDataView(pls.Predictors.FactorMatrix);
dgvAnalysisLoadingsOutput.DataSource = new ArrayDataView(pls.Dependents.FactorMatrix);
this.regression = pls.CreateRegression();
dgvRegressionCoefficients.DataSource = new ArrayDataView(regression.Coefficients, outputColumnNames);
dgvRegressionIntercept.DataSource = new ArrayDataView(regression.Intercepts, outputColumnNames);
dgvProjectionComponents.DataSource = pls.Factors;
numComponents.Maximum = pls.Factors.Count;
numComponents.Value = 1;
dgvRegressionComponents.DataSource = pls.Factors;
numComponentsRegression.Maximum = pls.Factors.Count;
numComponentsRegression.Value = 1;
distributionView.DataSource = pls.Factors;
cumulativeView.DataSource = pls.Factors;
dgvProjectionSourceX.DataSource = inputTable;
dgvProjectionSourceY.DataSource = outputTable;
dgvRegressionInput.DataSource = table.DefaultView.ToTable(false,
inputColumnNames.Concatenate(outputColumnNames));
}