🚀 easyModels v0.2.0
Nuevas características
- Arquitectura S3 unificada: todas las funciones (
analizar_lm, analizar_glm, analizar_lmm, analizar_glmm, analizar_bloques_azar, analizar_parcelas_divididas) devuelven objetos de clase easy_model ó easy_splitplot.
- Métodos genéricos S3:
print(), summary(), plot() disponibles para todos los modelos con salida estilizada via cli.
evaluar_modelo(): función unificada de diagnóstico que extrae AIC, BIC, R², ICC, singularidad y genera gráficos DHARMa automáticamente.
obtener_emmeans(): separado de obtener_posthoc() para mayor flexibilidad.
- Compact Letter Display (CLD) integrado en
obtener_posthoc(letras = TRUE) via multcomp::cld().
- Tests unitarios de arquitectura S3: suite completa
tests/testthat/test-arquitectura.R — 12/12 PASS.
Correcciones de bugs
- 🐛 Fix crítico: error fatal
$ operator is invalid for atomic vectors al llamar evaluar_modelo() o plot() sobre modelos singulares (glmerMod, merMod con varianza de efectos aleatorios = 0). performance::icc() y performance::r2() devuelven NA lógico en este caso y el operador $ crasheaba.
- ✅ Solución: helper interno
.safe_get() que detecta NA lógico, vectores atómicos y listas con valores NA, extrayendo métricas de forma segura sin crashear.
- 🔧 API consistente: parámetro
diagnostico_dharma renombrado a diagnosticos en analizar_glmm() para consistencia con todas las funciones analizar_*.
- 📋 DESCRIPTION: limpiado para compatibilidad con
R CMD check (removidos caracteres multibyte en campos DCF, comment field de Authors@R, y añadido car a Imports).
Instalación
# Desde GitHub
devtools::install_github("PALP31/easyModels")
Uso básico
library(easyModels)
# Ajustar modelo mixto (devuelve objeto easy_model)
modelo <- analizar_lmm(datos, biomasa ~ tratamiento, aleatorios = "(1 | bloque)")
# S3 generics
print(modelo) # Caja estilizada con cli
summary(modelo) # Resumen + tabla ANOVA Tipo III
plot(modelo) # Diagnósticos R²/ICC/DHARMa (sin crash en modelos singulares)
# Post-hoc con letras Tukey
medias <- obtener_posthoc(modelo, predictor = "tratamiento", letras = TRUE)