---
title: "LDAShiny: flujo de trabajo guiado para modelado de tópicos"
author: "Javier De la Hoz-M."
output:
  rmarkdown::html_vignette:
    toc: true
    toc_depth: 2
vignette: >
  %\VignetteIndexEntry{Flujo de Trabajo Guiado para Análisis de Tópicos con LDAShiny}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment  = "#>",
  eval     = FALSE
)
```

# Introducción

`LDAShiny` es una aplicación web desarrollada con Shiny (Chang et al., 2017) y el framework golem (Fay et al., 2022). Permite realizar una revisión exploratoria de la literatura científica mediante el modelo de Asignación Latente de Dirichlet (LDA; Blei, Ng y Jordan, 2003) sin necesidad de escribir código: desde la carga de datos bibliográficos hasta la interpretación de tópicos y el análisis de su evolución temporal.

Esta guía recorre cada pestaña de la aplicación en el orden recomendado:

| Paso | Pestaña | Qué hace |
|:-----|:--------|:---------|
| 0 | `About` | Descripción, especificaciones técnicas y cómo citar el paquete. |
| 1 | `Import Data` | Importa y fusiona archivos de Scopus, Web of Science o bibliometrix; los limpia con criterios PRISMA; resume el corpus. |
| 1b | `Geographic & Journal Analysis` | Tablas y gráfico de producción por país y revista; mapa coroplético mundial; red de colaboración internacional. |
| 2 | `Preprocess` | Limpia el texto, construye la matriz documento-término (DTM) y permite refinar las palabras vacías. |
| 3 | `LDA Inference` | Ajusta modelos LDA para un rango de K y selecciona el K con mayor coherencia. |
| 4 | `Stability & Sensitivity` | Evalúa la robustez de la elección de K. |
| 5 | `Final LDA Model` | Entrena el modelo final y proporciona tablas, nubes de palabras, la matriz theta y LDAvis. |
| 6 | `Topic Trends` | Clasifica los tópicos como crecientes, decrecientes o estables a lo largo de los años. |

# Instalación e inicio

El paquete requiere R >= 4.1.0. Una vez instalado, la aplicación se inicia con una sola función:

```{r launch}
library(LDAShiny)
run_LDAShiny()
```

Los archivos bibliográficos (por ejemplo, exportaciones de Scopus) pueden ser grandes. Shiny limita las cargas de archivos a 5 MB por defecto; si sus archivos son mayores, aumente el límite **antes** de iniciar la aplicación:

```{r maxsize}
options(shiny.maxRequestSize = 1024 * 1024^2)  # 1 GB
run_LDAShiny()
```

## Cómo se conectan los módulos

Cada paso depende de la salida del anterior, por lo que conviene seguir el orden de la barra lateral:

| Módulo | Recibe | Proporciona |
|:-------|:-------|:------------|
| `Import Data` | Archivos Scopus / WoS / bibliometrix / Excel | Tabla limpia de documentos (con columna `country`). |
| `Geographic & Journal Analysis` | Tabla limpia de documentos | Tablas de producción, mapa coroplético y red de colaboración. |
| `Preprocess` | Tabla de documentos | DTM final (matriz dispersa) y tabla de frecuencia de términos. |
| `LDA Inference` | DTM | Tabla de coherencia y K óptimo. |
| `Stability & Sensitivity` | DTM, tabla de coherencia, K óptimo | Estabilidad por K y sensibilidad a los pesos. |
| `Final LDA Model` | DTM, K óptimo, tabla de documentos | Modelo final, matrices beta/gamma/theta, intensidad tópico-año. |
| `Topic Trends` | Intensidad tópico-año | Clasificación de tendencia para cada tópico. |

Los botones de descarga de cada módulo permanecen desactivados hasta que se haya ejecutado el análisis correspondiente.

# Paso 0. Acerca de (About)

La pestaña `About` resume qué hace la aplicación, sus especificaciones técnicas (versión, framework y paquetes principales), la forma recomendada de citar `LDAShiny`, e información sobre el grupo de investigación y el autor.

# Paso 1. Importación de datos (`Import Data`)

Primero elija una acción en el menú **Select an action**:

| Acción | Qué carga |
|:-------|:----------|
| `Merge Scopus + Web of Science` | Uno o más archivos CSV de Scopus y uno o más archivos TXT de Web of Science, fusionados en una sola tabla. Haga clic en **Process and Merge**. |
| `Load Integrated Excel File` | Un archivo `.xlsx` ya integrado (por ejemplo, descargado previamente desde esta misma pestaña). Se procesa en cuanto se carga. |
| `Load Bibliometrix File` | Un archivo `.xlsx` o `.RData` exportado desde Biblioshiny o producido con `bibliometrix::convert2df()`. Se mapea automáticamente al formato de `LDAShiny`. |

Los campos utilizados por el resto de la aplicación son `title`, `abstract`, `year`, `Journal`, `doi` y `database`; la limpieza PRISMA también usa `affiliations`. Para archivos Excel, los nombres de columna se comparan sin distinción de mayúsculas y se aceptan los alias habituales (por ejemplo, `TI`, `AB`, `PY`, `SO`, `DI`, `DB`, `C1`). El archivo Excel debe incluir una columna `database`, porque el módulo de entrenamiento la usa para calcular la intensidad de tópicos por fuente.

## Limpieza PRISMA

Cada carga pasa por una secuencia de filtros, inspirada en el esquema PRISMA (Page et al., 2021), aplicados en orden, con registro de los conteos:

| Fase PRISMA | Criterio |
|:------------|:---------|
| Identificación | Registros sin título. |
| Cribado | Eliminación de duplicados: por DOI normalizado; los registros sin DOI se comparan mediante una huella digital formada por los primeros 200 caracteres del resumen, el año y la revista. |
| Cribado | Registros sin resumen (incluidos los marcadores de posición como "[No abstract available]"). |
| Elegibilidad | Registros sin afiliación (solo si existe la columna de afiliaciones). |
| Elegibilidad | Registros sin año. |
| Elegibilidad | Registros sin revista o fuente. |

Tras el filtrado, se añade una columna `country` (el primer país en las afiliaciones). Esta columna no elimina registros y no es un paso PRISMA. Cuando termina la carga, la aplicación muestra un resumen de la importación, y el estado actual aparece en el cuadro **Instructions and Status**.

## Exploración del corpus

Una vez cargados los datos, las otras pestañas del módulo permiten inspeccionarlos antes de continuar:

- **Summary Statistics**: resumen numérico; tablas de recuentos (*Count Tables*) de documentos por revista y por año; y gráficos personalizables (*Customizable Plots*). El gráfico `Journal Count` admite estilo de barras o lollipop y entre 5 y 50 revistas; el gráfico `Year Count` muestra la producción por año. El menú desplegable de personalización controla etiquetas, tema, fuente, colores, tamaño de puntos y opciones de exportación (PNG, TIFF, JPEG o PDF, con ancho, alto y DPI).
- **Missing Values**: número de valores faltantes por columna.
- **Preview**: los primeros 10 registros.
- **Download**: descarga el conjunto de datos integrado como Excel, incluida la columna `country`.
- **PRISMA Flow**: tabla resumen de los pasos de limpieza (descargable en Excel) y diagrama de flujo PRISMA. Se puede indicar la etiqueta de la base de datos y, opcionalmente, la ecuación de búsqueda, y exportar el diagrama como PNG, PDF o TIFF.

# Paso 1b. Análisis geográfico y de revistas (`Geographic & Journal Analysis`)

Este módulo está disponible en cuanto se han importado los datos. Ofrece tres vistas complementarias del corpus y no afecta al flujo de modelado.

## Pestaña 1 — Country & Journal

El panel izquierdo controla la **configuración** de todas las vistas de esta pestaña:

| Control | Descripción |
|:--------|:------------|
| Top N countries | Número de países líderes en la tabla de países (5-50, por defecto 20). |
| Top N journals | Número de revistas líderes en la tabla de revistas (5-50, por defecto 20). |
| Variable | Si el gráfico muestra países o revistas. |
| Style | Gráfico de barras o lollipop. |
| Top N to plot | Número de entradas en el gráfico (5-30, por defecto 15). |
| Customize chart | Menú desplegable con etiquetas, tema, tamaño de fuente, colores, transparencia y opciones de exportación (PNG, TIFF, JPEG o PDF, con ancho, alto y DPI). |

El panel **Results** tiene tres pestañas internas:

- **Country Table**: frecuencia de documentos por país, descargable en Excel.
- **Journal Table**: frecuencia de documentos por revista, descargable en Excel.
- **Chart**: gráfico de barras o lollipop de la variable seleccionada. Haga clic en **Update Chart** para aplicar cualquier cambio en la configuración.

## Pestaña 2 — Country Map

Mapa coroplético mundial de documentos por país. Opciones:

| Control | Descripción |
|:--------|:------------|
| Color Palette | Familia viridis (viridis, magma, plasma, inferno, cividis, mako, rocket, turbo) o paletas ColorBrewer (Blues, Reds, YlOrRd, YlGnBu, Spectral). |
| Color Scale | Logarítmica (log10) o lineal. |
| Palette Direction | Normal o invertida. |
| Map Title | Título editable. |
| Color NA countries | Color de relleno para países no presentes en el corpus. |
| Border color / Border width | Apariencia de las fronteras entre países. |

Las opciones de exportación permiten descargar el mapa (PNG, TIFF, JPEG o PDF) y la tabla subyacente de frecuencias por país (Excel).

## Pestaña 3 — Collaboration Network

Esta pestaña construye una red internacional de coautoría a partir de la columna `affiliations`. Para cada registro la aplicación extrae todos los países mencionados en las afiliaciones, crea un par (país A, país B) para cada combinación de coautoría, agrega los pares en todo el corpus y visualiza el resultado como un grafo.

**Filtros y controles visuales:**

| Control | Descripción |
|:--------|:------------|
| Min. collaborations | Peso mínimo de arista (número de registros en coautoría) para que aparezca un enlace. |
| Max. countries to show | La red conserva solo los N países principales por grado, para evitar saturación visual. |
| Network Layout | Siete opciones: Fruchterman-Reingold (por defecto), Kamada-Kawai, Circle, Star, Grid, Sphere y Random. |
| Node size scale | Escala del área del nodo (proporcional al grado ponderado / strength). |
| Edge transparency | Transparencia (alpha) de las aristas. |
| Node color / Edge color | Colores base cuando no se usa gradiente por métrica. |
| Label size | Tamaño de las etiquetas de países. |
| Color nodes by | Gradiente de color de los nodos basado en una métrica de centralidad (ver tabla abajo). |
| Metric color palette | Paleta para el gradiente de color de los nodos (familia viridis o ColorBrewer). |

Haga clic en **Build Network** para calcular el grafo. Las tres pestañas internas muestran:

- **Network Plot**: el grafo de coautoría. El tamaño del nodo es proporcional al strength (grado ponderado); el grosor de la arista es proporcional al número de copublicaciones.
- **Edge List**: pares de coautoría y su recuento de colaboraciones, descargable en Excel.
- **Network Metrics**: tabla con ocho métricas de centralidad por país, con barras de color para las tres más informativas, más un gráfico de barras de la métrica seleccionada para los N países principales. Descargable en Excel.

**Métricas de centralidad disponibles:**

| Métrica | Descripción |
|:--------|:------------|
| Strength | Suma de los pesos de arista (total de copublicaciones). |
| Degree | Número de países socios distintos. |
| Betweenness | Fracción de caminos más cortos que pasan por el nodo (normalizado). Usa pesos inversos para que los vínculos más fuertes se traten como caminos más cortos. |
| Closeness | Inverso de la longitud media del camino más corto a todos los demás nodos (normalizado). |
| PageRank | Puntuación de autoridad basada en la estructura de enlaces, ponderada por el recuento de colaboraciones. |
| Hub score | Puntuación de hub de Kleinberg: nodos que enlazan con muchas autoridades importantes. |
| Authority score | Puntuación de autoridad de Kleinberg: nodos enlazados por muchos hubs importantes. |
| Clustering coefficient | Transitividad local: fracción de los vecinos de un nodo que también están conectados entre sí. |

# Paso 2. Preprocesamiento del texto (`Preprocess`)

Este módulo convierte el texto en una matriz documento-término. Todo se configura en la pestaña **Settings** y se ejecuta con **Run Preprocessing**.

| Opción | Descripción |
|:-------|:------------|
| Select text column | Columna con el texto a modelar. Por defecto: `abstract`. |
| Select document ID column | Columna que identifica cada documento. Por defecto: `title` (o `doi` si no hay título). |
| Upload Additional Stopwords | Archivo `.xlsx` con palabras vacías adicionales en la primera columna, una por fila y sin encabezado. |
| Min n-gram / Max n-gram | Tamaño de n-gramas, de 1 a 3. Por defecto 1 y 2 (palabras simples y bigramas). |
| Apply stemming | Aplica el algoritmo de Porter. Activado por defecto. |
| Remove numbers / Remove punctuation | Eliminar números y puntuación. Activados por defecto. |
| Sparse filter | Dispersión máxima permitida por término (0,90 a 0,9999; por defecto 0,995). Cuanto menor es el valor, más términos raros se eliminan. |
| Number of CPUs | Núcleos utilizados para construir la DTM. |

El texto siempre se convierte a minúsculas y siempre se eliminan las palabras vacías en inglés, junto con las del archivo cargado y las añadidas de forma interactiva. Por esta razón la aplicación está diseñada para corpus en inglés.

Las otras pestañas del módulo muestran y permiten refinar el resultado:

- **DTM Summary**: dimensiones de la matriz antes y después del filtro de dispersión. Si la DTM queda vacía, o el filtro elimina todos los términos, la aplicación lo informa; en el segundo caso, pruebe un nivel de dispersión menos estricto.
- **Term Frequency (tf_mat)**: tabla de términos con su frecuencia total y frecuencia de documentos.
- **Refine Stopwords**: tabla ordenada por frecuencia de documentos descendente. Los términos que aparecen en muchos documentos suelen ser candidatos a palabras vacías. Seleccione las filas, haga clic en **Add Selected & Reprocess** y la DTM se reconstruye automáticamente. La lista acumulada de palabras añadidas durante la sesión puede descargarse en Excel o borrarse con **Clear Custom Stopwords**.
- **Downloads**: la tabla de frecuencias completa (`tf_mat.xlsx`) y la DTM final (`dtm_final_sparse.rds`).

# Paso 3. Elección del número de tópicos (`LDA Inference`)

El módulo ajusta un modelo LDA para cada valor de K en el rango elegido, en paralelo, y calcula la coherencia de cada tópico (Mimno et al., 2011). La medida resumen para cada modelo es la coherencia media de sus tópicos.

| Opción | Por defecto |
|:-------|:------------|
| Minimum number of topics (k start) | 5 |
| Maximum number of topics (k end) | 40 |
| Step for k | 1 |
| Iterations | 500 |
| Burn-in | 50 |
| Alpha | 0,1 |
| Number of CPUs | depende de la máquina |

Haga clic en **Run LDA Inference**. Cuando termina, el estado informa el K con mayor coherencia media y el tiempo transcurrido. Los resultados aparecen en dos pestañas:

- **Coherence Table**: valor de coherencia para cada K, descargable en Excel (`coherence_mat.xlsx`).
- **Coherence Plot**: curva de coherencia frente a K, con opciones de personalización (etiquetas, tema, color y ancho de línea, puntos) y exportación como PNG, TIFF, JPEG o PDF.

El K con coherencia máxima es un punto de partida, no una decisión final. Las curvas de coherencia suelen tener varias regiones con valores similares, razón por la cual el siguiente paso evalúa la robustez de la elección.

# Paso 4. Estabilidad y sensibilidad (`Stability & Sensitivity`)

Este módulo comprueba si el K elegido es robusto, utilizando tres ideas:

1. **Estabilidad frente a la inicialización.** Para cada K candidato se entrenan varios modelos y se mide la variabilidad de su coherencia y el Índice de Rand Ajustado (ARI; Hubert y Arabie, 1985) entre las asignaciones de tópico dominante de cada documento. Antes de comparar las ejecuciones, los tópicos de cada una se alinean con los de la primera ejecución mediante la similitud del coseno de sus distribuciones de términos.
2. **Puntuación compuesta.** Cada K recibe una puntuación que combina cuatro criterios.
3. **Sensibilidad a los pesos.** El módulo comprueba si el K ganador cambia bajo esquemas alternativos de ponderación.

## Configuración

| Opción | Por defecto | Descripción |
|:-------|:------------|:------------|
| Number of seeds | 5 (3 a 20) | Ejecuciones independientes por K. |
| Base seed | 42 | Primera semilla de la secuencia. |
| Iterations per seed | 300 | Iteraciones de cada ejecución. |
| Burnin per seed | 150 | Iteraciones de calentamiento. |
| CPUs for parallel training | depende de la máquina | Núcleos disponibles. |
| Select K candidates | K óptimo y sus vecinos | Valores de K a evaluar; se ofrecen los probados en `LDA Inference`. Debe seleccionar al menos dos. |

## Criterios de la puntuación compuesta

Todos los criterios se normalizan al rango 0 a 1 entre los K evaluados:

| Criterio | Peso por defecto | Qué mide |
|:---------|:-----------------|:---------|
| Plateau | 0,30 | Favorece los valores de K donde la coherencia cambia poco respecto al K anterior, es decir, regiones planas de la curva. |
| Stability | 0,30 | ARI medio de las ejecuciones respecto a la primera ejecución. |
| Parsimony | 0,20 | Favorece valores de K más pequeños. |
| Interpretability | 0,20 | Aproximación basada en coherencia (70%) y baja variabilidad de coherencia entre ejecuciones (30%). |

Los pesos se reescalan automáticamente para que sumen 1. La interpretabilidad es una aproximación numérica: no sustituye la lectura de los términos de cada tópico.

## Resultados

Haga clic en **Run Stability Analysis**. Los resultados se organizan en cinco pestañas:

- **Stability Table**: para cada K, ARI medio y mínimo (respecto a la primera ejecución), coherencia media, desviación estándar, mínimo y máximo, y la puntuación de cada criterio, ordenados por puntuación total. Descargable en Excel.
- **Coherence Boxplot**: distribución de la coherencia entre ejecuciones para cada K.
- **Coherence by Seed**: coherencia de cada ejecución, por K.
- **Weight Sensitivity**: K ganador bajo el esquema declarado y bajo cuatro esquemas alternativos (pesos iguales y esquemas dominados por estabilidad, parsimonia o interpretabilidad). Un mensaje resume si el ganador se mantiene.
- **Radar Chart**: puntuación de los cuatro criterios (estabilidad, parsimonia, interpretabilidad y meseta) para cada K evaluado.

Los gráficos se descargan como PNG y las tablas como Excel. Un K que gana en casi todos los esquemas y tiene un ARI alto es más fácil de defender que uno que gana bajo un único conjunto de pesos.

# Paso 5. Entrenamiento del modelo final (`Final LDA Model`)

## Parámetros

El número de tópicos (**Number of topics (K)**) se inicializa con el K óptimo de `LDA Inference`, pero puede modificarse. Cuando se recibe el K óptimo, alpha también se actualiza automáticamente a `50 / K` (redondeado a dos decimales).

| Opción | Por defecto |
|:-------|:------------|
| Iterations | 500 |
| Burn-in | 50 |
| Alpha (prior Dirichlet sobre theta) | 0,1 (actualizado a 50/K al sincronizarse con el paso de inferencia) |
| Beta (prior Dirichlet sobre phi) | 0,05 |
| CPUs for Model Training | todos menos uno |
| Optimize Alpha during run | activado |
| Model Evaluation Metrics | verosimilitud y coherencia (R-cuadrado es opcional) |

Haga clic en **Train Final LDA Model**. Cuando termina, se activa **Download Final LDA Model (.rds)**.

## Resultados

| Pestaña | Contenido | Archivo de descarga |
|:--------|:----------|:--------------------|
| Model Evaluation Metrics | Parámetros del modelo y las métricas globales seleccionadas (log-verosimilitud media, coherencia media, R-cuadrado). | `lda_model_metrics.xlsx` |
| Top Terms Matrix | Una columna por tópico (`t_1`, `t_2`, ...) y una fila por rango (1 = término más importante). El número de términos (M) es configurable. | `lda_top_terms_matrix.xlsx` |
| Document Topic Assignment | Tópico dominante de cada documento (el de mayor gamma). | `toptopic.xlsx` |
| Top Documents per Topic | Los documentos con mayor gamma en cada tópico; el número es configurable. | `clasificacion.xlsx` |
| Topic-Term Weights (Beta) | Matriz tópico-término en formato largo. La vista muestra los 5 términos principales por tópico; la descarga contiene la matriz completa. | `tidy_beta.xlsx` |
| Document-Topic Weights (Gamma) | Matriz documento-tópico en formato largo. La vista muestra una muestra; la descarga contiene la matriz completa. | `tidy_gamma.xlsx` |
| Topic Word Cloud | Nube de palabras del tópico elegido, con número máximo de palabras, color base o paleta RColorBrewer, y exportación (PNG, JPEG, PDF o TIFF, con ancho, alto y DPI). | depende del formato |
| Theta Matrix (Full) | Matriz documento-tópico completa con los metadatos `title`, `country` y `Journal` y una columna por tópico. | `theta_matrix_full_K<K>_<fecha>.xlsx` |
| LDAvis | Visualización interactiva de tópicos (ver más abajo). | |

## Numeración consistente de tópicos

Los tópicos se denominan `t_1`, ..., `t_K`. La matriz de términos principales, la matriz theta y LDAvis usan esa misma numeración: el tópico `t_3` en la tabla de términos es el tópico 3 en LDAvis y la columna `t_3` de la matriz theta. Para garantizarlo, LDAvis se genera sin reordenar los tópicos por prevalencia, que es su comportamiento por defecto. Antes de abrirlo, la aplicación verifica que el término principal de cada tópico en LDAvis coincida con el de la tabla y avisa si encuentra una diferencia.

## LDAvis

Haga clic en **Abrir LDAvis** y la visualización se abre en una nueva pestaña del navegador (permita las ventanas emergentes). LDAvis (Sievert y Shirley, 2014) proyecta los tópicos en dos dimensiones y muestra los términos más relevantes para el tópico seleccionado.

- Con λ = 1 (el valor con que se abre), los términos se ordenan por su probabilidad dentro del tópico, el mismo criterio que la matriz de términos principales. Si mueve el control λ dentro de LDAvis hacia valores menores, se priorizan los términos más exclusivos del tópico y la lista cambia, aunque la numeración permanece igual.
- El tamaño de cada círculo es proporcional a la prevalencia del tópico.

## El modelo descargado

El archivo `lda_final_model.rds` contiene el objeto devuelto por `textmineR::FitLdaModel()`, al que la aplicación añade la prevalencia de cada tópico (como porcentaje), las etiquetas y los parámetros utilizados. Puede cargarlo en R para continuar el análisis:

```{r use-model}
model <- readRDS("lda_final_model.rds")

names(model)            # componentes del modelo
dim(model$phi)          # K tópicos x términos
dim(model$theta)        # documentos x K tópicos
round(model$prevalence, 1)

# Diez términos principales de cada tópico
textmineR::GetTopTerms(model$phi, M = 10)
```

# Paso 6. Tendencias temporales (`Topic Trends`)

Este módulo parte de la intensidad de cada tópico por año, calculada como la gamma media de los documentos de ese año, y evalúa su evolución con dos pruebas complementarias:

- **Regresión de mínimos cuadrados ordinarios (MCO)** de la intensidad sobre el año: pendiente (reportada multiplicada por 1000), R-cuadrado y valor p.
- **Prueba de Mann-Kendall** (Mann, 1945), no paramétrica: coeficiente τ y valor p.

## Opciones

| Opción | Por defecto | Descripción |
|:-------|:------------|:------------|
| Significance Level (α) | 0,05 | Umbral de significancia. |
| Exclude last year | activado | Excluye el último año del corpus, que suele estar solo parcialmente indexado. |
| Apply FDR correction | activado | Ajusta los valores p para comparaciones múltiples con el método de Benjamini-Hochberg (1995). |
| Select Topic for Plotting | primer tópico | Tópico a graficar; aparece una vez ejecutado el análisis. |

Haga clic en **Run Trend Analysis**. Un tópico necesita al menos cuatro años de datos para ser evaluado; con menos, se clasifica como estable por datos insuficientes.

## Clasificación

La clasificación requiere que las dos pruebas converjan:

| Resultado | Condición |
|:----------|:----------|
| `Increasing` / `Declining` | La pendiente MCO y τ tienen el mismo signo y **ambas** pruebas son significativas. |
| `Increasing*` / `Declining*` | Ambas pruebas coinciden en signo, pero solo **una** es significativa. |
| `Stable` | Ninguna es significativa, los signos difieren, o no hay suficientes datos. |

## Resultados

- **Topic-Year Data**: intensidad media de cada tópico por año (`topic_year_intensity_data.xlsx`).
- **Regression Results Table**: para cada tópico, tendencia, prevalencia media (%), pendiente MCO, R-cuadrado, valores p (con y sin corrección FDR), τ y su valor p (`topic_trend_regression_results.xlsx`).
- **Topic Trend Plot**: intensidad del tópico elegido a lo largo de los años con su línea de tendencia. Admite personalización (título, etiquetas, tema, fuente, estilo de línea y puntos) y exportación en varios formatos.

# Archivos generados por la aplicación

| Módulo | Archivo |
|:-------|:--------|
| `Import Data` | Archivo Excel integrado, tabla de países, tabla PRISMA, diagrama PRISMA y gráficos |
| `Geographic & Journal Analysis` | Tabla de países, tabla de revistas, gráfico de producción, mapa coroplético, tabla de frecuencias por país, lista de aristas y métricas de red (como Excel o imagen) |
| `Preprocess` | `tf_mat.xlsx`, `dtm_final_sparse.rds`, `custom_stopwords_<fecha>.xlsx` |
| `LDA Inference` | `coherence_mat.xlsx` y gráfico de coherencia |
| `Stability & Sensitivity` | `Stability_Results_<fecha>.xlsx`, `Weight_Sensitivity_<fecha>.xlsx` y gráficos PNG |
| `Final LDA Model` | `lda_final_model.rds`, `lda_model_metrics.xlsx`, `lda_top_terms_matrix.xlsx`, `toptopic.xlsx`, `clasificacion.xlsx`, `tidy_beta.xlsx`, `tidy_gamma.xlsx`, `theta_matrix_full_K<K>_<fecha>.xlsx`, nubes de palabras |
| `Topic Trends` | `topic_year_intensity_data.xlsx`, `topic_trend_regression_results.xlsx` y gráfico |

# Consejos y solución de problemas

- **Documente sus decisiones.** Conserve la tabla PRISMA, la lista de palabras vacías añadidas, el K elegido y los parámetros del modelo (pestaña `Model Evaluation Metrics`), y guarde el archivo `.rds` del modelo final.
- **Lea los tópicos, no solo las métricas.** La coherencia y la puntuación compuesta orientan la elección de K, pero la decisión final debe basarse en la lectura de los términos y los documentos representativos de cada tópico.
- **Refine las palabras vacías de forma iterativa.** Tras un primer ajuste, use `Refine Stopwords` para eliminar términos genéricos del dominio y ejecute el flujo de trabajo de nuevo.
- **La DTM está vacía o no tiene términos.** Compruebe la columna de texto elegida y relaje el filtro de dispersión (`Sparse filter`).
- **No se puede cargar un archivo grande.** Aumente `shiny.maxRequestSize` antes de iniciar la aplicación (ver «Instalación e inicio»).
- **LDAvis no se abre.** Permita las ventanas emergentes en el navegador para la dirección de la aplicación.
- **`Topic Trends` no muestra resultados.** Entrene primero el modelo final: este módulo usa la intensidad tópico-año calculada en `Final LDA Model`, que requiere que los datos importados tengan columnas `year` y `database`.
- **Los cálculos tardan mucho.** `LDA Inference` y `Stability & Sensitivity` entrenan muchos modelos. Reduzca el rango de K, use un paso mayor que 1 para una primera exploración y asigne más núcleos de CPU.

# Cómo citar

Si utiliza `LDAShiny` en su investigación, por favor cite:

De la Hoz-M., J., Fernandez-Gomez, M. J. y Mendes, S. (2021). LDAShiny: An R Package for Exploratory Review of Scientific Literature Based on a Bayesian Probabilistic Model and Machine Learning Tools. *Mathematics*, 9(14), 1671. <https://doi.org/10.3390/math9141671>

# Referencias

Benjamini, Y. y Hochberg, Y. (1995). Controlling the false discovery rate: a practical and powerful approach to multiple testing. *Journal of the Royal Statistical Society: Series B*, 57(1), 289-300.

Blei, D. M., Ng, A. Y. y Jordan, M. I. (2003). Latent Dirichlet Allocation. *Journal of Machine Learning Research*, 3, 993-1022.

Chang, W., Cheng, J., Allaire, J. J., Sievert, C., Schloerke, B., Xie, Y., et al. *shiny: Web Application Framework for R*. Paquete de R.

Fay, C., Rochette, S., Guyader, V. y Girard, C. (2022). *Engineering Production-Grade Shiny Apps*. Chapman & Hall/CRC.

Hubert, L. y Arabie, P. (1985). Comparing partitions. *Journal of Classification*, 2, 193-218.

Mann, H. B. (1945). Nonparametric tests against trend. *Econometrica*, 13(3), 245-259.

Mimno, D., Wallach, H., Talley, E., Leenders, M. y McCallum, A. (2011). Optimizing semantic coherence in topic models. *Proceedings of EMNLP*, 262-272.

Page, M. J. et al. (2021). The PRISMA 2020 statement: an updated guideline for reporting systematic reviews. *BMJ*, 372, n71.

Sievert, C. y Shirley, K. (2014). LDAvis: A method for visualizing and interpreting topics. *Proceedings of the Workshop on Interactive Language Learning, Visualization, and Interfaces*, 63-70.
