- Czym jest IRT i czym różni się od klasycznej teorii testów
- IRT w R krok po kroku: pakiet mirt (ten wpis)
- 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.
| Statystyka | Zad. 1 | Zad. 2 | Zad. 3 | Zad. 4 | Zad. 5 |
|---|---|---|---|---|---|
| Trudność p | 0,83 | 0,66 | 0,77 | 0,61 | 0,84 |
| Korelacja rit | 0,25 | 0,25 | 0,31 | 0,22 | 0,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
| Zadanie | Dyskryminacja a | Trudność b | Ocena dyskryminacji |
|---|---|---|---|
| 1 | 0,99 | −1,88 | umiarkowana |
| 2 | 1,08 | −0,75 | umiarkowana |
| 3 | 1,71 | −1,06 | bardzo wysoka |
| 4 | 0,77 | −0,64 | umiarkowana |
| 5 | 0,74 | −2,52 | umiarkowana |
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.
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ść
| θ | −3 | −2 | −1 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|---|---|
| Informacja | 0,57 | 1,08 | 1,46 | 0,92 | 0,40 | 0,17 | 0,07 |
| SE(θ) | 1,33 | 0,96 | 0,83 | 1,04 | 1,58 | 2,43 | 3,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 θ:
| Wzorzec odpowiedzi (zad. 1–5) | Suma | θ (EAP) | SE |
|---|---|---|---|
| 1 1 1 0 0 | 3 | −0,13 | 0,72 |
| 0 1 0 1 1 | 3 | −0,70 | 0,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.
| Pozycja | a | b1 | b2 | b3 | Ładunek |
|---|---|---|---|---|---|
| Comfort | 1,04 | −4,67 | −2,53 | 1,41 | 0,52 |
| Work | 1,23 | −2,39 | −0,74 | 1,85 | 0,58 |
| Future | 2,29 | −2,28 | −0,97 | 0,86 | 0,80 |
| Benefit | 1,09 | −3,06 | −0,91 | 1,54 | 0,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).
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?
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
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
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
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()).
- 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/
- 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
- 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
- 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.
Pojęcia powiązane z tematem
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 badaczyBibliografia i dalsza literatura naukowa (APA 7)
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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}}