Численный метод получения логитов из сырого балла.

 

А.В. Колпаков, А.В. Колпакова, А.А. Захаров

alex_k17@mail.ru

Саратовский технический университет

 

Abstract

В статье предлагается практический метод получения логитов (тестового балла) из сырого (первичного) балла для однопараметрической модели Раша. Приводится  краткое описание алгоритма и готовая подпрограмма, реализующая его.

 

В большинстве публикаций, посвященных Item Response Theory (IRT), вопросы нахождения точных значений логитов подробно не рассматриваются. Обычно ограничиваются общим изложением метода наибольшего правдоподобия (НП) и сообщением о значительных вычислительных трудностях, связанных с его реализацией. Но, как показано в работе [4], для однопараметрической модели метод НП приводит к той же системе уравнений, что и более простой метод моментов.

При практическом решении системы уравнений в работе [4] предлагается воспользоваться стандартным итерационным методом касательных. Еще более просто система решается по алгоритму, изложенному в [1]. Авторами были реализованы для однопараметрической модели Раша как традиционный метод НП, так и метод, предложенный в работе [1] (метод Райта). После проведения сравнительного анализа этих 2-х методов сделаны следующие выводы:

1) Получаемые результаты практически идентичны (в пределах задаваемой точности вычислений);

2) Метод Райта выполняется в среднем в 2 раза быстрее (из-за более простого вида функции, вычисляемой на каждом шаге итерации);

3) Метод Райта не требует подбора ускоряющего множителя при изменении числа заданий теста или количества испытуемых, т.е. является более устойчивым.

В оригинальной статье метод Райта изложен для получения логитов уровней знаний (Θ), но может быть легко обобщен для получения и логитов трудностей заданий (β) (что и сделано в приводимом модуле).

Оценки, полученные методом Райта, обладают теми же свойствами (для однопараметрической модели), что и оценки, полученные методом НП: они являются состоятельными, асимптотически несмещенными, асимптотически эффективными.

Далее приводится реализация метода Райта в виде подпрограммы на языке Visual Basic 6.0. Код может быть легко перенесен как на предыдущие версии Visual Basic, так и с небольшими доработками на версии Basic для DOS. Но под DOS возможны проблемы с недостатком памяти при больших массивах обрабатываемых данных. Для упрощения код не включает обработку экстремальных ситуаций (все нулевые или все единичные значения в строках или столбцах), поэтому следует предусмотреть дополнительный код для обработки такиx ситуаций или удалить такие ряды вручную. В качестве начальных приближений для Θ и β можно взять известные соотношения, например из [2], или даже положить их равными нулю. Более полный пример с процедурой вызова подпрограммы и тестовыми данными можно взять с интернет–страницы автора kolsarat.chat.ru.

 

'************** метод Райта ***********

Public Sub wright(m, n, a, uz, tr)

'm - число испытуемых

'n - чисто заданий

'a(m,n) - массив с ответами на задания теста (0 - неверно, 1 - верно)

'uz(m) - массив уровней знаний, при вызове можно грубо =0

'tr(n) - массив трудностей заданий, при вызове можно грубо =0

'результат расчета возвращается в массивах uz(m) и tr(n)

Print "Cтарт Райт"

Dim si As Long, toz As Double, uskor As Double, priz As Boolean

Dim zn As Double, si_vn As Long, vr As Double, sm As Double

Dim i As Long, j As Long

ReDim x(m) As Long, r(n) As Long

For i = 1 To m

 x(i) = 0

 For j = 1 To n

  x(i) = x(i) + a(i, j) 'сумма баллов по испытуемому

 Next j

Next i

For j = 1 To n

 r(j) = 0

 For i = 1 To m

  r(j) = r(j) + a(i, j) 'сумма баллов по заданию

 Next i

Next j

si = 0 ' сквозной счетчик итераций

toz = 0.001 'точность расчета

uskor = 4   'ускоряющий множитель

vr = Timer() 'время начала расчета

Do

 priz = False 'признак завершения расчета

 For i = 1 To m

  si_vn = 0 'внутренний счетчик итераций

  Do

   si_vn = si_vn + 1 'еще шаг

   If si_vn > 1 Then priz = True 'Расчет еще не закончен

   If si_vn > 1000 Then MsgBox ("Нет сходимости - уменьшить  ускоряющий множитель!"): Stop

   si = si + 1 'еще шаг

   sm = 0

   For j = 1 To n

    'подсчет суммы вероятностей (модель Раша)

    sm = sm + 1 / (1 + Exp(-1.7 * (uz(i) - tr(j))))

   Next j

   zn = uz(i) 'запоминаем старое значение

   uz(i) = uz(i) + (x(i) - sm) / n * uskor 'вычисляем новое

  Loop Until Abs(uz(i) - zn) <= toz 'проверка на достижение необходимой точности

 Next i

 'те же расчеты для трудностей заданий

 For j = 1 To n

  si_vn = 0

  Do

   si_vn = si_vn + 1

   If si_vn > 1 Then priz = True

   If si_vn > 1000 Then MsgBox ("Нет сходимости - уменьшить ускоряющий множитель!"): Stop

   si = si + 1

   sm = 0

   For i = 1 To m

    sm = sm + 1 / (1 + Exp(-1.7 * (uz(i) - tr(j))))

   Next i

   zn = tr(j)

   tr(j) = tr(j) + (sm - r(j)) / m * uskor

  Loop Until Abs(tr(j) - zn) <= toz

 Next j

Loop Until priz = False

vr = Timer() - vr 'время расчета

Print "Ok Райт"

Print "Время расчета: "; Format(vr, "##0.######"); " c"

Print "Число итераций: "; Format(si, "######")

'Сдвиг шкалы логитов (нормировка к 0).

'В случае использования разных вариантов тестов

'код следует скорректировать для использования якорных

'заданий [3]

Dim s_tr As Double

s_tr = 0

For j = 1 To n

 s_tr = s_tr + tr(j)

Next j

s_tr = s_tr / n 'среднее значение трудности - величина сдвига

For i = 1 To m

 uz(i) = uz(i) - s_tr 'сдвиг уровней знаний

Next i

For j = 1 To n

 tr(j) = tr(j) - s_tr 'сдвиг трудностей заданий

Next j

End Sub

 

Литература:

1.   Stenner AJ, Wright BD, Linacre JM. From p-values and raw score statistics to logits. 1994. (RMT VOLUME 8:1) http://www.rasch.org/rmt/rmt81.htm

2.   Челышкова М.Б. Разработка педагогических тестов на основе современных математических моделей. /Уч. пособие. – М.: Исслед. центр проблем качества подготовки специалистов, 1995. 32 с.: ил.

3.   Овчинников В.В. Оценивание учебных достижений учащихся при проведении централизованного тестирования. - М.: Центр тестирования МО РФ, 2001 г.,-27 с.

4.   Нейман Ю.М., Хлебников В.А. Введение в теорию моделирования и параметризации педагогических тестов. – М., 2000 г. – 168 с.