Шаг 3 Формирование матрицы стандартизированных рангов

Для расчета стандартизированных рангов в MS Excel, к сожалению, не существует встроенной функции, однако этот недостаток может быть преодолен в результате создания пользовательской функции (написания макроса). Для этого необходимо выполнить следующую последовательность действий:

- В разделе ВИД выберите пункт МАКРОСЫ,щелкнув пиктограмму Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

- Создайте новую пользовательскую функцию st_rang, реализующую расчет стандартизированных рангов:

Function St_rang(x As Variant, R_1 As Object, t As Boolean) As Double

'R_1 As Object, t As Boolean) As Double

'x - значение из массива (например, адрес ячейки памяти)

'R_1 - массив (анализируемая выборка)

't - 0 - сортировка по возрастающей; 1 - сортировка по убывающей

Dim mas1() As Double

Dim mas2() As Double

Dim tmas() As Double

num_elem = R_1.Count 'номер элемента

'создание массива для ранжирования рангов

'Dim mas1 As Variant

'mas1 = R_1.Value

ReDim mas2(num_elem)

ReDim mas1(num_elem)

ReDim tmas(num_elem)

'Формирование копии выходного массива

For i = 1 To num_elem

mas1(i) = R_1.Cells(i)

mas2(i) = i

Next i

'Ранжирование массива данных

Counter = 1 ' инициализация индикатора перестановок

While Counter = 1 ' анализ значения индикатора перестановок

Counter = 0

For i = 1 To num_elem - 1

If mas1(i) > mas1(i + 1) Then tp = mas1(i): mas1(i) = mas1(i + 1): mas1(i + 1) = tp: Counter = 1

Next i

Wend

'поиск связанных рангов

i = 1

While i < num_elem

If mas1(i) = mas1(i + 1) Then 'начало связки

K = i + 1

While mas1(i) = mas1(K)

K = K + 1

If K > num_elem Then GoTo nm

Wend

nm: aver_rank = (mas2(i) + mas2(K - 1)) / 2

For m = i To K - 1

mas2(m) = aver_rank

Next m

i = K - 1

End If

i = i + 1

Wend

'поиск ранга введенного элемента массива

For i = 1 To num_elem

If x = mas1(i) Then St_rang = mas2(i)

Next i

End Function

3. Сохраните документ как книгу MS Excel с поддержкой макросов (с расширением .xlsm).

4. Создайте таблицу с названием Матрица стандартизированных рангов

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

Рисунок 1.56 – Расчет стандартизированных рангов

В ячейку С54 необходимо ввести созданную пользовательскую функцию, имеющую следующий синтаксис: = st_rang (число; ссылка; порядок),

Аргументы «число», «ссылка» и «порядок» аналогичны аргументам функции РАНГ. Пример использования функции st_rang приведен на рисунке (см. ячейку С54). Далее эту формулу необходимо растянуть на весь диапазон ячеек данного столбца. Копируя данную формулу в первые ячейки соседних столбцов необходимо преобразовать абсолютные ссылки на диапазон в относительные с использованием функциональной кнопки F4. В результате получим:

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

Рисунок 1.57 – Матрица стандартизированных рангов

Далее для расчета коэффициента конкордации необходимо определить сумму стандартизированных рангов. Для решения этой задачи воспользуемся стандартными функциями MS Excel:

В ячейку Н54 необходимо ввести функцию =СУММ(C54:G54), указав ссылку на диапазон ячеек соответствующей строки. Далее введенную формулу следует растянуть на блок ячеек Н65:Н58, а в итоговую строку данного столбцы ввести формулу: =СУММ(H54:H58)

Для определения отклонения суммы стандартизированных рангов от среднего значения (di ) в ячейку I54 необходимо ввести формулу:

I54: =H54-СРЗНАЧ($H$54:$H$58),

Далее скопируйте ее на весь диапазон ячеек I54:I58. В ячейку J54 вводится формула: =I54^2

Результат расчетов представлен на рисунке:

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

Рисунок 1.58 – Расчет коэффициента конкордации

Далее для расчета коэффициента конкордации необходимо рассчитать показатель связанных рангов (Tj). Для упрощения расчетов рекомендуется под матрицей стандартизированных рангов создать блок вспомогательных ячеек, в котором предусмотреть строку для ввода значения повторяющегося объекта и строку с указанием количества повторений.

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

Рисунок 1.59 – Расчет показателя связанных рангов

В ячейку С65 необходимо ввести формулу расчета показателя связанных рангов: =(C62^3-C62)+(C64^3-C64), а затем скопировать ее на весь диапазон ячеек С65:G65. Для определения итогового значения необходимо воспользоваться функцией СУММ:

Н65: =СУММ(C65:G65)

Для расчета коэффициента конкордации и критерия согласия Пирсона необходимо в любые пустые ячейки рабочего ввести расчетные формулы, указав ссылки на ячейки с соответствующими показателями.

Альтернативный вариант расчета коэффициента конкордации и критерия согласия Пирсона предполагает использование следующего макроса:

Sub Concord_cof()

'Вычисление коэффициента конкордации

Dim s_1() As Double

Dim s_links() As Double

Dim ranks_mas() As Double

Dim mas1() As Double

Dim mas2() As Double

Dim tp As Double

Dim alfa As Double

Set input_data = Application.InputBox( _

Title:="Ввод матрицы исходных данных", _

prompt:="Выделите в матрице рангов блок ячеек, содержащий экспертные оценки (без заголовков).", _

Type:=8)

Set Input_alfa = Application.InputBox( _

Title:="Ввод уровня значимости", _

prompt:="Выделите ячейку, содержащую уровень значимости", _

Type:=8)

alfa = Input_alfa.Value

Set Output_data = Application.InputBox( _

prompt:="Выберите ячейку, с которой будут выводится результаты оценки согласованности мнений экспертов", _

Type:=8)

Num_row = input_data.Rows.Count 'Вычисление количества строк

Num_col = input_data.Columns.Count 'Вычисление количества столбцов

ReDim s_1(Num_row)

ReDim s_links(Num_col)

ReDim ranks_mas(1 To Num_row, 1 To Num_col)

ReDim mas1(Num_row)

ReDim mas2(Num_row)

'Вычисление матрицы рангов

For j = 1 To Num_col

For i = 1 To Num_row

mas1(i) = input_data.Columns(j).Cells(i)

s_1(i) = i: mas2(i) = i

Next i

'Сортировка столбца данных

Counter = 1 ' Инициализация индикатора перестановок

While Counter = 1 ' Анализ значения индикатора перестановок

Counter = 0

For i = 1 To Num_row - 1

If mas1(i) > mas1(i + 1) Then

tp = mas1(i): mas1(i) = mas1(i + 1): mas1(i + 1) = tp: Counter = 1

tpn = s_1(i): s_1(i) = s_1(i + 1): s_1(i + 1) = tpn

End If

Next i

Wend

'Столбец данных (его копия) отсортирована

'Поиск связок среди ранжированного массива и корректировака рангов

ind_links = 0

s_links(j) = 0

i = 1

While i < Num_row

If mas1(i) = mas1(i + 1) Then 'начало связки

ind_links = 1

K = i + 1

While mas1(i) = mas1(K)

K = K + 1

If K > Num_row Then GoTo nm

Wend

nm: aver_rank = (mas2(i) + mas2(K - 1)) / 2

For m = i To K - 1

mas2(m) = aver_rank

Next m

s_links(j) = s_links(j) + ((K - i) ^ 3 - (K - i))

i = K - 1

End If

i = i + 1

Wend

'Возобновление порядка следования рангов в

'соответствиии с оригинальным массивом

Counter = 1 ' Инициализация индикатора перестановок

While Counter = 1 ' Анализ значения индикатора перестановок

Counter = 0

For i = 1 To Num_row - 1

If s_1(i) > s_1(i + 1) Then

tp = mas2(i): mas2(i) = mas2(i + 1): mas2(i + 1) = tp: Counter = 1

tpn = s_1(i): s_1(i) = s_1(i + 1): s_1(i + 1) = tpn

End If

Next i

Wend

For i = 1 To Num_row

ranks_mas(i, j) = mas2(i)

Next i

Next j

Dim R_sum As Double 'Общая сумма

Dim L_sum As Double

Dim R_obj_sum As Double 'Сумма рангов одного объекта

R_sum = 0

L_sum = 0

For i = 1 To Num_row

R_obj_sum = 0

For j = 1 To Num_col

R_obj_sum = R_obj_sum + ranks_mas(i, j)

Next j

R_sum = R_sum + (R_obj_sum - Num_col * (Num_row + 1) / 2) ^ 2

Next i

For j = 1 To Num_col

L_sum = L_sum + s_links(j)

Next j

'Вычисление коэффициента конкордации

Dim W_koff As Double

Dim W_krit As Double

Dim W_krit1 As Double

Dim A As Double

Dim B As Double

B = (Num_row - 1) / 2 - 1 / Num_col

A = B * (Num_col - 1)

W_koff = 12 * R_sum / (Num_col ^ 2 * (Num_row ^ 3 - Num_row) - Num_col * L_sum)

W_krit = 1 - Application.WorksheetFunction.BetaInv(alfa, A, B) + _

36 / ((Num_col ^ 2) * (Num_row ^ 3 - Num_row))

W_krit1 = Application.WorksheetFunction.ChiInv(alfa, Num_row - 1) / _

(Num_col * (Num_row - 1))

X_kvadrat_r = 12 * R_sum / (Num_col * Num_row * (Num_row + 1) - L_sum / (Num_row - 1))

'Формирование и вывод результатов

Output_data.Offset(0, 0).Value = "РЕЗУЛЬТАТ ОЦЕНКИ СОГЛАСОВАННОСТИ МНЕНИЙ ЭКСПЕРТОВ: "

Output_data.Offset(1, 0).Value = "Коэффициент конкордации = " & W_koff

Output_data.Offset(2, 0).Value = "Расчетное значение Х2 = " & X_kvadrat_r

If W_koff > W_krit Then

Output_data.Offset(3, 0).Value = "Коэффициент конкордации ЗНАЧИМ"

Else

Output_data.Offset(3, 0).Value = "Коэффициент конкордации НЕ ЗНАЧИМ"

End If

End Sub

Для упрощения использования созданного макроса целесообразно создать и использовать кнопочную форму, выполнив следующую последовательность действий:

- нажать многофункциональную кнопку MS Office, выбрать Параметры MS Excel,

- поставить отметку около пункта «Показывать вкладку Разработчик на ленте»

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

Рисунок 1.60 – Активизация надстройки VBA

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

- в меню РАЗРАБОТЧИК выбрать инструмент Вставить,в появившемся диалоговом окне выбрать инструмент «кнопка»

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

- указать имя макроса, который должен выполняться при нажатии данной кнопки, щелкнуть ОК.

Шаг 3 Формирование матрицы стандартизированных рангов - student2.ru

Рисунок 1.61 – Запуск макроса

- перед выполнением данного макроса необходимо в одну из ячеек рабочего листа внести уровень значимости (например, 0,05). При нажатии кнопки будет выдан запрос на выделение области рабочего листа, куда необходимо поместить результаты расчетов.

Использование макросов и динамических моделей позволяет существенно ускорить процесс обработки данных, получаемых от экспертов и избежать случайных ошибок.

Наши рекомендации