The code and prose in this chapter were written by Claude Code (an AI coding agent) under human direction. They have not been line-by-line verified by a human and must not be published or cited as-is.
WarningPreliminary & unvetted analysis
These are exploratory analyses of preliminary, in-progress LEVANTE data. Results have not been reviewed or validated and require checking by the LEVANTE Data Coordinating Center before any use.
Question
TROG (Test for Reception of Grammar) probes comprehension of specific grammatical structures: each item belongs to a grammatical category (item_group) such as negation, reversible passive, embedded/relative clauses, plurals, prepositions, etc. — 31 categories across 99 items, scored with a multigroup-scalar Rasch model (common scale across sites).
Two questions, using cross-sectional first-observation data so we can include all three languages (German = Leipzig, Spanish = Bogotá + rural, English = Canada):
Are the grammatical-category difficulty effects consistent across languages?
Do any items carry DIF (function differently across sites)?
Category accuracy correlations across languages (n=27 categories)
pair
r
German–Spanish
0.91
German–English
0.88
Spanish–English
0.93
Code
cc |>pivot_longer(c(Spanish, English), names_to ="lang", values_to ="acc") |>ggplot(aes(x = German, y = acc, color = lang)) +geom_abline(slope =1, intercept =0, lty =3, color ="grey50") +geom_point(alpha =0.8) +geom_smooth(method ="lm", se =FALSE) +scale_color_brewer(palette ="Set1", name =NULL) +coord_equal() +labs(x ="Category accuracy — German", y ="Category accuracy — other language",title ="Grammatical-category difficulty is consistent across languages")
Category-level accuracy correlates r ≈ 0.88–0.93 across the three languages — the grammatical difficulty ordering replicates well (simple combinations easy everywhere; embedding/conditional/comparative hard everywhere). The construct travels.
3. Item-level DIF
Fit a Rasch model separately per language and compare item difficulties. Differences (after centering each language’s scale) are item-level DIF.
Code
fit_site <-function(L) { m <- tr |>filter(lang == L) |>distinct(run_id, item_uid, .keep_all =TRUE) |>select(run_id, item_uid, correct) |>pivot_wider(names_from = item_uid, values_from = correct) |>select(-run_id) |>as.matrix() m <- m[, colMeans(!is.na(m)) >0.05] m <- m[, apply(m, 2, \(x) length(unique(x[!is.na(x)])) >1)] fit <-mirt(m, 1, itemtype ="Rasch", verbose =FALSE, technical =list(NCYCLES =2000)) d <-coef(fit, simplify =TRUE)$items[, "d"]tibble(item_uid =names(d), b =-d, lang = L)}bdiff <-map_dfr(c("German","Spanish","English"), fit_site) |>group_by(lang) |>mutate(b_c = b -mean(b)) |>ungroup() # center per languagewide_b <- bdiff |>select(item_uid, lang, b_c) |>pivot_wider(names_from = lang, values_from = b_c) |>left_join(tr |>distinct(item_uid, category), by ="item_uid")wb <- wide_b |>select(German, Spanish, English) |>drop_na()tibble(pair =c("German–Spanish","German–English","Spanish–English"),r =c(cor(wb$German, wb$Spanish), cor(wb$German, wb$English),cor(wb$Spanish, wb$English))) |> knitr::kable(digits =2,caption = glue::glue("Item-level difficulty correlations across languages (n={nrow(wb)} items)"))
Item-level difficulty correlations across languages (n=92 items)
pair
r
German–Spanish
0.82
German–English
0.82
Spanish–English
0.88
Code
wide_b |>filter(!is.na(German), !is.na(Spanish)) |>mutate(gap = German - Spanish) |>ggplot(aes(x = Spanish, y = German)) +geom_abline(slope =1, intercept =0, lty =3, color ="grey50") +geom_point(alpha =0.6, color ="#268bd2") + ggrepel::geom_text_repel(data =~filter(.x, abs(gap) >1.1),aes(label =str_remove(item_uid, "^trog_")), size =2.5, color ="firebrick",max.overlaps =20) +labs(x ="Item difficulty — Spanish (centered)", y ="Item difficulty — German (centered)",title ="Item-level DIF: German vs Spanish",subtitle ="On-diagonal = invariant. Labeled (red) = |DIF| > 1.1 logits.")
Item difficulties correlate r ≈ 0.82–0.88 across languages — good, but lower than the category level, i.e. translation introduces some item-specific DIF (expected; TROG reached scalar invariance overall, not perfect). Most DIF is modest (≈ 1–1.5 logits), except one item that is clearly broken:
trog_embedding_cat_cow_chase_black: accuracy by language
lang
n
accuracy
English
185
0.42
German
251
0.01
Spanish
536
0.55
trog_embedding_cat_cow_chase_black shows a ~6.5-logit German-vs-Spanish difficulty gap — far beyond any other item. The accuracy breakdown shows it behaves completely differently in one language, the signature of a mistranslation or wrong answer key. This item should be reviewed and likely excluded/fixed.
Verdict
Grammatical-category effects are consistent across German, Spanish, and English (category accuracy r ≈ 0.88–0.93): TROG measures the same difficulty ordering of structures everywhere — good cross-linguistic construct validity.
Item-level DIF is mostly modest (r ≈ 0.82–0.88), consistent with the task’s scalar-invariance status; translation adds some item-specific noise.
One item is clearly broken — trog_embedding_cat_cow_chase_black (~6.5-logit DIF) — flag for review/exclusion.
No category systematically carries DIF; the issues are item-specific.