Psychometria · Cykl o IRT

IRT w R krok po kroku: analiza testu i skali Likerta w pakiecie mirt

Pełna analiza IRT w R na prawdziwych danych: klasyczna analiza pozycji, model Rascha i 2PL, dopasowanie, informacja testu, oceny θ, model GRM dla skali Likerta, porównanie z CFA i DIF — z gotowym kodem.

Strona główna / Blog / IRT w R krok po kroku
W skrócie: poradnik pokazuje pełną analizę IRT w pakiecie R mirt na dwóch wbudowanych zbiorach danych: teście z odpowiedziami 0/1 (model Rascha i 2PL) oraz skali Likerta (model odpowiedzi stopniowanych GRM). Wszystkie liczby we wpisie pochodzą z faktycznego uruchomienia kodu (R 4.5.3, mirt 1.47), a gotowe skrypty znajdziesz na końcu.
Cykl o IRT — teoria reagowania na pozycje testowe:
  1. Czym jest IRT i czym różni się od klasycznej teorii testów
  2. IRT w R krok po kroku: pakiet mirt (ten wpis)
  3. Dobre pozycje testowe i liczebność próby w IRT

Przygotowanie: pakiety i dane

Do analiz IRT w R najczęściej używa się pakietu mirt (Chalmers, 2012). Korzystają z niego m.in. tutoriale Zein i Akhtar (2025) oraz Lalot i współpracowników (2025). Dane powinny mieć postać macierzy odpowiedzi: jeden wiersz to jedna osoba, jedna kolumna to jedna pozycja; odpowiedzi koduje się jako 0/1 albo kolejne kategorie, a braki jako NA (Chalmers, 2012). Przed kalibracją sprawdź liczebności kategorii. Kategorie wybierane przez mniej niż 1% osób warto połączyć z sąsiednimi, bo prowadzą do niestabilnych oszacowań; orientacyjnie przydaje się 10–15 obserwacji na kategorię (Immekus i in., 2019; Toland, 2014).

W przykładach używam dwóch zbiorów dostępnych w pakiecie mirt:

  • LSAT7 — 5 zadań ocenianych 0/1, 1000 osób;
  • Science — 4 pozycje o postawach wobec nauki w skali od 1 do 4, 392 osoby.

Krok 1. Klasyczna analiza pozycji

Zacznij od statystyk klasycznych: trudności p (odsetek poprawnych odpowiedzi), korelacji pozycji z wynikiem pozostałych pozycji (rit) i alfy Cronbacha. To punkt odniesienia dla IRT.

Klasyczna analiza zadań testu LSAT7
StatystykaZad. 1Zad. 2Zad. 3Zad. 4Zad. 5
Trudność p0,830,660,770,610,84
Korelacja rit0,250,250,310,220,18

Alfa Cronbacha wynosi 0,45 — test jest krótki i łatwy. Klasyczna analiza mówi „rzetelność niska”, ale nie mówi, dla kogo.

Krok 2. Model Rascha czy 2PL?

Porównujemy model Rascha (wspólna dyskryminacja) z modelem 2PL (różne dyskryminacje). Test ilorazu wiarygodności wskazuje na 2PL: χ²(4) = 12,19, p = 0,016. Podobnie AIC (5337,6 wobec 5341,8). BIC preferuje natomiast model Rascha (5371,2 wobec 5386,7), bo mocniej karze za dodatkowe parametry. Gdy kryteria się rozchodzą, decyzję warto oprzeć na teorii i celu narzędzia; tu wybieram 2PL, bo dyskryminacje wyraźnie się różnią (Toland, 2014).

Krok 3. Parametry pozycji

Parametry modelu 2PL dla testu LSAT7
ZadanieDyskryminacja aTrudność bOcena dyskryminacji
10,99−1,88umiarkowana
21,08−0,75umiarkowana
31,71−1,06bardzo wysoka
40,77−0,64umiarkowana
50,74−2,52umiarkowana

Kategorie dyskryminacji według progów Bakera: poniżej 0,35 bardzo niska, 0,35–0,64 niska, 0,65–1,34 umiarkowana, 1,35–1,69 wysoka, od 1,70 bardzo wysoka (za: Zein i Akhtar, 2025).

Wszystkie trudności są ujemne, więc test najlepiej różnicuje osoby poniżej średniej. Zadanie 3 najsilniej odróżnia osoby słabsze od mocniejszych, a zadanie 5 jest tak łatwe, że rozwiązuje je 84% badanych.

Krzywe charakterystyczne pięciu zadań testu LSAT7Model 2PL oszacowany w pakiecie mirt. Zadanie 3 ma najbardziej strome krzywe (a = 1,71), zadanie 5 jest najłatwiejsze (b = −2,52). Zadanie 1 Zadanie 2 Zadanie 3 Zadanie 4 Zadanie 5 0,00 0,25 0,50 0,75 1,00 −3 −2 −1 0 1 2 3 Poziom cechy θ Prawdopodobieństwo poprawnej odpowiedzi Zadanie 3: a = 1,71
Rycina 1. Krzywe charakterystyczne zadań testu LSAT7 w modelu 2PL. Najbardziej stroma krzywa należy do zadania 3 (a = 1,71), a krzywa zadania 5 jest przesunięta najdalej w lewo (b = −2,52). Obliczenia własne w pakiecie mirt.

Krok 4. Dopasowanie modelu, pozycji i zależność lokalna

Dopasowanie globalne ocenia się statystyką M2 i pochodnymi wskaźnikami. Tu M2(5) = 11,94, p = 0,036, RMSEA = 0,037 (90% CI: 0,009–0,065), SRMSR = 0,032, CFI = 0,968. Przy kryteriach RMSEA ≤ 0,05 i SRMSR ≤ 0,05 dopasowanie jest dobre (Zein i Akhtar, 2025; Bean i Bowen, 2021). Istotna statystyka χ² przy dużej próbie nie przekreśla modelu — ważniejsza jest wielkość niedopasowania.

Dopasowanie pozycji sprawdza statystyka S-X². Przy wielu testach i dużej próbie warto stosować poziom α = 0,01 (Toland, 2014). Tu tylko zadanie 2 wyraźnie odstaje: S-X²(2) = 14,45, p = 0,001, RMSEA = 0,079. To sygnał do przejrzenia treści zadania i jego krzywej empirycznej, a nie automatycznego usunięcia.

Zależność lokalną ocenia statystyka Q3, czyli korelacja reszt dla par pozycji. W krótkich testach Q3 jest systematycznie ujemne, dlatego lepiej porównywać wartości ze średnią: niepokojące są pary o około 0,2 wyższe od średniego Q3 (Xiong i in., 2026). Tu średnie Q3 wynosi −0,11, a maksimum 0,01 — brak oznak zależności lokalnej.

Krok 5. Informacja, błąd standardowy i rzetelność

Informacja testu LSAT7 i błąd standardowy
θ−3−2−10123
Informacja0,571,081,460,920,400,170,07
SE(θ)1,330,960,831,041,582,433,74

Informacja jest największa przy θ ≈ −1, a dla osób o wysokiej zdolności test prawie nic nie mówi. Rzetelność marginalna (0,44) jest zbliżona do alfy (0,45), ale ukrywa tę różnicę. Wniosek dla twórcy testu: trzeba dodać trudniejsze zadania. Takie decyzje lepiej podejmować na podstawie funkcji informacji niż na podstawie samej alfy (Toland, 2014).

Krok 6. Wyniki osób: θ zamiast sumy punktów

Oceny θ najczęściej szacuje się metodą EAP (średnia rozkładu a posteriori), która daje wynik i jego błąd standardowy dla każdej osoby (Lalot i in., 2025). Ten sam wynik sumaryczny może jednak dawać różne θ:

Wyniki EAP dla dwóch wzorców odpowiedzi z sumą 3
Wzorzec odpowiedzi (zad. 1–5)Sumaθ (EAP)SE
1 1 1 0 03−0,130,72
0 1 0 1 13−0,700,68

Osoba, która rozwiązała zadanie 3 (najwyższa dyskryminacja), dostaje wyższe θ niż osoba, która rozwiązała dwa najłatwiejsze i słabo różnicujące zadania. Jeśli wolisz przeliczać same sumy punktów, mirt zwraca tabelę przeliczeń sumy na θ (metoda EAPsum): 0 punktów to θ = −1,87, 3 punkty to −0,41, a 5 punktów to 0,73.

Skala Likerta: model odpowiedzi stopniowanych (GRM)

Dla pozycji porządkowych standardem jest GRM (Zein i Akhtar, 2025). Zanim go dopasujesz, sprawdź wymiarowość, np. analizą równoległą. W skalach z mniej niż 8 kategoriami odpowiedzi wykonuje się ją na korelacjach polichorycznych (Zein i Akhtar, 2025). W zbiorze Science analiza równoległa sugeruje 2 czynniki — do tego jeszcze wrócimy.

GRM pasuje do tych danych lepiej niż uogólniony model częściowego zaliczenia (GPCM): AIC 3249,7 wobec 3257,4 i BIC 3313,3 wobec 3320,9. Modele nie są zagnieżdżone, więc porównujemy je kryteriami informacyjnymi.

Parametry GRM dla skali Science
Pozycjaab1b2b3Ładunek
Comfort1,04−4,67−2,531,410,52
Work1,23−2,39−0,741,850,58
Future2,29−2,28−0,970,860,80
Benefit1,09−3,06−0,911,540,54

Pozycja Future ma bardzo wysoką dyskryminację i dostarcza najwięcej informacji. Próg b1 = −4,67 pozycji Comfort oznacza z kolei, że najniższą kategorię wybierają niemal wyłącznie osoby o skrajnie niskim poziomie cechy. Progi wykraczające poza ±3 są rzadkie i mogą wskazywać na zbędną kategorię odpowiedzi (Toland, 2014).

Krzywe kategorii odpowiedzi pozycji Future (model GRM)Prawdopodobieństwo wyboru każdej z czterech kategorii odpowiedzi w zależności od theta. Progi b wynoszą −2,28, −0,97 i 0,86. 1: zdecydowanie nie 2: raczej nie 3: raczej tak 4: zdecydowanie tak 0,00 0,25 0,50 0,75 1,00 −3 −2 −1 0 1 2 3 Poziom cechy θ Prawdopodobieństwo kategorii 1 2 3 4
Rycina 2. Krzywe kategorii odpowiedzi pozycji Future. Każda z czterech kategorii ma własny zakres θ, w którym jest najbardziej prawdopodobna — tak wygląda dobrze działająca skala odpowiedzi. Obliczenia własne w pakiecie mirt.
Funkcje informacji czterech pozycji skali SciencePozycja Future dostarcza najwięcej informacji (około 1,3–1,4) między theta = −2,5 a 1,2, z trzema maksimami przy około −2,2, −1,0 i 0,8. Pozostałe trzy pozycje dają poniżej 0,5 jednostki informacji. Comfort Work Future Benefit 0,0 0,4 0,8 1,2 1,6 −4 −3 −2 −1 0 1 2 3 4 Poziom cechy θ Informacja pozycji Future (a = 2,29)
Rycina 3. Funkcje informacji czterech pozycji skali Science. Pozycja Future dostarcza ponad trzy razy więcej informacji niż pozostałe pozycje w szerokim zakresie θ. Obliczenia własne w pakiecie mirt.

Teraz dopasowanie. Wszystkie pozycje dobrze pasują według S-X² (p od 0,46 do 0,57), ale dopasowanie globalne jest słabe: M2(2) = 19,18, p < 0,001, RMSEA = 0,148, SRMSR = 0,073, CFI = 0,91. Razem z wynikiem analizy równoległej to wyraźny sygnał, że jedna cecha nie wyjaśnia wszystkich zależności między pozycjami. Tak właśnie zalecają postępować Zein i Akhtar (2025): oceniaj dopasowanie fragmentami i nie interpretuj parametrów, dopóki nie znajdziesz źródła niedopasowania. W praktyce rozważa się przeformułowanie pozycji, model wielowymiarowy albo bifaktorowy. Rzetelność marginalna wynosi 0,67, a błąd standardowy mieści się w przedziale 0,65–0,74 dla θ od −2 do 1.

Porównanie z CFA. Kategorialna CFA (estymator WLSMV) daje ładunki 0,52, 0,53, 0,78 i 0,53. Po przeliczeniu wzorem a = 1,702 · λ / √(1 − λ²) (Takane i de Leeuw, 1987) otrzymujemy dyskryminacje 1,02, 1,05, 2,10 i 1,07, bardzo bliskie oszacowaniom GRM (1,04, 1,23, 2,29, 1,09). CFA również słabo pasuje (RMSEA = 0,164), więc oba podejścia prowadzą do tego samego wniosku o strukturze (Bean i Bowen, 2021).

Analiza DIF: czy pozycje działają tak samo w grupach?

Zróżnicowane funkcjonowanie pozycji (differential item functioning, DIF) oznacza, że osoby o tym samym poziomie cechy, ale z różnych grup, mają różne prawdopodobieństwo odpowiedzi. Taka pozycja zniekształca porównania grup. Aby pokazać procedurę na znanym wyniku, symuluję dwie grupy po 600 osób, w których zadanie 4 jest trudniejsze o 0,6 w grupie B. Model wielogrupowy zakłada najpierw pełną niezmienność parametrów zadań, a następnie kolejno je uwalnia.

Test wskazał wyłącznie zadanie 4: χ²(2) = 23,41, p < 0,001 po korekcie Holma. Dla pozostałych zadań p ≥ 0,26. W prawdziwych danych pozycję z DIF przegląda się merytorycznie, a porównania grup opiera na pozycjach niezmienniczych (Bean i Bowen, 2021).

Jak opisać analizę IRT w pracy?

Do kalibracji pozycji zastosowano [model, np. model odpowiedzi stopniowanych] oszacowany metodą największej wiarygodności brzegowej w pakiecie mirt (wersja [x]; Chalmers, 2012). Jednowymiarowość oceniono [metoda, np. analizą równoległą na korelacjach polichorycznych]. Dopasowanie globalne oceniono statystyką M2 (RMSEA = [ ], SRMSR = [ ], CFI = [ ]), dopasowanie pozycji statystyką S-X² (α = 0,01), a zależność lokalną statystyką Q3. Dyskryminacje wynosiły od [ ] do [ ], a progi od [ ] do [ ]. Funkcja informacji testu przekraczała [wartość] (rzetelność ≈ [ ]) dla θ od [ ] do [ ]; rzetelność marginalna wyniosła [ ]. Oceny θ oszacowano metodą EAP.
Przykład reprodukowalny

Kod R z tego poradnika

Skrypty uruchomiono w R 4.5.3 z pakietami mirt 1.47, psych 2.6.5 i lavaan 0.7-2. Zbiory LSAT7 i Science są dostępne w pakiecie mirt, więc wyniki odtworzysz bez pobierania danych.

1. Test 0/1: model Rascha i 2PL

Dane wejściowe: macierz odpowiedzi 0/1 (osoby × zadania).

Co odczytać: parametry a i b, M2, S-X², Q3, informację i SE, oceny EAP oraz tabelę przeliczeń sumy na θ.

R
library(mirt)
library(psych)

dane <- expand.table(LSAT7)   # 1000 osób × 5 zadań (0 = błąd, 1 = poprawnie)

# 1. Klasyczna analiza pozycji (KTT)
round(colMeans(dane), 3)                                  # trudność p
round(sapply(seq_len(ncol(dane)), function(j)
  cor(dane[, j], rowSums(dane[, -j]))), 3)                # korelacja skorygowana r_it
psych::alpha(dane, warnings = FALSE)$total$raw_alpha      # alfa Cronbacha

# 2. Model Rascha czy 2PL?
m_rasch <- mirt(dane, 1, itemtype = "Rasch", verbose = FALSE)
m_2pl   <- mirt(dane, 1, itemtype = "2PL", verbose = FALSE)
anova(m_rasch, m_2pl)

# 3. Parametry: a (dyskryminacja) i b (trudność)
coef(m_2pl, IRTpars = TRUE, simplify = TRUE)$items

# 4. Dopasowanie modelu, pozycji i zależność lokalna
M2(m_2pl)
itemfit(m_2pl)
residuals(m_2pl, type = "Q3")

# 5. Informacja, błąd standardowy i rzetelność
theta <- matrix(seq(-3, 3, by = 1))
info  <- testinfo(m_2pl, theta)
round(cbind(theta, info, SE = 1 / sqrt(info)), 3)
marginal_rxx(m_2pl)
plot(m_2pl, type = "trace")    # krzywe charakterystyczne zadań
plot(m_2pl, type = "info")     # funkcja informacji testu
plot(m_2pl, type = "SE")       # błąd standardowy w zależności od theta

# 6. Wyniki osób: EAP i tabela przeliczeń wyniku sumarycznego
oceny <- fscores(m_2pl, method = "EAP", full.scores.SE = TRUE)
wzorce <- rbind(c(1, 1, 1, 0, 0), c(0, 1, 0, 1, 1))
colnames(wzorce) <- colnames(dane)
fscores(m_2pl, response.pattern = wzorce, method = "EAP")
fscores(m_2pl, method = "EAPsum", full.scores = FALSE)

2. Skala Likerta: GRM i porównanie z CFA

Dane wejściowe: odpowiedzi porządkowe (np. 1–4) w kolumnach.

Co odczytać: wymiarowość, porównanie GRM z GPCM, progi b, dopasowanie i przeliczenie ładunków CFA na dyskryminacje.

R
library(mirt)
library(psych)
library(lavaan)

dane2 <- Science   # 392 osoby × 4 pozycje w skali 1–4

# 1. Wymiarowość: analiza równoległa na korelacjach polichorycznych
fa.parallel(dane2, fm = "minres", fa = "fa", cor = "poly")

# 2. Model odpowiedzi stopniowanych (GRM) i porównanie z GPCM
grm  <- mirt(dane2, 1, itemtype = "graded", verbose = FALSE)
gpcm <- mirt(dane2, 1, itemtype = "gpcm", verbose = FALSE)
anova(grm, gpcm)                      # modele nie są zagnieżdżone: porównaj AIC/BIC

coef(grm, IRTpars = TRUE, simplify = TRUE)$items
summary(grm)                          # ładunki czynnikowe i komunalności
M2(grm, type = "C2")                  # dopasowanie globalne dla danych porządkowych
itemfit(grm)                          # S-X2 dla pozycji
residuals(grm, type = "Q3")           # zależność lokalna
marginal_rxx(grm)
itemplot(grm, item = "Future", type = "trace")
plot(grm, type = "infotrace", facet_items = TRUE)

# 3. CFA kategorialna i przeliczenie ładunków na dyskryminacje IRT
cfa_mod <- cfa("F =~ Comfort + Work + Future + Benefit", data = dane2,
               ordered = names(dane2), std.lv = TRUE, estimator = "WLSMV")
lam <- subset(standardizedSolution(cfa_mod), op == "=~")$est.std
round(1.702 * lam / sqrt(1 - lam^2), 3)

3. Analiza DIF w modelu wielogrupowym

Dane wejściowe: macierz odpowiedzi i zmienna grupująca.

Co odczytać: statystykę χ² i skorygowane p dla każdej pozycji; pozycje z istotnym DIF wymagają przeglądu.

R
library(mirt)
set.seed(2027)

# Dane symulowane: 2 grupy po 600 osób, 10 zadań 2PL;
# zadanie 4 jest w grupie B trudniejsze o 0,6 (zaplanowany DIF)
a  <- c(1.2, 0.9, 1.5, 1.3, 1.1, 1.7, 0.8, 1.4, 1.0, 1.6)
b  <- seq(-1.5, 1.5, length.out = 10)
bB <- b; bB[4] <- b[4] + 0.6
dA <- simdata(a = a, d = matrix(-a * b),  N = 600, itemtype = "dich")
dB <- simdata(a = a, d = matrix(-a * bB), N = 600, itemtype = "dich", mu = 0.3)
dane  <- rbind(dA, dB)
grupa <- rep(c("A", "B"), each = 600)

# Model wielogrupowy z pełną niezmiennością parametrów zadań
mg <- multipleGroup(dane, 1, group = grupa,
                    invariance = c("slopes", "intercepts", "free_means", "free_var"),
                    verbose = FALSE)
# Test DIF: uwalnianie parametrów a i d kolejnych zadań
DIF(mg, which.par = c("a1", "d"), scheme = "drop", p.adjust = "holm", verbose = FALSE)

Bibliografia oprogramowania i wykorzystanych pakietów

W przykładach użyto: R, mirt, psych, lavaan. W pracy badawczej podaj faktycznie użyte wersje (polecenie sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. mirt (wersja 1.47): Chalmers, R. P. (2012). mirt: A multidimensional item response theory package for the R environment. Journal of Statistical Software, 48(6), 1–29. https://doi.org/10.18637/jss.v048.i06
  3. psych: Revelle, W. (2026). psych: Procedures for psychological, psychometric, and personality research (Version 2.6.5) [R package]. Northwestern University. https://CRAN.R-project.org/package=psych
  4. lavaan (wersja 0.7-2): Rosseel, Y. (2012). lavaan: An R package for structural equation modeling. Journal of Statistical Software, 48(2), 1–36. https://doi.org/10.18637/jss.v048.i02

Najczęstsze pytania

Jaki pakiet R wybrać do analizy IRT?

Najbardziej wszechstronny jest pakiet mirt: obsługuje modele Rascha, 2PL, 3PL, GRM, GPCM, modele wielowymiarowe i wielogrupowe oraz analizę DIF. Do modeli z rodziny Rascha często stosuje się też TAM i eRm.

Dlaczego dyskryminacje z mirt różnią się od wartości z innych programów?

Najczęściej z powodu metryki: mirt podaje parametry w metryce logistycznej bez stałej D = 1,7, a część programów i starszych publikacji używa metryki normalnej. Wartości różnią się wtedy mniej więcej o czynnik 1,7.

Co zrobić, gdy model IRT słabo pasuje do danych?

Najpierw ocenić dopasowanie fragmentami: pozycje, pary pozycji i wymiarowość. Słabe dopasowanie globalne przy dobrym dopasowaniu pozycji często wskazuje na zależność lokalną lub drugi wymiar. Wtedy rozważa się przeformułowanie pozycji, model wielowymiarowy lub bifaktorowy.

Chcesz, żebym przeprowadził analizę IRT Twoich danych?

Wykonam pełną analizę IRT w R: od przygotowania danych i oceny wymiarowości, przez kalibrację pozycji, dopasowanie i DIF, po wykresy, tabele i opis metod gotowy do pracy dyplomowej lub artykułu. Dostaniesz też skrypt, który pozwoli odtworzyć wszystkie wyniki.

Wyceń analizę IRTOferta dla badaczy

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Bean, G. J., & Bowen, N. K. (2021). Item response theory and confirmatory factor analysis: Complementary approaches for scale development. Journal of Evidence-Based Social Work, 18(6), 597–618. https://doi.org/10.1080/26408066.2021.1906813
  2. Chalmers, R. P. (2012). mirt: A multidimensional item response theory package for the R environment. Journal of Statistical Software, 48(6), 1–29. https://doi.org/10.18637/jss.v048.i06
  3. Immekus, J. C., Snyder, K. E., & Ralston, P. A. (2019). Multidimensional item response theory for factor structure assessment in educational psychology research. Frontiers in Education, 4, Article 45. https://doi.org/10.3389/feduc.2019.00045
  4. Lalot, F., Räikkönen, J., & Ahvenharju, S. (2025). An item response theory approach to measurement in environmental psychology: A practical example with environmental risk perception. Journal of Environmental Psychology, 101, Article 102520. https://doi.org/10.1016/j.jenvp.2025.102520
  5. Takane, Y., & de Leeuw, J. (1987). On the relationship between item response theory and factor analysis of discretized variables. Psychometrika, 52(3), 393–408. https://doi.org/10.1007/BF02294363
  6. Toland, M. D. (2014). Practical guide to conducting an item response theory analysis. The Journal of Early Adolescence, 34(1), 120–151. https://doi.org/10.1177/0272431613511332
  7. Xiong, J., Tang, C., Tan, Y., & Liu, Q. (2026). Tirt R package: A tutorial on item response and testlet response theory modeling. Measurement: Interdisciplinary Research and Perspectives. Advance online publication. https://doi.org/10.1080/15366367.2026.2726362
  8. Zein, R. A., & Akhtar, H. (2025). Getting started with the graded response model: An introduction and tutorial in R. International Journal of Psychology, 60(1), Article e13265. https://doi.org/10.1002/ijop.13265

Cytowania BibTeX

@article{bean2021irtcfa, author={Bean, Gerald J. and Bowen, Natasha K.}, title={Item response theory and confirmatory factor analysis: Complementary approaches for scale development}, journal={Journal of Evidence-Based Social Work}, year={2021}, volume={18}, number={6}, pages={597--618}, doi={10.1080/26408066.2021.1906813}}
@article{chalmers2012mirt, author={Chalmers, R. Philip}, title={mirt: A multidimensional item response theory package for the R environment}, journal={Journal of Statistical Software}, year={2012}, volume={48}, number={6}, pages={1--29}, doi={10.18637/jss.v048.i06}}
@article{immekus2019mirt, author={Immekus, Jason C. and Snyder, Kate E. and Ralston, Patricia A.}, title={Multidimensional item response theory for factor structure assessment in educational psychology research}, journal={Frontiers in Education}, year={2019}, volume={4}, pages={45}, doi={10.3389/feduc.2019.00045}}
@article{lalot2025environmental, author={Lalot, Fanny and R{\"a}ikk{\"o}nen, Juulia and Ahvenharju, Sanna}, title={An item response theory approach to measurement in environmental psychology: A practical example with environmental risk perception}, journal={Journal of Environmental Psychology}, year={2025}, volume={101}, pages={102520}, doi={10.1016/j.jenvp.2025.102520}}
@article{takane1987relationship, author={Takane, Yoshio and de Leeuw, Jan}, title={On the relationship between item response theory and factor analysis of discretized variables}, journal={Psychometrika}, year={1987}, volume={52}, number={3}, pages={393--408}, doi={10.1007/BF02294363}}
@article{toland2014practical, author={Toland, Michael D.}, title={Practical guide to conducting an item response theory analysis}, journal={The Journal of Early Adolescence}, year={2014}, volume={34}, number={1}, pages={120--151}, doi={10.1177/0272431613511332}}
@article{xiong2026tirt, author={Xiong, Jiawei and Tang, Cheng and Tan, Yanyan and Liu, Qidi}, title={Tirt R package: A tutorial on item response and testlet response theory modeling}, journal={Measurement: Interdisciplinary Research and Perspectives}, year={2026}, note={Advance online publication}, doi={10.1080/15366367.2026.2726362}}
@article{zein2025grm, author={Zein, Rizqy Amelia and Akhtar, Hanif}, title={Getting started with the graded response model: An introduction and tutorial in R}, journal={International Journal of Psychology}, year={2025}, volume={60}, number={1}, pages={e13265}, doi={10.1002/ijop.13265}}
R