ISmPrincipalComponentAnalysis.Statistics

Синтаксис Fore

Statistics: Array;

Синтаксис Fore.NET

Statistics: System.Array;

Описание

Свойство Statistics возвращает собственные значения и статистики.

Комментарии

Элементы массива:

Где i - индекс главной компоненты. Индексация компонент сквозная и начинается с нуля.

Пример Fore

Добавьте ссылки на системную сборку «Stat».

Sub UserPCA;
Var
    pc: SmPrincipalComponentAnalysis;
    Obj: ISlSeries;
    d0, d1, d2: Double;
    i, res: Integer;
    ar1, ar2, ar3: Array Of Double;
Begin
    // Создаем объект для расчёта метода
    pc := New SmPrincipalComponentAnalysis.Create;
    // Задаем метод обработки пропусков
    pc.MissingData.Method := MissingDataMethod.AnyValue;
    ar1 := New Double[10];
    ar2 := New Double[10];
    ar3 := New Double[10];
    // Задаем значения для исходных наборов данных
    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;
    // Задаем исходные наборы данных
    Obj := pc.Objects;
    Obj.Add.Value := ar1;
    Obj.Add.Value := ar2;

    Obj.Add.Value := ar3;
    // Задаем тип анализа
    pc.Analysis.Type := AnalysisType.Correlation;
    // Задаем тип условия, накладываемого на главные компоненты
    pc.ScoreType := PCAScoreType.Stand;
    // Используем средние в качестве дополнительных компонентов
    pc.IncludeAverages := True;
    // Задаем тип центрирования исходной матрицы
    pc.MatrixAlignmentType := AlignmentType.NoAlignment;
    // Выполняем расчёт и выводим результат в окно консоли
    res := pc.Execute;
    If res <> 0 Then
        Debug.WriteLine(pc.Errors);
    Else
        Debug.WriteLine("Собственные векторы: ");
        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"Главная компонента №" +
                i.ToString + ": " + d0.ToString +
                " " + d1.ToString + " " + d2.ToString);
        End For;

        Debug.WriteLine("================================");
        Debug.WriteLine("Значения главных компонент: ");
        Debug.AssertMsg(False"Главная компонента №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"Наблюдение №" +
                i.ToString + ": " + d0.ToString +
                " " + d1.ToString + " " + d2.ToString);
        End For;
        Debug.WriteLine("================================");
        Debug.WriteLine("Статистики:");

        For i := 1 To 3 Do
            Debug.WriteLine("Главная компонента №" + i.ToString);
            d0 := pc.Statistics[i - 10];
            Debug.WriteLine("  - собственное значение: " + d0.ToString);
            d0 := pc.Statistics[i - 11];
            Debug.WriteLine("  - дисперсия:" + d0.ToString);
            d0 := pc.Statistics[i - 12];
            Debug.WriteLine("  - накопленная дисперсия: " + d0.ToString);
            d0 := pc.Statistics[i - 13];
            Debug.WriteLine("  - статистика хи-квадрат: " + d0.ToString);
            d0 := pc.Statistics[i - 14];
            Debug.WriteLine("  - число степеней свободы для статистики хи-квадрат: " + d0.ToString);
            d0 := pc.Statistics[i - 15];
            Debug.WriteLine("  - вероятность для статистики хи-квадрат: " + d0.ToString);
        End For;
    End If;
End Sub UserPCA;

После выполнения примера в окно консоли будут выведены собственные векторы, значения главных компонент и статистики.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

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
    // Создаем объект для расчёта метода
    pc := New SmPrincipalComponentAnalysis.Create();
    // Задаем метод обработки пропусков
    pc.MissingData.Method := MissingDataMethod.mdmAnyValue;
    ar1 := New Double[10];

    ar2 := New Double[10];
    ar3 := New Double[10];
    // Задаем значения для исходных наборов данных
    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;
    // Задаем исходные наборы данных
    Obj := pc.Objects;
    Obj.Add().Value := ar1;

    Obj.Add().Value := ar2;
    Obj.Add().Value := ar3;
    // Задаем тип анализа
    pc.Analysis.Type := AnalysisType.atCorrelation;
    // Задаем тип условия, накладываемого на главные компоненты
    pc.ScoreType := PCAScoreType.stStand;
    // Используем средние в качестве дополнительных компонентов
    pc.IncludeAverages := True;
    // Задаем тип центрирования исходной матрицы
    pc.MatrixAlignmentType := AlignmentType.atNoAlignment;
    // Выполняем расчёт и выводим результат в окно консоли  
    res := pc.Execute();
    If res <> 0 Then
        System.Diagnostics.Debug.WriteLine(pc.Errors);
    Else
        System.Diagnostics.Debug.WriteLine("Собственные векторы: ");
        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("Главная компонента №" +
                i.ToString() + ": " + d0.ToString() +
                " " + d1.ToString() + " " + d2.ToString());
        End For;

        System.Diagnostics.Debug.WriteLine("================================");
        System.Diagnostics.Debug.WriteLine("Значения главных компонент: ");
        System.Diagnostics.Debug.WriteLine("Главная компонента №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("Наблюдение №" +
                i.ToString() + ": " + d0.ToString() +
                " " + d1.ToString() + " " + d2.ToString());
        End For;
        System.Diagnostics.Debug.WriteLine("================================");
        System.Diagnostics.Debug.WriteLine("Статистики:");

        For i := 1 To 3 Do
            System.Diagnostics.Debug.WriteLine("Главная компонента №" + i.ToString());
            d0 := pc.Statistics.GetValue(0, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - собственное значение: " + d0.ToString());
            d0 := pc.Statistics.GetValue(1, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - дисперсия:" + d0.ToString());
            d0 := pc.Statistics.GetValue(2, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - накопленная дисперсия: " + d0.ToString());
            d0 := pc.Statistics.GetValue(3, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - статистика хи-квадрат: " + d0.ToString());
            d0 := pc.Statistics.GetValue(4, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - число степеней свободы для статистики хи-квадрат: " + d0.ToString());
            d0 := pc.Statistics.GetValue(5, i - 1As double;
            System.Diagnostics.Debug.WriteLine("  - вероятность для статистики хи-квадрат: " + d0.ToString());
        End For;
    End If;
End Sub UserPCA;

См. также:

ISmPrincipalComponentAnalysis