На этой странице

IRT-анализ — методические заметки

Решения, на которых построен модуль IRT-анализа: какой порог, оценка, отказ или запасной вариант стоит за каждой карточкой, и подтверждающие их числа. Там, где это сказано, числа получены на смоделированных наборах пунктов, а в остальных случаях — на наборе-примере (cafe.ru.csv, спецификация лежит рядом). Разделы следуют разделам руководства.

Требования

Непрерывный столбец считается пунктом, только если у него от 3 до 10 различных целых значений. Политомическая модель тратит по параметру порога на каждую категорию каждого пункта, поэтому столбец со многими различными значениями гораздо вероятнее оказывается баллом, счётчиком или результатом измерения, чем рейтинговым пунктом, а нецелое значение вообще не может быть категорией ответа. Столбец с типом «порядковая» принимается как есть при любом числе значений, а два различных значения при любом типе дают дихотомический пункт. Пункт, у которого пропущено больше половины ответов, исключается ещё до классификации: его параметры опирались бы на меньшинство респондентов. Группирующая переменная DIF исключается из пунктов, даже если она выбрана, поскольку пункт, задающий группы, нельзя одновременно проверять на различия между ними.

Предварительный анализ

Порог объёма выборки — эмпирическое правило для каждой модели, применяемое к тому N, на котором пройдёт подгонка. Если в настройке пропущенных данных выбрано построчное удаление, наблюдения считаются после него, так что предупреждение говорит о том же N, на котором будет подогнана модель. Пороги растут вместе с числом параметров пункта: 100 для любой модели; 200, когда у каждого пункта своя дискриминация (2PL, а также Авто с тем же порогом, что у 2PL); 500 для нижней или верхней асимптоты (3PL, 3PLu), о которых говорят лишь респонденты на краях черты; 1000 для обеих асимптот (4PL). Это ориентиры, а не расчёты мощности: на меньшей выборке модель тоже может подогнаться, только оценки будут менее устойчивы. С числом измерений пороги не растут.

Собственные числа для проверки одномерности берутся из корреляций, оценка которых зависит от числа категорий пункта. Пункты делятся так же, как их делит mixedCor из psych: при двух категориях — тетрахорические корреляции, от 3 до 8 — полихорические, при большем числе — корреляции Пирсона. polychoric() при числе категорий больше 8 просто останавливается, а начиная примерно с семи категорий категориальная и непрерывная трактовки всё равно сближаются, поэтому широкий пункт обрабатывается через корреляции Пирсона, а не переводит на них всю матрицу. Если ни у одного пункта нет больше 8 категорий, вся матрица вычисляется как polychoric(correct = 0), без поправки на непрерывность для пустых ячеек. Если больше 8 категорий у всех пунктов, вся матрица вычисляется как корреляции Пирсона по попарно полным наблюдениям. Если категориальная оценка не удалась, расчёт переходит на ту же матрицу Пирсона, а на карточке приводится сообщение R.

Критерий Рекейза учитывает обе величины, а отношение — только при положительном втором собственном числе. Доля дисперсии первой компоненты — это её собственное число, делённое на число пунктов, то есть на след корреляционной матрицы, и Рекейз (Reckase, 1979) считал, что для одномерной калибровки она должна быть не меньше 20%. Отношение первого собственного числа ко второму, не меньшее 3, дополнительно требует, чтобы никакое второе измерение не соперничало с первым. Оба условия применяются вместе, поэтому выполнение лишь одного сообщается как неоднозначное свидетельство, а не как успех. Попарная или сглаженная корреляционная матрица часто оказывается неопределённой, а второе собственное число, равное нулю или отрицательное, делает отношение не большим, а отрицательным или бесконечным. Поэтому отношение остаётся неопределённым, и оценивается только критерий по дисперсии.

Четыре порога качества ответов — границы Тьюки по индексам самого набора данных. За абсолютными значениями, с которыми эти индексы обычно приводят (длинная серия ≥ 5, IRV < 0.5, корреляция «человек–сумма» r < 0.1), нет никакого нулевого распределения: распределение каждого индекса задаётся числом пунктов и числом категорий ответа, и на чистых данных эти значения отмечают от четверти до двух пятых респондентов. Поэтому пороги для длинной серии, вариабельности, корреляции и надёжности — это 1.5 × IQR за квартилями распределения самого индекса (выше третьего квартиля для длинной серии, ниже первого для остальных трёх), так что флаг означает «необычно для этой выборки». Индекс с нулевым или неопределённым IQR границы не получает и никого не отмечает, а порог показан как «–». Пороги для доли пропусков (больше 50% пунктов) и для расстояния Махаланобиса (p < 0.001) остаются абсолютными, поскольку у каждого из них есть собственный смысл: доля шкалы и хвост χ². Любая граница по построению отсекает хвост любого распределения, поэтому карточка подсчитывает респондентов, отмеченных двумя индексами и больше, — там, где свидетельства сходятся.

Как вычисляются четыре индекса с границами Тьюки. Длинная серия — самая длинная цепочка равных значений среди отвеченных пунктов человека, взятых по порядку. IRV — SD ответов человека, делённое на (r/2)n/(n−1), наибольшее SD, какое могут иметь n ответов на шкале с наблюдаемым по всей матрице пунктов размахом r. Так шкалы разной ширины становятся сопоставимы. На полностью дихотомической шкале IRV — детерминированная функция суммарного балла и ничего не добавляет к другим индексам, поэтому там он не проверяется. Корреляция «человек–сумма» связывает отвеченные пункты человека со средними этих пунктов у всех остальных (сам человек исключён) и требует трёх отвеченных пунктов. Индивидуальная надёжность по случайным половинам делит пункты случайным образом на две половины по ⌊k/2⌋ пунктов, коррелирует ответы человека в двух половинах по пунктам, отвеченным в обеих (не меньше трёх), применяет поправку Спирмена — Брауна, ограничивает результат отрезком [−1, 1] и усредняет 30 таких разбиений, получаемых с зерном воспроизводимости. Результат единственного разбиения на чётные и нечётные пункты зависел бы от того, какое разбиение выпало, а усреднение эту зависимость снимает. При числе пунктов меньше шести ни одна половина не содержит трёх пунктов, и индекс не вычисляется.

Для расстояний Махаланобиса используется минимальный определитель ковариации, когда выборка это позволяет. Выборочные среднее и ковариацию завышают те самые выбросы, которые по ним нужно выявить, поэтому центр и разброс берутся из MASS::cov.rob(method = "mcd") с зерном воспроизводимости. Оценке MCD нужен запас наблюдений над пунктами. Если полных наблюдений не более чем вдвое больше, чем пунктов, если робастная подгонка не удалась или её ковариация вырождена (обычное дело для пунктов с малым числом категорий ответа), используются классические моменты полных наблюдений, и карточка называет сработавшее ограничение. Если полных наблюдений не больше, чем пунктов плюс один, расстояния не вычисляются. Квадрат расстояния сравнивается с распределением χ² с числом степеней свободы, равным числу пунктов, а у респондента с пропуском расстояния нет.

Анализ Моккена выполняется на полных наблюдениях, перекодированных в последовательные целые числа. Пакет mokken сразу отвергает пропущенный ответ, поэтому весь раздел рассчитывается по полным строкам, тогда как проверки выше используют все строки. Значения каждого пункта перед вызовом перекодируются в 0, 1, 2, … в порядке возрастания: mokken перебирает шаги пункта по всему наблюдаемому диапазону, так что неиспользованная промежуточная категория или пропуск в кодах увеличивают время расчёта на порядки при тех же коэффициентах. Если полных наблюдений меньше трёх или пункт среди них постоянен, коэффициенты не определены, и раздел останавливается.

H шкалы оценивается по диапазонам, а H пункта — по допустимости. H шкалы читается по диапазонам Сейтсмы и Моленара (Sijtsma & Molenaar, 2002): 0.3 — слабая шкала, 0.4 — умеренная, 0.5 — сильная, ниже 0.3 — непригодна для шкалы. Hi пункта по силе не оценивается: 0.3 — нижняя граница, которую определение шкалы Моккена задаёт для каждого её пункта, поэтому строка пункта читается как Допустим при этом значении и выше и как Недопустим ниже. Коэффициенты вычисляются функцией coefH(nice.output = FALSE), чьи простые числовые матрицы содержат стандартные ошибки отдельно.

Нарушения оцениваются по crit в диапазонах Моленара и Сейтсмы. Монотонность, инвариантное упорядочение пунктов и непересечение проверяются функциями check.monotonicity, check.iio и check.restscore с параметрами пакета по умолчанию. Каждая сводка содержит число нарушений выше минимального размера, число значимых среди них, наибольшее нарушение и его статистику критерия (z, кроме check.iio на политомических пунктах, где используется t-критерий), а crit сводит их в один индекс серьёзности. Моленар и Сейтсма (Molenaar & Sijtsma, 2000) считают crit ниже 40 признаком отсутствия серьёзных нарушений, от 40 до 80 — незначительным нарушением, выше 80 — серьёзным, и карточка оценивает наибольшее значение в каждой проверке. Инвариантное упорядочение дополнительно описывается коэффициентом шкалы H_T, для которого Лигтвут и др. (Ligtvoet et al., 2010) предлагают порог 0.3.

AISP перебирает нижние границы, а последовательный поиск задан явно. aisp() принимает вектор нижних границ и возвращает разбиение для каждой из них. Именно перебор (от 0 до 0.55 с шагом 0.05 плюс c пользователя, округлённое до трёх знаков) позволяет отличить устойчивое разбиение от артефакта выбранного c. Поиск задаётся явно, а не оставляется по умолчанию: search = "normal", последовательная процедура Хемкера, Сейтсмы и Моленара (Hemker, Sijtsma & Molenaar, 1995). Процедура жадная и может остановиться в локальном оптимуме, а не на лучшем доступном разбиении, поэтому соседние столбцы читаются вместе. aisp отбрасывает нижние границы выше наибольшего H по парам пунктов, поскольку шкалируемым там ничего бы не оказалось. Столбцы поэтому соответствуют фактически перебранным границам, и если c пользователя оказалось среди отброшенных, у него нет ни столбца, ни вывода. Значение поля ограничивается отрезком 0–0.99, а пустое или нечитаемое значение читается как 0.3: поле не входит в форму, и браузер не проверяет ни одну из границ.

Размерность

Вращение затрагивает только решение для нагрузок, а θ остаётся в исходном базисе подгонки. У mirt() нет аргумента вращения: разведочная подгонка вращается там, где её читают, через summary(rotate = …), и из этого вызова строятся таблица нагрузок, её тепловая карта и корреляции факторов. Выбор передаётся даже при Без вращения, поскольку summary() по умолчанию сама применяет облимин. fscores() по умолчанию тоже применяет облимин, а у expected.test(), testinfo() и probtrace() вращения нет вовсе, поэтому θ оценивается с rotate = "none", и все производные от θ результаты (баллы испытуемых, надёжность, ожидаемые баллы, карта Райта, информационные кривые) используют один базис, в котором можно строить кривые. Конфирматорная модель никогда не вращается: её структуру задали вы.

Облимин и пара Кроуфорда — Фергюсона берут параметр с панели, по умолчанию — как в GPArotation. mirt передаёт в GPArotation все критерии, кроме промакса, и пробрасывает туда аргументы gam = и kappa = из summary(). Их заполняют поля γ облимина и κ Кроуфорда — Фергюсона. Оба по умолчанию равны 0, как и в самом GPArotation. При этом облимин — это квартимин, а семейство Кроуфорда — Фергюсона — квартимакс в ортогональной форме и квартимин в косоугольной, так что при значениях по умолчанию все три повторяют другие пункты списка. Именно параметр делает каждый из них семейством, а не вторым названием. Чем выше γ, тем сильнее могут коррелировать факторы. κ ограничен отрезком [0, 1], где, по Брауну (Browne, 2001), 1/p для p пунктов даёт варимакс, а k/(2p) для k измерений — эквамакс. Пустое значение или значение вне диапазона отклоняется, а не передаётся дальше. Ни один критерий GPArotation, включая варимакс, не нормализуется по Кайзеру (GPArotation::Varimax(normalize = FALSE)). Промакс реализован в самом mirt: сначала stats::varimax с нормализацией, затем вращение к целевой матрице со степенью 4.

Проверка. На смоделированном двумерном наборе пунктов 2PL (двенадцать пунктов, 500 респондентов) при значениях по умолчанию нагрузки облимина и квартимина совпадают точно, а нагрузки Кроуфорда — Фергюсона T и квартимакса — с точностью до 2 × 10⁻¹⁶, тогда как геомин Q отличается от облимина на 0.005. При других значениях параметров решения расходятся: облимин при γ = 0.5 даёт нагрузки, отличные от квартимина, а на двумерной подгонке корреляция факторов выросла с 0.13 до 0.83, когда γ менялся от −0.5 до 1.

Коррелирующие факторы задаются строкой COV в синтаксисе модели. Аргумент COV = TRUE mirt игнорирует без предупреждения, поэтому коррелирующая конфирматорная модель записывает в синтаксис каждую пару факторов (COV = F1*F2, …), и именно по этой строке отредактированный синтаксис передаёт настройку обратно флажку. Название фактора тоже должно пережить синтаксис: пробел, =, , или * разрывают сгенерированную строку F = 1, 2, кавычка ломает строку mirt.model('…'), точку (.) R возвращает заменённой на _, и подогнанные строки перестают совпадать с названием, а фактор, названный служебным словом mirt (COV, MEAN, CONSTRAIN, PRIOR, START, FIXED), превращает свою строку в соответствующую инструкцию.

Типы моделей

Список предлагает то, что mirt может подогнать при выбранной структуре. Модели рейтинговой шкалы (модель Раша, GRSM в обеих параметризациях, модель рейтинговой шкалы Андрича) содержат ограничения равенства, которые mirt не обобщает на несколько измерений. Модели развёртывания (идеальная точка, GGUM) описывают одну черту по построению, а непараметрические кривые многомерно не поддерживаются. Поэтому все восемь моделей только одномерные. Частично компенсаторные модели mirt отвергает вне конфирматорной модели («Partially compensatory models can only be estimated within a confirmatory model»). Модель для одного формата ответа падает внутри mirt на пунктах другого формата (дихотомические — с сообщением «requires exactly 2 unique categories», GRSM — при назначении вероятностей категорий), поэтому приложение отклоняет запуск заранее и называет пункты.

GGUM подгоняется оптимизатором L-BFGS-B, если не выбран другой. mirt переходит на nlminb, когда какой-либо параметр ограничен, а у GGUM ограничена дискриминация. На этом пути подгонка вместо сходимости завершается ошибкой «NA/NaN gradient evaluation». L-BFGS-B — самый быстрый оптимизатор, справляющийся с этим семейством, поэтому запуск подставляет его сам и сообщает об этом на карточке. Оптимизатор, выбранный в дополнительных настройках, заменяет L-BFGS-B.

Начальная идеальная точка GGUM берётся из одномерного шкалирования пунктов. mirt 1.46.1, версия, которую загружает приложение, задаёт начальную идеальную точку пункта GGUM по анализу соответствий расширенной по категориям матрицы ответов, но читает её по номеру пункта из таблицы, индексированной по столбцам категорий. В результате пункт i стартует со значения i-го столбца категорий, никак не связанного с положением пункта. Из таких начальных значений подгонка приходит в локальный оптимум: пункт на одном краю шкалы падает к границе дискриминации, и любое сравнение с моделью градуированных ответов оказывается в неверную сторону. Поэтому запуск записывает собственные начальные значения в строки b1 таблицы pars = "values" — координату каждого пункта в классическом многомерном шкалировании 1 − r Спирмена по пунктам, cmdscale(k = 1) с масштабом SD 1 и ориентацией, при которой порядок столбцов возрастает, — и передаёт их в каждую подгонку GGUM: основную, каждую повторную подгонку бутстрэпа Q3 (с пересчётом по смоделированным данным) и многогрупповые подгонки DIF. Дискриминации и широты сохраняют начальные значения mirt. Несколько случайных стартов приходили к тому же оптимуму, но многократно удлиняют подгонку, которая и так длится около минуты.

Проверка. На шести утверждениях с 4 категориями, сгенерированных по самой GGUM (дискриминация 1.5, идеальные точки от −1.5 до 1.5, n = 500), начальные значения mirt по умолчанию привели к логарифму правдоподобия −3826 с одним пунктом при a = 0, и AIC предпочёл модель градуированных ответов. Старт по шкалированию дошёл до −3663.4 — оптимума, которого достигает и старт с порождающих значений (в самих этих значениях −3678), и все идеальные точки оказались в пределах 0.06 от истинных и в правильном порядке. При n = 200 все восемь подгонок из этого старта достигли хорошего оптимума, и AIC предпочёл GGUM модели градуированных ответов с разницей от 55 до 110. Групповая подгонка DIF достигла −1473.05 из таблицы начальных значений против −1541 из значений mirt по умолчанию.

Узлы сплайна расставляются по положению, а подгонка стартует с возрастающей кривой. Оба умолчания mirt для семейства сплайнов не позволяют его подогнать. По умолчанию mirt не ставит ни одного внутреннего узла, и подгоняется плоская кривая ответа, не несущая информации о черте. Число же узлов, заданное как df, распределяется по квадратурной сетке mirt — фиксированному отрезку от −6 до +6 при любых данных, — так что большинство узлов попадает на хвосты, куда не доходит ни один ответ. Поэтому запуск передаёт от 1 до 3 узлов, равномерно расставленных между −2 и +2. Кроме того, mirt начинает все коэффициенты сплайна с 1, то есть с плоской кривой в симметричной стационарной точке, из которой EM не может выйти, если трудности пунктов близки к среднему черты. Поэтому коэффициенты стартуют с возрастающей последовательности от −1 до 1.

Проверка. На одном наборе пунктов старт по умолчанию дал SD θ, равное 3.6 × 10⁻¹⁴ (все респонденты с одним и тем же баллом), а монотонный старт — 0.87.

Семейство сплайнов подгоняется без стандартных ошибок и не сообщает информации. mirt не может определить размер блока сплайнового пункта в информационной матрице, поэтому запрос стандартных ошибок обрывает саму подгонку («logical subscript too long»). Производная по θ для этого класса в mirt тоже не реализована, так что testinfo() и iteminfo() вместо ошибки возвращают ровно 0 при любом θ, и всё построенное на них (интеграл маргинальной надёжности, информационные кривые, условная стандартная ошибка измерения) оказалось бы нулём, похожим на результат измерения. Эти результаты не выводятся, и карточка объясняет почему. Подогнанные же кривые от производной не зависят и выводятся.

Метод оценивания

Собственные умолчания mirt для каждого метода действуют, пока их не переопределяют дополнительные настройки. Запуск передаёт только изменённые вами аргументы, поэтому каждый метод сохраняет настройки, подобранные для него в mirt (в частности, 500 циклов EM против 2000 у MHRM), а изменение умолчаний метода в новой версии mirt доходит до приложения без правок.

Многомерная подгонка вычисляет стандартные ошибки только там, где это посильно. Именно информационная матрица делает многомерную подгонку методами EM или QMCEM дорогой, поэтому стандартные ошибки запрашиваются для любой одномерной подгонки, для многомерной — при MHRM, который оценивает их попутно, и всякий раз, когда в поле Расчёт SE выбрано что-то кроме значения по умолчанию. Карточка сообщает, если они пропущены, и называет причину: стоимость расчёта или семейство (сплайны), которое их не допускает.

При числе измерений больше трёх интегрирование ведётся методом квази-Монте-Карло. Число узлов полной квадратурной сетки равно числу точек на измерение в степени числа измерений, поэтому подгонка, статистика M2 и оценки θ при числе измерений больше трёх используют QMC = TRUE, как рекомендует сам mirt. Примечание под полем предупреждает об обычном EM начиная с трёх измерений, где сетка уже обходится дорого.

Метод расчёта оценок

Эмпирическая надёжность вычисляется в форме, нужной методу расчёта оценок. mirt::empirical_rxx() предлагает два тождества. Дисперсия оценок максимального правдоподобия (MLE, WLE) уже содержит ошибку измерения, поэтому надёжность равна 1−SE2/var⁡(θˆ) (T_as_X = TRUE). Байесовские оценки (EAP, MAP) стянуты к среднему, и ошибка из их дисперсии уже удалена, поэтому её добавляют обратно: var⁡(θˆ)/(var⁡(θˆ)+SE2). Одна форма для обоих семейств завысила бы надёжность одного из них или занизила бы надёжность другого, поэтому число, сравниваемое с результатом другого пакета, следует сравнивать при одном и том же методе расчёта оценок.

Неконечная θ исключается из индивидуальных результатов, но остаётся в модельных. При MLE паттерн из одних минимальных или одних максимальных ответов получает оценку ±∞. Модельным вызовам mirt нужна строка θ для каждого респондента, поэтому они получают полную матрицу, а все индивидуальные статистики (баллы, соответствие, надёжность, нацеленность) отбрасывают респондентов с неконечной θ или SE, и карточка приводит их число.

Дополнительные настройки

Вариант, который не допускает метод или структура, становится недоступным, а не отклоняется. mirt отвергает нестандартный SE.type на стохастических методах: при MHRM и SEM — любой тип с сообщением «SE.type not supported for stochastic method», при MCEM — все, кроме полных данных. Отвергает он его даже тогда, когда стандартные ошибки не запрашиваются, так что прервался бы весь запуск, а не только расчёт стандартных ошибок. Поэтому для такого метода эти варианты отключены, а выбранный сменяется на значение по умолчанию. Плотность в виде эмпирической гистограммы определена только для одномерного EM. Число узлов квадратурной сетки равно числу точек на измерение в степени числа измерений, поэтому вариант «Очень точные (121)» при трёх измерениях потребовал бы около 1.8 миллиона узлов. Более частые сетки доступны только для одномерной модели, а собственное число точек mirt и так уменьшается с ростом числа измерений.

Дифференциальное функционирование пунктов (DIF)

Базовая модель зависит от того, заданы ли якоря. Постоянный набор якорей имеет смысл, только если проверяемые пункты могут от него отличаться. Без якорей все пункты приравниваются между группами, а каждый проверяемый пункт по очереди освобождается (DIF(scheme = "drop")): каждый пункт закреплён на всех остальных, и при широко распространённом DIF смещённый пункт загрязняет такую базовую модель. С якорями приравниваются только они, все остальные пункты в базовой модели свободны, и каждый проверяемый пункт по очереди ограничивается (scheme = "add") — это схема с постоянными якорями, описанная Вудс (Woods, 2009). В обоих случаях латентные среднее и дисперсия свободны во всех группах, кроме опорной. Якоря, заведомо инвариантные, дают самый надёжный вывод, а очистка — запасной вариант, когда таких якорей нет, и она лучше, чем закрепление на всех остальных пунктах.

Очистка оставляет якорями пятую часть пунктов, но не меньше четырёх. Это двухэтапный отбор, предложенный Вудс (Woods, 2009): предварительный проход с закреплением на всех остальных пунктах ранжирует пункты по χ², пункты с наименьшими значениями становятся постоянным набором якорей (round(k ⁄ 5) из k пунктов, не меньше четырёх и не больше k − 1, чтобы было что проверять), и модель заново подгоняется на них, прежде чем проверяются остальные. Заданные якоря — собственный ответ пользователя на тот же вопрос, поэтому флажок действует, только пока ни один якорь не выбран.

Проверяемые параметры определяются по подгонке, а асимптоты остаются равными. Общего для всех семейств имени параметра нет: у градуированного пункта это a1 и d1…dk, у пункта Раша — только d, у пункта модели рейтинговой шкалы Андрича — его положение c. Поэтому критерий сравнивает те наклоны, свободные члены и положение пункта, которые оценивает многогрупповая модель, а df их подсчитывает. Нижняя и верхняя асимптоты 3PL, 3PLu и 4PL в их число не входят и остаются равными между группами. Критерий неравномерного DIF освобождает только наклоны и выполняется, только если модель оценивает наклоны и что-то ещё.

Каждая пара проверяется на модели, заново подогнанной к двум её группам. Собственный pairwise = TRUE в mirt при scheme = "drop" ничего не даёт: снятие двух из G параметров с ограничения равенства оставляет его несвязывающим, так что каждая пара вернула бы общий критерий. Подгонка к одной паре нужна и для размеров эффекта, поскольку empirical_ES() поддерживает лишь две группы. Поэтому основная таблица содержит SIDS, UIDS и ESSD только для группирующей переменной с двумя группами. Все проверки «пункт × пара» корректируются как одно семейство.

Наблюдения без группы исключаются, а о группах меньше 100 выводится предупреждение. multipleGroup() нужна группа для каждой подгоняемой строки, а пропущенное значение иначе стало бы отдельным уровнем, который сортируется первым, то есть опорной группой с фиксированными латентными средним и дисперсией. Параметры пунктов оцениваются для каждой группы отдельно, поэтому N группы определяет устойчивость проверок так же, как общее N — устойчивость модели, и сравнивается с тем же порогом 100, что и в проверке объёма выборки.

Обратные пункты

Обнаружение начинается с первой главной компоненты и переворачивает пункты, пока корреляции с остальными не перестанут быть отрицательными. Знак каждого пункта задаётся его нагрузкой на ведущий собственный вектор корреляций пунктов по попарно полным наблюдениям. Затем раз за разом переворачивается пункт с наиболее отрицательной корреляцией с суммой остальных (каждый пункт умножен на свой текущий знак), пока отрицательных корреляций не останется. Каждый переворот увеличивает дисперсию пересчитанной суммы, поэтому цикл конечен. Пункт, у которого итоговый |r| меньше 2/√n (n — наименьшее попарное число наблюдений), слишком слабо связан с остальными, чтобы определить его направление, и остаётся неотмеченным как неклассифицируемый. Большинство сохраняет своё направление, а при равенстве направление сохраняет группа, в которую входит первый классифицируемый пункт, и строка рядом с кнопкой называет этот пункт. Очевидная альтернатива, простая корреляция пункта с суммой, отказывает именно при сбалансированном направлении: когда пунктов каждого направления поровну, простая сумма взаимно погашается, и её знак, как и любая граница на ней, неверно размещает почти каждый пункт. Правило написано на чистом JavaScript и общее со средством выбора в модуле анализа надёжности, поэтому Обнаружить не требует обращения к R.

Проверка. В моделировании по 200 выборок на ячейку (направленность 6+0, 5+1, 4+2, 3+3 и 5+5; нагрузки на черту от 0.2 до 0.8; нагрузки склонности к согласию нулевые, 0.3 и 0.5; n от 50 до 500) правило неверно разместило пункт не более чем в 1.5% выборок начиная с n = 200 при нагрузках от 0.4 и согласии не выше 0.3, включая сбалансированную направленность (не более 7% при n = 50), и в среднем оставило неклассифицируемыми меньше половины пункта. Знак простой корреляции пункта с суммой при 3+3, нагрузке 0.8 и n = 200 помещал пункт не на ту сторону в каждой выборке. Реализация на JavaScript совпадает с эталоном на R на 60 сгенерированных наборах, включая пропуски и постоянные пункты. На пунктах кафе с неперевёрнутым медленно реализация выбирает медленно.

Решает список, а не обнаружение, потому что склонность к согласию может скрыть обратный пункт. Когда привычка соглашаться со всем нагружает ответы не слабее, чем черта, ковариация обратного пункта с остальными, −λ2+γ2 при нагрузке на черту λ и нагрузке склонности к согласию γ, не отрицательна, и никакое правило по знаку его не найдёт, а увеличение выборки лишь делает неверный ответ увереннее. Направление пунктов — свойство опросника, обычно известное пользователю, поэтому обнаружение его только предлагает. Кроме того, каждый запуск применяет обнаружение к данным в том виде, в каком их читает анализ, уже после учёта заявленного направления, и называет любой пункт, по-прежнему направленный против остальных: направление забыли указать, пункт перевёрнут дважды или направление заявлено лишь для части заранее перевёрнутых пунктов.

Проверка. В том же моделировании, при пяти пунктах одного направления и одном противоположного, нагрузке на черту 0.4 и склонности к согласию 0.5, каждое правило неверно размещало обратный пункт в 12% выборок при n = 50 и в 74% при n = 500.

Проверка на небрежные ответы читает ответы в исходном виде. Длинная серия и IRV ищут закономерность в пунктах в том виде, в каком их видел респондент: внимательный респондент, согласный с каждым прямым утверждением и несогласный с единственным обратным, на бланке даёт прерванную серию, а после переворачивания пункта — непрерывную. Поэтому подгонка и остальная диагностика читают обратные пункты перевёрнутыми, эти два индекса — в исходном виде, а файл, перевёрнутый до импорта, для них переворачивается обратно, если установлен флажок Уже перевёрнуты в данных. Сделать такой вывод само обнаружение не может, так как заранее перевёрнутый пункт выглядит прямым. Переворачивание выполняется относительно диапазона шкалы (заданного или же крайних значений, наблюдаемых по всем пунктам), а не собственного диапазона пункта: длинная серия сравнивает ответы между пунктами, а переворачивание по диапазону самого пункта сместило бы пункт, крайнюю категорию которого никто не выбрал, относительно шкалы остальных пунктов и разорвало бы серии. Разведочная MIRT оставляет знаки вращению, а конфирматорная модель читает данные как есть.

Проверка. На пунктах кафе с неперевёрнутым и отмеченным медленно все наклоны модели градуированных ответов положительны и совпадают с подгонкой по данным, где медленно перевёрнут заранее, с точностью до 10⁻³. Участники 13, 15, 69 и 165, которых на заранее перевёрнутом файле отмечают и длинная серия, и IRV, больше не отмечаются двумя индексами, а заранее перевёрнутый файл с установленным флажком Уже перевёрнуты в данных даёт ту же проверку.

Чтение результатов

Соответствие модели

M2 — это M2* из mirt, и на политомических пунктах он так и называется. M2() по умолчанию вычисляет статистику по ограниченной информации в форме M2*, которая на дихотомических пунктах совпадает с самим M2. Строка называется M2*, как только хотя бы один пункт политомический, так что статистика выводится под именем того, что было вычислено. RMSEA с 90-процентным интервалом, SRMSR, TLI и CFI даёт тот же вызов. M2() отвергает модель, не оставляющую ей степеней свободы, и может завершиться ошибкой на многомерной подгонке, поэтому выполняется в собственном обработчике ошибок: тогда карточка выводит сообщение R и сохраняет AIC, BIC и логарифм правдоподобия, которые содержит сама подгонка.

Сравнение моделей

Пару для сравнения задаёт формат ответов, а повторные подгонки по возможности используют уже подогнанную модель. Модель Раша — это 2PL с дискриминациями, приравненными друг к другу, поэтому эта пара проверяется критерием отношения правдоподобия. GRM и GPCM описывают разные процессы ответа одним и тем же числом параметров и не вложены одна в другую, поэтому сравниваются только по AIC и BIC. Смешанная шкала подгоняется дважды — с 2PL на дихотомических пунктах и с моделью градуированных ответов или частичного зачёта на остальных, — так что две подгонки различаются только параметризацией политомических пунктов. Член пары, совпадающий с уже подогнанной моделью, заново не подгоняется, а подогнанная модель вне пары добавляется отдельной строкой с проверкой против 2PL только там, где 2PL в неё вложена: 3PL, 3PLu и 4PL освобождают асимптоты, которые в 2PL фиксированы.

Сравнение размерностей

Каждая меньшая размерность — новая подгонка, проверяемая против соседней. Строки ниже выбранного числа измерений подгоняются заново (при числе измерений больше трёх — методом квази-Монте-Карло, как и основная подгонка), и каждая проверяется против следующей через anova(). Если проверка не удалась, в строке остаются только информационные критерии, а таблица не теряется.

Сравнение соответствия конфирматорной и разведочной моделей

Проверка ограничений не выводится, если конфирматорная модель не является ограничением разведочной. Спецификация, нагружающая каждый пункт на каждый фактор и освобождающая их ковариации, оценивает не меньше параметров, чем разведочная модель, с которой её сравнивают. anova() в этом случае не отказывает, а возвращает неположительное df и p, равное NaN, поэтому приложение читает df и, если оно неположительно, отбрасывает проверку и сообщает, что модели не вложены.

Статистика пунктов

Стандартные ошибки положений переводятся в метрику IRT дельта-методом. mirt сообщает стандартные ошибки только в своей метрике наклона и свободного члена, а таблица показывает положения bk=−dk/a. SE каждого положения получается дельта-методом по собственному блоку (a,dk) матрицы vcov() с градиентом (dk/a2,−1/a). Параметр, зафиксированный моделью, в vcov() отсутствует и в дисперсию ничего не вносит. Асимптоты оцениваются в шкале логитов, и их стандартные ошибки приводятся там же, под заголовком SE(логит …), а не рядом с оценкой в шкале вероятностей без пометки. Оценки номинальной модели читаются в метрике IRT, а таблица её SE всегда дана в метрике наклона и свободного члена, то есть под одними именами оказываются разные параметры, поэтому стандартные ошибки для этой модели не выводятся.

Пороги GRSM читаются в метрике наклона и свободного члена и сдвигаются для каждого пункта вручную. mirt хранит оба варианта GRSM в классе grsmIRT, на котором coef(IRTpars = TRUE) завершается ошибкой, поэтому коэффициенты читаются с IRTpars = FALSE: наклон для каждого пункта, один общий набор параметров шагов bk и сдвиг пункта ci, причём P(X≥k+1)=logistic⁡(a(θ+bk+ci)) (это проверено на движке). Пороги каждого пункта — это границы −(bk+ci) в метрике θ, то есть общий интервал, перенесённый к пункту, со стандартными ошибками по дельта-методу через блок (bk,ci) матрицы vcov(). Сдвиг включается в границы, а не выводится отдельным столбцом, и примечание под таблицей сообщает, что набор порогов общий.

Дискриминация оценивается по диапазонам Бейкера. Бейкер (Baker, 2001) называет наклон в логистической метрике очень низким, низким, умеренным от 0.65, высоким от 1.35 и очень высоким от 1.70, а mirt выводит наклоны именно в этой метрике, без масштабирующей константы 1.7, так что диапазоны применимы к выведенным значениям как есть. Таблица сводит их к трём (красный ниже 0.65, жёлтый ниже 1.35, без цвета начиная с 1.35), а примечание и ссылка появляются, только когда таблица оценивает по одному наклону на пункт, то есть в одномерной подгонке без пунктов номинальной модели, моделей развёртывания, сплайнов и монотонного полинома.

Семейство без наклона и положения получает собственные столбцы. Общая раскладка называет то, что распознаёт, и неверно подписывает остальное: a1 номинальной модели — общий масштабирующий наклон, а не дискриминация, b1 модели GGUM — идеальная точка, а не порог. Поэтому шкала, целиком подогнанная одним таким семейством, выводится в параметрах этого семейства, а диапазоны дискриминации и трудности, описывающие величины, которых оно не оценивает, уступают место примечанию о семействе. Шкала со смешанными семействами сохраняет общую раскладку.

MDIFF для политомического пункта — приближение. Многомерная трудность Рекейза, −d/MDISC, определена для пункта с одним свободным членом. У политомического пункта по свободному члену на каждый шаг, и таблица берёт их среднее: оно указывает центр пункта в направлении наилучшего измерения, но стандартной величиной IRT не является, поэтому столбец называется «Среднее положение», если хотя бы у одного пункта несколько свободных членов.

Диапазон среднего квадрата — соглашение модели Раша. Диапазон 0.5–1.5 для infit и outfit и граница 2.0, выше которой пункт ухудшает измерение, установлены для моделей семейства Раша, где распределение средних квадратов при верной модели известно. При наклонах, различающихся между пунктами, эти статистики распределены иначе, поэтому для любой другой модели диапазон показывается для справки, а не как вывод.

Локальная зависимость

Отмечается только Q3*, по порогу 0.2, если не выбран бутстрэп. Простой Q3 при локальной независимости смещён в отрицательную сторону примерно на −1/(J − 1) для J пунктов, и на коротком тесте одно это смещение достигает порога. Q3* Марэ (Marais, 2013) вычитает среднее недиагональных Q3, чтобы центрировать статистику, и отметка ставится только по Q3*. Порог 0.2 — эмпирическое правило, не учитывающее ни длину теста, ни объём выборки, ни формат ответа.

Бутстрэп даёт критическое значение для наибольшего |Q3*|. В каждом повторе по подогнанной модели моделируется набор данных того же объёма (simdata()), модель с той же спецификацией подгоняется заново без стандартных ошибок, и записывается наибольший |Q3*| по всем парам. Порог — квантиль уровня 1 − α этих максимумов по успешным повторам, так что вероятность хотя бы одной ложной отметки среди всех пар удерживается на уровне α. На коротких шкалах такой порог часто оказывается заметно выше 0.2, и пары, отмеченные эмпирическим правилом, могут выпасть.

LD-X² отмечается по p, скорректированному по всем парам. residuals(type = "LD", df.p = TRUE) возвращает статистику Чена и Тиссена (Chen & Thissen, 1997) в нижнем треугольнике, а её p — в верхнем. Семейство для поправки — все пары пунктов, а не только отмеченные, и отметка сравнивает скорректированное p с фиксированной границей 0.05. Если поправка не задана, скорректированное p совпадает с исходным.

Соответствие испытуемых

Zh считает оба хвоста и сравнивает их со случайной частотой. Zh — стандартизованный логарифм правдоподобия lz из personfit(): он отрицателен для аберрантных паттернов и положителен для паттернов, согласованных сильнее, чем ожидает модель, поэтому два хвоста подсчитываются отдельно. При верной модели за каждый порог ±2 случайно выходит Φ(−2) ≈ 2.3% респондентов — эту частоту и приводит примечание. При расчёте по оценённой, а не истинной θ дисперсия Zh меньше 1, и плохое соответствие выявляется хуже. Порог 1.5 для infit и outfit — соглашение модели Раша о среднем квадрате, поэтому для других моделей примечание называет Zh более надёжным показателем.

Надёжность и разделение

Маргинальная надёжность интегрируется с собственной латентной дисперсией модели. mirt::marginal_rxx() интегрирует I/(I+1) по стандартному нормальному распределению, что соответствует определению, только если модель фиксирует латентную дисперсию на 1, а семейство Раша её освобождает. Поэтому приложение интегрирует I(θ)/(I(θ)+1/σ2) по N(0,σ2) с подогнанной σ², причём в пределах ±10 SD этого распределения, а не по всей прямой. Для GGUM mirt возвращает NaN-вероятности далеко на краях θ, и интеграл по всей прямой оставался неопределённым, а хвосты за 10 SD не дают вклада, заметного в значении для любого другого семейства. Только для одномерной модели. Для семейства сплайнов, информацию которого mirt возвращает как 0, — N/A.

Разделение и страты — по Райту и Мастерсу. Разделение G=R/(1−R) вычисляется по надёжности и не определено вне 0 < R < 1, а число страт, как у Райта и Мастерса (Wright & Masters, 1982), равно (4G+1)/3: столько уровней, отстоящих друг от друга на три стандартные ошибки, умещается в наблюдаемом разбросе.

Надёжность пунктов опирается на стандартные ошибки положений, полученные дельта-методом. Она равна 1−SE2/var⁡(location) по пунктам, где положение каждого пункта −d‾/a имеет SE по дельта-методу через блок пункта в vcov(). Поэтому без стандартных ошибок индекс не вычисляется и даёт N/A. Индекс взят из измерений по Рашу, где одно положение описывает весь пункт. При свободных наклонах индекс описывает только положения, и строка помечается «в стиле Раша».

Многомерная нацеленность определяется по каждому измерению отдельно. MDIFF размещает пункт вдоль направления его наилучшего измерения — композита в шкале, отличной от шкалы любой отдельной θ, — поэтому для нацеленности измерения берётся положение каждого пункта только на этом измерении, −d‾/ak, по пунктам, чей наибольший по модулю наклон приходится на него.

Таблица перевода баллов

Эквейтинг считывается с мелкой сетки, а EAPsum вычисляет mirt. Эквейтинг по истинному баллу ищет на сетке θ от −6 до 6 с шагом 0.01 точку, где ожидаемый суммарный балл ближе всего к сырому баллу, и берёт в ней SE, равную 1/I(θ). Наименьший и наибольший сырые баллы соответствуют θ = ∓∞, вне диапазона, которого достигают ожидаемые баллы любой сетки, поэтому для них выводится N/A, а не конец сетки. Столбцы EAPsum — это fscores(method = "EAPsum", full.scores = FALSE) с гауссовым априорным распределением модели, которое стягивает оценки к среднему там, где эквейтинг расходится. Для семейств без определённого правдоподобия суммарного балла (номинальная модель, развёртывание) вызов завершается ошибкой, и тогда столбцы не выводятся.

Графики

Все кривые строятся на одной сетке θ, расширенной так, чтобы охватить пункты. Сетка идёт от −4 до 4 с шагом 0.05 и расширяется на единицу за наименьшее и наибольшее положение пункта, чтобы кривая ни одного пункта не обрывалась до поворота. Модель без параметра положения сохраняет ±4. Информационный рисунок и раздел условной надёжности используют одну и ту же сетку, поэтому они не могут разойтись в том, где кривая начинается и заканчивается.

Многомерная кривая — это срез через θ = 0 на остальных измерениях. Кривая ответа, информация и ожидаемый балл пункта вычисляются вдоль его главного измерения, то есть измерения с наибольшим по модулю наклоном, когда остальные измерения зафиксированы на 0, а информация — ещё и в этом направлении (iteminfo(degrees = …)). Информация теста, её стандартная ошибка 1/I, характеристическая кривая теста и условная надёжность вычисляются так же для каждого измерения по очереди. Поэтому кривые одного рисунка лежат на разных срезах латентного пространства, хотя и делят общую ось, о чём и говорит примечание под рисунком.

На дихотомической кривой показан более высокий ответ, а P = 0.5 служит ориентиром. Общий график показывает вероятность более высокого кода ответа пункта, каковы бы ни были оба кода, поскольку «верный ответ» имеет смысл только для пунктов с ключом 0/1. Пунктир отмечает P = 0.5, а не положение пункта: при нижней или верхней асимптоте положение находится там, где кривая достигает (c+u)/2, а не 0.5.

Кривые ожидаемого балла строятся в шкале сырых баллов. expected.item() отсчитывает категории от 0, поэтому кривая каждого пункта сдвигается на его наименьшее наблюдаемое значение (min = …) в ту шкалу, в которой expected.test() выводит характеристическую кривую теста, и в сумме кривые пунктов дают именно её.

Условная надёжность вычисляется по информации и латентной дисперсии модели. Кривая — это I(θ)/(I(θ)+1/σθ2) по определению mirt: та же величина, что и 1−SE(θ)2/σθ2 при SE=1/I, но считанная с функции информации, поэтому она не зависит от точечных оценок метода расчёта оценок. σ² — подогнанная латентная дисперсия (равная 1, если модель её не освобождает, как это делает семейство Раша), как и в маргинальной надёжности выше, а на многомерной панели — собственная дисперсия каждого измерения. Опорная линия 0.70 проходит там, где общие диапазоны надёжности переходят от Сомнительная к Приемлемая. Отдельный раздел строится только для одномерной модели, а многомерная подгонка рисует кривые по измерениям на панели информационного рисунка.

Карта Райта помещает каждый пункт туда же, куда и нацеленность. В одномерной модели точка пункта — его положение: трудность, у политомического пункта — среднее порогов, у модели идеальной точки — −d/a, а штрихи порогов возвращают разброс, скрытый средним. MDIFF размещает пункт вдоль направления его наилучшего измерения, то есть композита в шкале, отличной от шкалы любой отдельной θ, поэтому на многомерной панели каждый пункт помещается в −d‾/ak на измерении панели — туда же, где его положение учитывает многомерная нацеленность.

Пропущенные данные

При попарном удалении каждая строка подгоняется по тем пунктам, на которые есть ответы. Маргинальное правдоподобие mirt — произведение по отвеченным пунктам человека, поэтому пропущенный ответ просто выпадает из правдоподобия этого человека, а не заменяется каким-либо значением. Это полноинформационный подход, корректный, когда ответы пропущены случайно (MAR). Построчное удаление отбрасывает и отвеченные пункты каждой неполной строки. Импутированные ответы входят в подгонку как наблюдённые, поэтому стандартные ошибки и надёжности выглядят так, будто пропусков не было.