Short analysis report

Alex Litovchenko

2026-03-05

This vignette shows a minimal analysis report: fit a model, print fixed effects, plot fitted vs observed, and show residual ACF and Q-Q.

1. Fit model(s)

library(tidyILD)
d <- ild_simulate(n_id = 8, n_obs_per = 10, irregular = TRUE, seed = 101)
x <- ild_prepare(d, id = "id", time = "time", gap_threshold = 7200)
x <- ild_center(x, y)
fit <- ild_lme(y ~ y_bp + y_wp + (1 | id), data = x, ar1 = FALSE, warn_no_ar1 = FALSE)
#> Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
#> Model failed to converge with max|grad| = 0.117947 (tol = 0.002, component 1)
#> Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model is nearly unidentifiable: very large eigenvalue
#>  - Rescale variables?

2. Tidy fixed-effects table

tidy_ild_model(fit)
#> # A tibble: 3 × 6
#>   term        estimate std_error   ci_low  ci_high p_value
#>   <chr>          <dbl>     <dbl>    <dbl>    <dbl>   <dbl>
#> 1 (Intercept) 9.93e-17  2.69e-17 4.65e-17 1.52e-16      NA
#> 2 y_bp        1   e+ 0  2.72e-17 1   e+ 0 1   e+ 0      NA
#> 3 y_wp        1   e+ 0  5.29e-17 1   e+ 0 1   e+ 0      NA

3. Fitted vs observed

ild_plot(fit, type = "fitted")

Fitted vs observed

4. Residual diagnostics: ACF and Q-Q

diag <- ild_diagnostics(fit, type = c("residual_acf", "qq"))
diag
#> ILD diagnostics
#>   Engine: lmer
#>   AR1/CAR1: no
#>   Id column: id  Time column: time
#>   N persons: 8  N observations: 80
#>   Types computed: residual_acf, qq
plots <- plot_ild_diagnostics(diag)
plots$residual_acf
plots$qq

Residual ACF and Q-QResidual ACF and Q-Q

With AR1 (nlme)

Same workflow with residual autocorrelation (nlme path). If the AR1 model fails to converge on this small example, we show the code only; in practice use more data or a different seed.

fit_ar1 <- tryCatch(
  ild_lme(y ~ y_bp + y_wp, data = x, random = ~ 1 | id, ar1 = TRUE),
  error = function(e) NULL
)
if (!is.null(fit_ar1)) {
  tidy_ild_model(fit_ar1)
} else {
  message("AR1 fit did not converge on this run; use ild_lme(..., ar1 = TRUE) with your data.")
}
#> AR1 fit did not converge on this run; use ild_lme(..., ar1 = TRUE) with your data.
if (!is.null(fit_ar1)) {
  diag_ar1 <- ild_diagnostics(fit_ar1, type = c("residual_acf", "qq"))
  diag_ar1
}