Дисперсионный анализ - Критерий Бартлетта на MS Visual Basic.NET

Методами статистического моделирования исследованы распре­деле­ния класси­ческих статистик, используемых при проверке гипотез о дисперсиях в серии выборок. Для статистик, используемых в критериях Бартлетта и Кокрена, по­лу­чены таблицы процентных точек, применение которых правомерно при на­блю­дае­мых законах, описываемых экспонен­циальным семейством распределений.

Знакомой нужно было реализовать и сделать анализ дисперсии, вот решил поделиться с остальными.


Дата: 29.05.2009 г.

Рейтинг: 0

Метки:

Пошаговая инструкция:

Исходный код выглядит так:

Module Module1

    Sub Main()
        Dim mas(,) As Single
        Dim maso(,) As Single
        Dim m_x, m_y As Integer
        Dim i, j As Integer
        Dim chose As Integer
        Dim zn As Random = New Random(100)
        Dim tmXi, tmSikv As Single
        Dim N As Single
        Dim m1, m2 As Single
        Dim x1 As Single
        Dim m As Integer
        Dim maxLen As Integer
        Dim tmstr As String
        Dim Xmax As Double
        Dim fp As IFormatProvider

        Console.WriteLine("Дисперсионный анализ - Критерий Бартлетта")
        Console.WriteLine()
        Console.WriteLine("Введите количество элементов в строке:")
        m_x = Console.ReadLine
        Console.WriteLine("Введите количество строк:")
        m_y = Console.ReadLine
        ReDim mas(m_x, m_y)
        ReDim maso(m_x + 2, m_y + 2)
        Console.WriteLine()
        Console.WriteLine("Выберете тип заполнения таблицы")
        Console.WriteLine("1 - Автоматическое заполнение таблицы случайными числами)")
        Console.WriteLine("2 - Ручное заполнение таблицы")
        chose = 0
        While (chose <> 1 And chose <> 2)
            chose = Console.ReadLine
        End While
        If chose = 1 Then
            For i = 1 To m_x
                For j = 1 To m_y
                    mas(i, j) = zn.NextDouble * 100
                Next j
            Next i
        Else
            For i = 1 To m_x
                For j = 1 To m_y
                    Console.WriteLine("Введите значение элемента: столбец " + i.ToString + " строка " + j.ToString)
                    mas(i, j) = Console.ReadLine
                Next j
            Next i
        End If
        'Переносим данные из исходной таблицы в расчетную
        For i = 1 To m_x
            For j = 1 To m_y
                maso(i, j) = mas(i, j)
            Next j
        Next i
        'Расчет Xi по каждому столцу
        For i = 1 To m_x
            tmXi = 0
            For j = 1 To m_y
                tmXi += maso(i, j)
            Next j
            maso(i, m_y + 1) = (1 / m_y) * tmXi
        Next i
        'Расчет Si^2 по каждому столцу - оценки выборочных дисперсий
        For i = 1 To m_x
            tmSikv = 0
            For j = 1 To m_y
                tmSikv += (maso(i, j) - maso(i, m_y + 1)) ^ 2
            Next j
            maso(i, m_y + 2) = (1 / (m_y - 1)) * tmSikv
        Next i
        'Расчет N
        For i = 1 To m_x
            N += maso(i, m_y + 1)
        Next i
        'Расчет M
        For j = 1 To m_y
            m1 = 0
            m2 = 0
            For i = 1 To m_x
                m1 += maso(i, j) * maso(i, m_y + 2)
            Next i
            For i = 1 To m_x
                m2 += maso(i, j) * Math.Log(maso(i, m_y + 2))
            Next i
            maso(m_x + 1, j) = N * Math.Log((1 / N) * m1) - m2
        Next j
        'Расчет X^2
        'm [2 .. 10] - это независимая оценка дисперсии
        m = 2
        For j = 1 To m_y
            For i = 1 To m_x
                x1 += (1 / maso(i, j)) - (1 / N)
            Next i
            maso(m_x + 2, j) = maso(m_x + 1, j) * (1 + (1 / (3 * (m - 1))) * x1) ^ (-1)
        Next j
        'Марафет таблицы
        For i = 0 To m_x
            maso(i, 0) = i.ToString
        Next i
        For j = 0 To m_y
            maso(0, j) = j.ToString
        Next j
        'Нахождение максимальной длинны элемента таблицы
        For i = 1 To m_x
            For j = 1 To m_y
                If maxLen < maso(i, j).ToString.Length Then maxLen = maso(i, j).ToString.Length
            Next j
        Next i
        'Вывод данных
        For j = 0 To m_y + 2
            tmstr = ""
            For i = 0 To m_x + 2
                tmstr += " | " + ftxt(maxLen, maso(i, j))
            Next i
            Console.WriteLine(tmstr)
        Next j
        Console.WriteLine()
        For j = 1 To m_y
            If Xmax < maso(m_x + 2, j) Then Xmax = maso(m_x + 2, j)
        Next j
        Console.WriteLine()
        Console.WriteLine("N = " + N.ToString)
        Console.WriteLine("Max X^2 = " + Xmax.ToString)
        Console.WriteLine()
        Console.WriteLine("Нажмите любую клавишу для выхода из программы...")
        Console.ReadKey()
    End Sub

    Private Function ftxt(ByVal kpr As Integer, ByVal txt As String) As String
        ftxt = txt
        For i As Integer = 0 To (kpr - txt.Length)
            ftxt = " " + ftxt
        Next i

    End Function

End Module

А выглядит это вот так:

Дисперсионный анализ - Критерий Бартлетта на MS Visual Basic.NET

С уважением, Сургай Владимир.



Дополнительная информация:

Ссылка на теоретическую часть: http://www.ami.nstu.ru%2F%7Eheadrd%2Fseminar%2Fpublik_html%2FIzm_T_5.htm


Похожие статьи: