LDAShiny: flujo de trabajo guiado para modelado de tópicos

Javier De la Hoz-M.

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:

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:

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:

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:

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:

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:

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:

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:

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.

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:

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)

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

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.