# Generate Statistical Tables

> Generar tablas estadísticas listas para publicación usando gt, kableExtra o flextable. Cubre estadísticos descriptivos, resultados de regresión, tablas ANOVA, matrices de correlación y formato APA. Usar al crear tablas de estadísticos descriptivos, formatear resultados de regresión o ANOVA, construir matrices de correlación, producir tablas estilo APA para artículos académicos o generar tablas para documentos Quarto y R Markdown.

- Skill: `pjt222/generate-statistical-tables-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add pjt222/generate-statistical-tables-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/pjt222/generate-statistical-tables-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- License: MIT
- Author: pjt222 (https://skillmd.com/u/pjt222)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/pjt222/generate-statistical-tables-2

---


# Generar Tablas Estadísticas

Crear tablas estadísticas listas para publicación para informes y manuscritos.

## Cuándo Usar

- Crear tablas de estadísticos descriptivos
- Formatear resultados de regresión o ANOVA
- Construir matrices de correlación
- Producir tablas estilo APA para artículos académicos
- Generar tablas para documentos Quarto/R Markdown

## Entradas

- **Requerido**: Resultados de análisis estadístico (objetos de modelo, datos resumidos)
- **Requerido**: Formato de salida (HTML, PDF, Word)
- **Opcional**: Guía de estilo (APA, específica de revista)
- **Opcional**: Esquema de numeración de tablas

## Procedimiento

### Paso 1: Elegir Paquete de Tablas

| Paquete | Mejor para | Formatos |
|---|---|---|
| `gt` | HTML, propósito general | HTML, PDF, Word |
| `kableExtra` | Documentos LaTeX/PDF | PDF, HTML |
| `flextable` | Documentos Word | Word, PDF, HTML |
| `gtsummary` | Resúmenes clínicos/estadísticos | Todos vía gt/flextable |

**Esperado:** Un paquete de tablas seleccionado basado en el formato de salida y caso de uso. El paquete elegido está instalado y es cargable.

**En caso de fallo:** Si el paquete requerido no está instalado, ejecutar `install.packages("gt")` (o el paquete apropiado). Para `gtsummary`, tanto `gt` como `gtsummary` deben estar instalados.

### Paso 2: Tabla de Estadísticos Descriptivos

```r
library(gt)

descriptives <- data |>
  group_by(group) |>
  summarise(
    n = n(),
    M = mean(score, na.rm = TRUE),
    SD = sd(score, na.rm = TRUE),
    Min = min(score, na.rm = TRUE),
    Max = max(score, na.rm = TRUE)
  )

gt(descriptives) |>
  tab_header(
    title = "Table 1",
    subtitle = "Descriptive Statistics by Group"
  ) |>
  fmt_number(columns = c(M, SD), decimals = 2) |>
  fmt_number(columns = c(Min, Max), decimals = 1) |>
  cols_label(
    group = "Group",
    n = md("*n*"),
    M = md("*M*"),
    SD = md("*SD*")
  )
```

**Esperado:** Un objeto tabla `gt` con medias, desviaciones estándar y conteos formateados agrupados por categoría. Los encabezados de columna usan notación estadística apropiada (*M*, *SD*, *n* en cursiva).

**En caso de fallo:** Si `group_by()` produce resultados inesperados, verificar que la variable de agrupación exista y tenga los niveles esperados. Si `fmt_number()` produce un error, asegurar que las columnas objetivo contengan datos numéricos.

### Paso 3: Tabla de Resultados de Regresión

```r
model <- lm(outcome ~ predictor1 + predictor2 + predictor3, data = data)

library(gtsummary)

tbl_regression(model) |>
  bold_p() |>
  add_glance_source_note(
    include = c(r.squared, adj.r.squared, nobs)
  ) |>
  modify_header(label = "**Predictor**") |>
  modify_caption("Table 2: Regression Results")
```

**Esperado:** Una tabla de regresión `gtsummary` con valores p en negrita, estadísticos de ajuste del modelo (R-cuadrado, N) en una nota al pie, y un subtítulo descriptivo.

**En caso de fallo:** Si `tbl_regression()` falla, verificar que la entrada sea un objeto de modelo (p. ej., `lm`, `glm`). Si `add_glance_source_note()` produce errores, verificar que `broom` pueda procesar el modelo: `broom::glance(model)`.

### Paso 4: Matriz de Correlación

```r
library(gt)

cor_matrix <- cor(data[, c("var1", "var2", "var3", "var4")],
                  use = "pairwise.complete.obs")

# Format lower triangle
cor_matrix[upper.tri(cor_matrix)] <- NA

as.data.frame(cor_matrix) |>
  tibble::rownames_to_column("Variable") |>
  gt() |>
  fmt_number(decimals = 2) |>
  sub_missing(missing_text = "") |>
  tab_header(title = "Table 3", subtitle = "Correlation Matrix")
```

**Esperado:** Una matriz de correlación de triángulo inferior renderizada como tabla `gt` con triángulo superior en blanco, dos decimales y un subtítulo claro.

**En caso de fallo:** Si `sub_missing()` no oculta el triángulo superior, verificar que los valores `NA` se establecieron correctamente con `cor_matrix[upper.tri(cor_matrix)] <- NA`. Si las variables no son numéricas, `cor()` fallará; filtrar solo columnas numéricas primero.

### Paso 5: Tabla ANOVA

```r
aov_result <- aov(score ~ group * condition, data = data)

library(gtsummary)

tbl_anova <- broom::tidy(aov_result) |>
  gt() |>
  fmt_number(columns = c(sumsq, meansq, statistic), decimals = 2) |>
  fmt_number(columns = p.value, decimals = 3) |>
  cols_label(
    term = "Source",
    df = md("*df*"),
    sumsq = md("*SS*"),
    meansq = md("*MS*"),
    statistic = md("*F*"),
    p.value = md("*p*")
  ) |>
  tab_header(title = "Table 4", subtitle = "ANOVA Results")
```

**Esperado:** Una tabla ANOVA formateada con columnas Fuente, *df*, *SS*, *MS*, *F* y *p*. Los términos de interacción están claramente etiquetados y los valores p están formateados a tres decimales.

**En caso de fallo:** Si `broom::tidy(aov_result)` produce columnas inesperadas, verificar que el modelo sea un objeto `aov`. Para sumas de cuadrados Tipo III, usar `car::Anova(model, type = 3)` en lugar de `aov()` base.

### Paso 6: Guardar Tablas

```r
# Save as HTML
gtsave(my_table, "table1.html")

# Save as Word
gtsave(my_table, "table1.docx")

# Save as PNG image
gtsave(my_table, "table1.png")

# For LaTeX/PDF (kableExtra)
kableExtra::save_kable(kable_table, "table1.pdf")
```

**Esperado:** Tabla guardada en el formato de archivo especificado (HTML, Word, PNG o PDF). El archivo de salida se abre correctamente en la aplicación apropiada.

**En caso de fallo:** Si `gtsave()` falla para formato Word, asegurar que el paquete `webshot2` esté instalado. Para salida PDF vía `kableExtra`, asegurar que una distribución LaTeX (TinyTeX o MiKTeX) esté instalada.

### Paso 7: Incrustar en Documento Quarto

````markdown
```{r}
#| label: tbl-descriptives
#| tbl-cap: "Descriptive Statistics by Group"

gt(descriptives) |>
  fmt_number(columns = c(M, SD), decimals = 2)
```

See @tbl-descriptives for summary statistics.
````

**Esperado:** La tabla se renderiza en línea en el documento Quarto con una etiqueta referenciable (`@tbl-*`) y un subtítulo apropiado. La tabla se adapta al formato de salida del documento automáticamente.

**En caso de fallo:** Si la tabla no se renderiza, verificar que la etiqueta del bloque comience con `tbl-` para referencias cruzadas en Quarto. Si el formato se pierde en PDF, cambiar de `gt` a `kableExtra` para salida basada en LaTeX.

## Validación

- [ ] La tabla se renderiza correctamente en el formato objetivo (HTML, PDF, Word)
- [ ] Los números están formateados consistentemente (decimales, alineación)
- [ ] La notación estadística sigue la guía de estilo (cursivas, símbolos apropiados)
- [ ] La tabla tiene un subtítulo claro y numeración
- [ ] Los encabezados de columna son significativos
- [ ] Las notas/notas al pie explican abreviaturas o marcadores de significancia

## Errores Comunes

- **gt en PDF**: gt tiene soporte limitado para PDF. Usar kableExtra para documentos con mucho LaTeX.
- **Inconsistencia en redondeo**: Siempre usar `fmt_number()` (gt) o `format()` en lugar de `round()` para visualización
- **Visualización de valores faltantes**: Configurar con `sub_missing()` en gt o `options(knitr.kable.NA = "")`
- **Tablas anchas en PDF**: Las tablas que exceden el ancho de página necesitan `landscape()` o reducción del tamaño de fuente
- **Formato numérico APA**: Sin cero inicial para valores acotados por 1 (valores p, correlaciones): ".03" no "0.03"

## Habilidades Relacionadas

- `format-apa-report` - tablas dentro de manuscritos APA
- `create-quarto-report` - incrustar tablas en informes
- `build-parameterized-report` - tablas que se adaptan a parámetros

