--- title: "M2 Posterior Predictive Checks and Negative Controls" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{M2 Posterior Predictive Checks and Negative Controls} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>") ``` ## Channel-specific model checks The three-way reference literature evaluates response, response-time, and fixation-count components separately using W, L, and M discrepancy statistics. `multimodal_m2_ppc()` implements the same channel-specific logic as posterior predictive item checks. ```{r, eval=FALSE} library(eyeprocess) sim <- simulate_multimodal_m2( n_person = 120, n_item = 12, seed = 55 ) fit <- fit_multimodal_m2(sim, seed = 56) ppc <- multimodal_m2_ppc(fit) ppc plot(ppc) ``` Posterior predictive p-values are model-data diagnostics. They are not proof that the latent gaze dimension is a validated psychological construct. ## Alignment negative controls Negative controls ask whether apparent multimodal information depends on meaningful person-level alignment rather than only channel marginals. ```{r} library(eyeprocess) sim <- simulate_multimodal_m2( n_person = 80, n_item = 10, seed = 77 ) nc <- multimodal_m2_negative_controls( sim, seed = 78 ) nc head(nc$provenance) plot(nc) ``` The controls permute gaze, RT, or response **within item**. This preserves each item's observed marginal values and missingness pattern while breaking the named person-level alignment. These are falsification controls, not causal interventions and not misconduct classifiers.