ISmPrincipalComponentAnalysis.Statistics

Fore Syntax

Statistics: Array;

Fore.NET Syntax

Statistics: System.Array;

Description

The Statistics property returns eigenvalues and statistics.

Comments

Array elements:

Where i is the index of the principal component. Component indexation is continuous starting with zero.

Fore Example

Add links to the system assembly Stat.

Sub UserPCA;
Var
    pc: SmPrincipalComponentAnalysis;
    Obj: ISlSeries;
    d0, d1, d2: Double;
    i, res: Integer;
    ar1, ar2, ar3: Array Of Double;
Begin
    // Create an object for method calculation
    pc := New SmPrincipalComponentAnalysis.Create;
     // Set missing data treatment method
    pc.MissingData.Method := MissingDataMethod.AnyValue;
    ar1 := New Double[10];
    ar2 := New Double[10];
    ar3 := New Double[10];
    // Set values for initial data sets
    ar1[0] := 7.0; ar2[0] := 4.0; ar3[0] := 3.0;
    ar1[1] := 4.0; ar2[1] := 1.0; ar3[1] := 8.0;

    ar1[2] := 6.0; ar2[2] := 3.0; ar3[2] := 5.0;
    ar1[3] := 8.0; ar2[3] := Double.Nan; ar3[3] := 1.0;
    ar1[4] := 8.0; ar2[4] := 5.0; ar3[4] := 7.0;
    ar1[5] := Double.Nan; ar2[5] := 2.0; ar3[5] := 9.0;
    ar1[6] := 5.0; ar2[6] := 3.0; ar3[6] := 3.0;
    ar1[7] := 9.0; ar2[7] := 5.0; ar3[7] := 8.0;
    ar1[8] := 7.0; ar2[8] := 4.0; ar3[8] := 5.0;
    ar1[9] := 8.0; ar2[9] := 2.0; ar3[9] := 2.0;
    // Set initial data sets
    Obj := pc.Objects;
    Obj.Add.Value := ar1;
    Obj.Add.Value := ar2;

    Obj.Add.Value := ar3;
    // Set analysis type
    pc.Analysis.Type := AnalysisType.Correlation;
    // Define type of condition applied to principal components
    pc.ScoreType := PCAScoreType.Stand;
    // Use means as additional components
    pc.IncludeAverages := True;
    // Specify centering type for the original matrix
    pc.MatrixAlignmentType := AlignmentType.NoAlignment;
    // Run calculation and output the result to console window
    res := pc.Execute;
    If res <> 0 Then
        Debug.WriteLine(pc.Errors);
    Else
        Debug.WriteLine("Eigenvectors: ");
        For i := 1 To 3 Do
            d0 := pc.P[0, i - 1];
            d1 := pc.P[1, i - 1];
            d2 := pc.P[2, i - 1];
            Debug.AssertMsg(False"Principal component №" +
                i.ToString + ": " + d0.ToString +
                " " + d1.ToString + " " + d2.ToString);
        End For;

        Debug.WriteLine("================================");
        Debug.WriteLine("Values of principal components: ");
        Debug.AssertMsg(False"Principal component №1, №2, №3");
        For i := 1 To pc.v.GetUpperBound(1) + 1 Do
            d0 := pc.V[i - 10];
            d1 := pc.V[i - 11];
            d2 := pc.V[i - 12];
            Debug.AssertMsg(False"Observation №" +
                i.ToString + ": " + d0.ToString +
                " " + d1.ToString + " " + d2.ToString);
        End For;
        Debug.WriteLine("================================");
        Debug.WriteLine("Statistics:");

        For i := 1 To 3 Do
            Debug.WriteLine("Principal component №" + i.ToString);
            d0 := pc.Statistics[i - 10];
            Debug.WriteLine("  - eigenvalue: " + d0.ToString);
            d0 := pc.Statistics[i - 11];
            Debug.WriteLine("  - variance:" + d0.ToString);
            d0 := pc.Statistics[i - 12];
            Debug.WriteLine("  - cumulative variance: " + d0.ToString);
            d0 := pc.Statistics[i - 13];
            Debug.WriteLine("  - chi-square statistic: " + d0.ToString);
            d0 := pc.Statistics[i - 14];
            Debug.WriteLine("  - number of degrees of freedom for chi-square statistics: " + d0.ToString);
            d0 := pc.Statistics[i - 15];
            Debug.WriteLine("  - probability for chi-square statistics: " + d0.ToString);
        End For;
    End If;
End Sub UserPCA;

After executing the example the console window displays eigenvectors, values of principal components and statistics.

Fore.NET Example

The requirements and result of the Fore.NET example execution match with those in the Fore example.

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub UserPCA();
Var
    pc: SmPrincipalComponentAnalysis;
    Obj: ISlSeries;
    d0, d1, d2: Double;
    i, res: Integer;
    ar1, ar2, ar3: Array Of Double;
Begin
    // Create an object for method calculation
    pc := New SmPrincipalComponentAnalysis.Create();
     // Set missing data treatment method
    pc.MissingData.Method := MissingDataMethod.mdmAnyValue;
    ar1 := New Double[10];

    ar2 := New Double[10];
    ar3 := New Double[10];
    // Set values for initial data sets
    ar1[0] := 7.0; ar2[0] := 4.0; ar3[0] := 3.0;
    ar1[1] := 4.0; ar2[1] := 1.0; ar3[1] := 8.0;
    ar1[2] := 6.0; ar2[2] := 3.0; ar3[2] := 5.0;
    ar1[3] := 8.0; ar2[3] := Double.Nan; ar3[3] := 1.0;
    ar1[4] := 8.0; ar2[4] := 5.0; ar3[4] := 7.0;
    ar1[5] := Double.Nan; ar2[5] := 2.0; ar3[5] := 9.0;
    ar1[6] := 5.0; ar2[6] := 3.0; ar3[6] := 3.0;
    ar1[7] := 9.0; ar2[7] := 5.0; ar3[7] := 8.0;
    ar1[8] := 7.0; ar2[8] := 4.0; ar3[8] := 5.0;
    ar1[9] := 8.0; ar2[9] := 2.0; ar3[9] := 2.0;
    // Set initial data sets
    Obj := pc.Objects;
    Obj.Add().Value := ar1;

    Obj.Add().Value := ar2;
    Obj.Add().Value := ar3;
    // Setting analysis type
    pc.Analysis.Type := AnalysisType.atCorrelation;
    // Define type of condition applied to principal components
    pc.ScoreType := PCAScoreType.stStand;
    // Use means as additional components
    pc.IncludeAverages := True;
    // Specify centering type for the original matrix
    pc.MatrixAlignmentType := AlignmentType.atNoAlignment;
    // Run calculation and output the result to console window  
    res := pc.Execute();
    If res <> 0 Then
        System.Diagnostics.Debug.WriteLine(pc.Errors);
    Else
        System.Diagnostics.Debug.WriteLine("Eigenvectors: ");
        For i := 1 To 3 Do
            d0 := pc.P.GetValue(i - 10As double;
            d1 := pc.P.GetValue(i - 11As double;
            d2 := pc.P.GetValue(i - 12As double;
            System.Diagnostics.Debug.WriteLine("Principal component №" +
                i.ToString() + ": " + d0.ToString() +
                " " + d1.ToString() + " " + d2.ToString());
        End For;

        System.Diagnostics.Debug.WriteLine("================================");
        System.Diagnostics.Debug.WriteLine("Values of principal components: ");
        System.Diagnostics.Debug.WriteLine("Principal component №1, №2, №3");
        For i := 1 To pc.v.GetUpperBound(0) + 1 Do
            d0 := pc.V.GetValue(i - 10As double;
            d1 := pc.V.GetValue(i - 11As double;
            d2 := pc.V.GetValue(i - 12As double;
            System.Diagnostics.Debug.WriteLine("Observation №" +
                i.ToString() + ": " + d0.ToString() +
                " " + d1.ToString() + " " + d2.ToString());
        End For;
        System.Diagnostics.Debug.WriteLine("================================");
        System.Diagnostics.Debug.WriteLine("Statistics:");

        For i := 1 To 3 Do
            System.Diagnostics.Debug.WriteLine("Principal component №" + i.ToString());
            d0 := pc.Statistics.GetValue(0, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - eigenvalue: " + d0.ToString());
            d0 := pc.Statistics.GetValue(1, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - variance:" + d0.ToString());
            d0 := pc.Statistics.GetValue(2, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - cumulative variance: " + d0.ToString());
            d0 := pc.Statistics.GetValue(3, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - chi-square statistic: " + d0.ToString());
            d0 := pc.Statistics.GetValue(4, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - number of degrees of freedom for chi-square statistics: " + d0.ToString());
            d0 := pc.Statistics.GetValue(5, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - probability for chi-square statistics: " + d0.ToString());
        End For;
    End If;
End Sub UserPCA;

See also:

ISmPrincipalComponentAnalysis