Численный метод получения логитов из сырого балла.
А.В.
Колпаков, А.В. Колпакова, А.А. Захаров
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 с.