---
title: "Mi título de Proyecto Personal"
author: "Mi nombre y apellidos"
date: "`r Sys.Date()`"
output:
  html_document:
    css: estilos.css # fichero de estilos CSS para el formateo HTML 
    theme: readable  # tema de referencia para el formateado del texto
    number_sections: true

# Para este documento no usar la opción "toc: true" para generar una tabla de secciones a la izquierda porque en este documento los títulos de secciones están pre-fijados y esta opción quita espacio de lectura
---

<!-- 
================================================================================
IMPORTANTE: CADA VEZ QUE TE PONGAS A TRABAJAR EN EL PROYECTO ABRE UNA SESIÓN DE 
TRABAJO EN LA GOOGLE SHEET (VER FINAL DE ESTE DOCUMENTO) PARA HACERLE UN 
SEGUIMIENTO AL TIEMPO DEDICADO AL PROYECTO (NO OLVIDES CERRAR LA SESIÓN DE 
TRABAJO EN GOOGLE SHEET CUANDO TERMINES)
================================================================================
--> 

<!--
================================================================================
ATAJOS DE TECLADO ESENCIALES:
  CTRL-SHIFT-1      → El panel de edición ocupa / deja de ocupar toda la ventana
  CTRL-ALT-C        → Ejecuta el chunk donde está el cursor (también con el triángulo verde ▶)
  CTRL-S            → Guarda el fichero (activa "Knit on Save" para compilar automáticamente)
  CTRL-ENTER        → Ejecuta el código seleccionado con el ratón o la línea actual
  CTRL-SHIFT-K      → Compila (Knit) el documento completo
  CTRL-ALT-I        → Inserta un nuevo chunk de código R
-->

```{r setup, echo=FALSE}
# ============================================================
# OPCIONES GLOBALES DE COMPILACIÓN DE CHUNKS
# Estas opciones se aplican a TODOS los chunks del documento
# salvo que se definan en cada chunk individualmente.
# ============================================================
knitr::opts_chunk$set(
  warning = FALSE,   # No muestra advertencias de R en el documento compilado
  message = FALSE,   # No muestra mensajes de carga de librerías
  echo    = FALSE,   # No muestra el código R en el documento compilado
                     # (cambia a echo=TRUE en chunks concretos si quieres mostrar código)
  cache   = FALSE    # FALSE: recompila todos los chunks en cada Knit (recomendado al terminar)
                     # TRUE: solo recompila chunks modificados (útil durante el desarrollo
                     #        cuando hay chunks lentos). Si hay errores inexplicables,
                     #        borra la carpeta con extensión "_cache" y recompila todo.
)
```

```{r global, include=FALSE}
# ============================================================
# CARGA DE LIBRERÍAS
# ============================================================
# Si alguna librería no está instalada, instálala con:
#   install.packages("nombre_libreria")
# Para instalar varias a la vez puedes usar:
#   install.packages(c("DT","googlesheets4","kableExtra",...))

library(DT)            # Tablas interactivas con búsqueda, ordenación y paginación
library(googlesheets4) # Lectura de hojas de cálculo de Google Sheets
library(kableExtra)    # Formateo avanzado de tablas estáticas (kable); alternativa moderna: gt (ver cap. 3 del libro)
library(zoo)           # Series temporales irregulares y funciones de ventana deslizante
library(MASS)          # Métodos estadísticos clásicos (regresión robusta, discriminante, etc.)
library(highcharter)   # Gráficos interactivos basados en Highcharts (alternativa a plotly)
library(fpp3)          # Forecasting: tsibble, fable y feasts para series temporales
library(RColorBrewer)  # Paletas de colores para gráficos
library(openxlsx)      # Lectura y escritura de ficheros Excel (.xlsx) 
library(leaflet)       # Mapas interactivos basados en Leaflet.js
library(sf)            # Datos geoespaciales vectoriales (simple features): lectura de GeoJSON
library(skimr)         # Resumen exploratorio completo de una tabla en una llamada (skim)
library(janitor)       # Limpieza de nombres de columnas (clean_names)
library(naniar)        # Visualización de valores faltantes (gg_miss_var)
library(plotly)        # Convierte gráficos ggplot2 en interactivos con ggplotly()
library(ggplot2)       # Sistema de visualización declarativa (gramática de gráficos)
library(tidyverse)     # Ecosistema de paquetes para ciencia de datos (dplyr, tidyr, etc.)

# ============================================================
# FICHEROS QUE TIENEN QUE ESTAR EN LA CARPETA DE LA MEMORIA
# estilos.css y utilidades.R vienen en la carpeta ProyectoPersonal.
# Sin estilos.css la memoria compila igualmente, pero sin formato
# (cajas de colores, tablas con scroll...), así que se comprueba
# aquí y se detiene la compilación si falta alguno de los dos.
# ============================================================
for (fichero in c("estilos.css", "utilidades.R"))
  if (!file.exists(fichero))
    stop("Falta el fichero ", fichero, " en la carpeta de la memoria: ",
         "cópialo desde la carpeta ProyectoPersonal", call. = FALSE)

# Funciones de la asignatura (aedv_...), entre ellas aedv_incluir_dataset(),
# que incorpora los datasets en "Comprensión de los datos"
source("utilidades.R")

# ============================================================
# RESOLUCIÓN DE CONFLICTOS ENTRE LIBRERÍAS
# Cuando varias librerías definen funciones con el mismo nombre,
# R usa la última cargada. Para garantizar que siempre se use
# la versión correcta, se pueden asignar explícitamente las más usadas.
# ============================================================
filter    <- dplyr::filter    # Filtra filas según condiciones lógicas
select    <- dplyr::select    # Selecciona o descarta columnas por nombre
mutate    <- dplyr::mutate    # Crea nuevas columnas o modifica las existentes
arrange   <- dplyr::arrange   # Ordena filas por una o más columnas
group_by  <- dplyr::group_by  # Agrupa el tibble para operaciones por grupo
summarise <- dplyr::summarise # Calcula resúmenes por grupo (media, suma, conteo, etc.)
summarize <- dplyr::summarize # Alias americano de summarise
rename    <- dplyr::rename    # Renombra columnas (nuevo_nombre = viejo_nombre)
distinct  <- dplyr::distinct  # Elimina filas duplicadas según las columnas indicadas
slice     <- dplyr::slice     # Selecciona filas por posición numérica
relocate  <- dplyr::relocate  # Reordena columnas dentro del tibble
selectInput <- shiny::selectInput  # Widget de selección desplegable para el Dashboard

# ============================================================
# TEMA POR DEFECTO PARA TODOS LOS GRÁFICOS ggplot2
# theme_bw() usa fondo blanco con rejilla gris, adecuado para memorias.
# Alternativas: theme_minimal(), theme_classic(), theme_light()
# base_size controla el tamaño base de la fuente en todos los elementos del gráfico.
# ============================================================
theme_set(theme_bw(base_size = 12))
```


<!--
================================================================================
ENLACE AL CUADRO DE MANDOS
================================================================================
INSTRUCCIONES:
  1. Sube tu fichero NombreApellido1Dashboard.Rmd y sus datos al servidor Shiny
     del DIS, siguiendo DashboardInstruccionesServidorShiny.html (en la carpeta
     ProyectoPersonal).
  2. Sustituye en la dirección del enlace "a2405" por tu cuenta del servidor
     Shiny (la consultas en MiDIS: https://www.dis.ulpgc.es/midis/).
  3. Sustituye "Dashboard3.Rmd" por el nombre exacto de tu fichero de dashboard.
  4. El cuadro de mandos SOLO es accesible desde la red del DIS o usando su VPN
     (https://www.dis.ulpgc.es/vpn/).

REQUISITO: Todo proyecto personal debe incluir un cuadro de mandos funcional
desplegado en el servidor del DIS. El enlace debe apuntar a una versión
operativa en el momento de la entrega final.
================================================================================
-->

[Cuadro de mandos](http://10.22.143.222:3838/sample-apps/a2405/Dashboard3.Rmd)


<!--
IMAGEN DE PORTADA:
Sustituye la imagen de abajo por una representativa de tu tema de proyecto.
Puede ser una imagen propia, de dominio público o con licencia Creative Commons.
El atributo width controla el tamaño relativo respecto al ancho del documento.

La imagen puede ser una URL o un fichero local. Si es un FICHERO LOCAL,
guárdalo en la misma carpeta que este Rmd (por ejemplo "portada.png"),
referencia esa ruta relativa y entrégalo junto a la memoria.
-->

<center>
<img src="https://ctim.es/Delmond.png" width="60%" />
</center>

Para formatear el texto se usa el fichero *estilos.css* que está incluido en las instrucciones de la cabecera de este documento. En el fichero *estilos.css* se incorporan algunas herramientas útiles para destacar bloques de texto como por ejemplo: 

<div class="nota">
<strong class="bloque-titulo">MiTítulo bloque nota</strong>
Se usa para resaltar un comentario
</div>

<div class="metodo">
<strong class="bloque-titulo">MiTítulo bloque metodo</strong>
Se usa para resaltar métodos/algoritmos/fórmulas 
</div>

<div class="discusion">
<strong class="bloque-titulo">MiTítulo bloque de discusion </strong>
Se usa para resaltar una discusión/comparación/resultados previos
</div>

<div class="resultado">
<strong class="bloque-titulo">MiTítulo bloque resultado</strong>
Se usa para resaltar resultados de nuestro proyecto
</div>

NOTA: BORRAR O PONER ENTRE COMENTARIOS ESTOS EJEMPLOS DE FORMATEO UNA VEZ ENTENDIDOS LOS EJEMPLO 



# Introducción

<!--
================================================================================
SECCIÓN: INTRODUCCIÓN
================================================================================
PROPÓSITO: Situar al lector en el tema del proyecto antes de entrar en detalles.
Esta sección debe responder a tres preguntas: ¿de qué va el proyecto?, ¿por qué
es relevante abordarlo ahora? y ¿qué se pretende conseguir?

ESTRUCTURA RECOMENDADA:
  - Párrafo inicial: presenta el tema en términos generales y su importancia actual.
  - Estado actual: qué se sabe ya sobre el tema, qué estudios o datos existen.
  - Motivación: por qué tú en particular te has interesado en este tema.
  - Objetivos: qué quieres conseguir con este trabajo.



ERRORES FRECUENTES A EVITAR:
  - Escribir una introducción demasiado genérica que valdría para cualquier proyecto.
  - Poner texto generado por la IA sin adaptarlo ni contrastarlo con fuentes primarias.
  - Enumerar los objetivos sin explicar el contexto que los justifica.
  - Elegir el dataset solo porque cumple los requisitos de AEDV, sin saber qué
    preguntas interesantes se quieren responder con él (ver "Objetivos").
================================================================================
-->


## Estado actual

<!--
PROPÓSITO: Demostrar que conoces el estado del arte del tema que abordas.

CONTENIDO ESPERADO:
  - Definición y explicación de los conceptos clave del tema (2-3 conceptos mínimo).
  - Referencia a estudios, informes o datasets previos relevantes con sus resultados
    más destacados. 
  - Identificación de gaps o limitaciones en el conocimiento actual que justifiquen
    la necesidad de tu estudio.
  - Datos cuantitativos que avalen la relevancia del tema (estadísticas recientes,
    cifras de impacto, cobertura geográfica, etc.).
-->

## Motivación

<!--
PROPÓSITO: Justificar de forma personal y directa la elección de este tema.

CONTENIDO ESPERADO:
  - Interés personal: ¿qué conexión tienes tú con este tema? (experiencia directa,
    vinculación familiar o profesional, inquietud intelectual, etc.)
  - Interés social o profesional: ¿qué utilidad práctica tiene el análisis que
    propones? ¿a quién puede beneficiar y de qué forma?
  - Oportunidad: ¿por qué es especialmente oportuno abordar este tema ahora?
    (datos recién disponibles, cambio regulatorio, evento reciente, etc.)

CONSEJO: La motivación es el apartado más personal del trabajo. Redactalo en
primera persona y con autenticidad. Una motivación bien argumentada hace más
convincente el resto del proyecto.


-->

## Objetivos

<!--
PROPÓSITO: Declarar con claridad qué quieres lograr con este proyecto.

CÓMO REDACTAR OBJETIVOS DE CALIDAD:
  - Formula entre 3 y 5 objetivos específicos, medibles y alcanzables.
  - Comienza cada objetivo con un verbo en infinitivo que indique una acción
    concreta: analizar, identificar, comparar, modelar, visualizar, predecir...
  - Distingue entre el objetivo general (la meta global del proyecto) y los
    objetivos específicos (los pasos concretos para alcanzarla).
  - Asegúrate de que cada objetivo tiene un reflejo directo en la sección de
    Conclusiones, donde reportarás si se ha conseguido o no.

EJEMPLO DE ESTRUCTURA:
  Objetivo general: Analizar la evolución temporal de X en Y durante el período Z.
  Objetivos específicos:
    1. Identificar las principales variables que influyen en X.
    2. Comparar el comportamiento de X entre los grupos A y B.
    3. Construir un modelo predictivo de X para el horizonte temporal T.
    4. Diseñar un cuadro de mandos interactivo que permita explorar los resultados.

PREGUNTAS DE INVESTIGACIÓN (IMPRESCINDIBLE):
  Los objetivos deben concretarse en 3-5 PREGUNTAS DE INVESTIGACIÓN: las
  preguntas concretas e interesantes que el proyecto pretende responder con los
  datos. Son el hilo conductor de toda la memoria: justifican la elección de
  los datasets (Comprensión del negocio), orientan el análisis (Modelado y
  Evaluación) y se responden una a una en las Conclusiones.

  Que un dataset cumpla los requisitos de AEDV (cobertura, series largas,
  España/Canarias, 4 atributos) es CONDICIÓN NECESARIA PERO NO SUFICIENTE. Un
  proyecto que empieza por "encontré un dataset que cumple los requisitos" y no
  sabe qué quiere averiguar con él acaba siendo una descripción de gráficas sin
  hallazgos. Lo razonable es partir de un tema que te interese, preguntarte qué
  te gustaría saber sobre él y buscar después los datos que permitan responderlo.

  Una buena pregunta de investigación:
    - Es CONCRETA: se refiere a unas variables, unas regiones y un periodo.
    - Se puede RESPONDER CON TUS DATOS (y con las técnicas de la asignatura:
      series temporales, predicción, correlación, PCA, mapas...).
    - Su respuesta NO ES OBVIA de antemano y tiene interés para alguien
      (ciudadanía, administración, empresas...).
    - Suele implicar una COMPARACIÓN, una RELACIÓN o un CAMBIO: entre regiones,
      entre variables, antes/después de un acontecimiento, frente a una tendencia.

  EJEMPLOS:
    Débil:  "Analizar la evolución del paro en España."  (descriptivo, sin
            pregunta: cualquier resultado "vale" y no hay nada que concluir)
    Mejor:  "¿Se ha recuperado el empleo en Canarias tras la crisis de 2008 al
            mismo ritmo que en el resto de comunidades? ¿Qué comunidades se
            parecen más a Canarias en su evolución?"
    Débil:  "Estudiar las emisiones de CO2 de los países."
    Mejor:  "¿Qué países han conseguido reducir sus emisiones por habitante sin
            dejar de crecer económicamente? ¿Está España entre ellos?"
    Débil:  "Ver los datos de turismo de Canarias."
    Mejor:  "¿Qué islas dependen más de un solo mercado emisor y cómo afectó esa
            dependencia a su caída en 2020? ¿Qué nivel de llegadas cabe esperar
            en los próximos dos años según los modelos ARIMA?"

  Formúlalas como preguntas (con signos de interrogación) y numéralas (P1, P2...)
  para poder citarlas en el resto de la memoria.

  LAS PREGUNTAS EVOLUCIONAN POR ITERACIONES:
  Las preguntas de la Entrega 1 (donde son obligatorias) son un PUNTO DE PARTIDA.
  Igual que el resto de la metodología CRISP-DM, se trabajan por iteraciones: al
  explorar, modelar y evaluar los datos aparecerán resultados que obligan a
  matizar una pregunta, a descartar otra que los datos no permiten responder o
  a plantear una nueva que no se veía al principio. Actualiza este apartado en
  cada entrega: en la memoria final deben figurar las preguntas que el análisis
  responde de verdad. En el texto final redacta directamente la versión
  definitiva; si una reformulación es en sí misma un hallazgo (p. ej. "los datos
  muestran que la pregunta relevante no era X sino Y"), explícalo en Evaluación
  o en Conclusiones.
-->


# Aportaciones del trabajo

<!--
================================================================================
SECCIÓN: APORTACIONES DEL TRABAJO
================================================================================
CUÁNDO ESCRIBIR ESTA SECCIÓN:
Esta sección se redacta normalmente AL FINAL del proyecto, una vez completadas
las fases de Modelado, Evaluación y Despliegue, porque solo entonces conoces
con precisión cuáles son tus resultados y aportaciones reales.

En las entregas intermedias puedes dejarla en borrador con las aportaciones
esperadas, actualizándola progresivamente.

RELACIÓN CON EL CICLO CRISP-DM:
Esta sección NO es una fase de CRISP-DM. Es una síntesis transversal que se
sitúa fuera del ciclo y que se redacta una vez completado el Despliegue.
Su función es comunicar el valor global del trabajo al lector que no dispone
de tiempo para leer el Desarrollo completo. Por eso debe ser autónoma y
comprensible sin necesidad de haber leído las fases anteriores.
================================================================================
-->

## Principales aportaciones

<!--
PROPÓSITO: Sintetizar el valor añadido de tu trabajo en el contexto del área de estudio.

CONTENIDO ESPERADO:
  - Resultados más relevantes del análisis y su significado en el contexto del tema.
  - Nuevas perspectivas, patrones o relaciones identificadas que no eran evidentes
    antes del análisis.
  - Actualización del conocimiento existente: ¿en qué medida tus resultados
    confirman, matizan o contradicen estudios previos?
  - Descripción del cuadro de mandos como aportación práctica del proyecto:
    qué permite explorar, a qué audiencia va dirigido y qué valor aporta.

ALINEAMIENTO CON OBJETIVOS:
  Cada aportación debe poder vincularse explícitamente con al menos uno de los
  objetivos declarados en la Introducción. Si un objetivo no tiene reflejo aquí,
  revisa si fue realmente alcanzado o si debe trasladarse a Trabajo futuro.


-->


## Alineamiento con los objetivos de desarrollo sostenible

<!--
PROPÓSITO: Reflexionar sobre el impacto del proyecto en el marco de los 17 ODS
de la Agenda 2030 de Naciones Unidas.

INSTRUCCIONES PARA RELLENAR LA TABLA:
  La tabla está definida directamente en el chunk de R como un tibble editable.

  Para cada ODS, pon una "X" en UNA SOLA de estas cuatro columnas:
    No_procede | Bajo | Medio | Alto
  y deja las otras tres con "".

  Ejemplo: si el ODS 13 tiene relación Alta con tu proyecto:
    "ODS 13. Acción por el clima",  "", "", "", "X"

CONSEJO PARA IDENTIFICAR RELACIONES:
  Puedes usar como punto de partida la consulta a un asistente de IA:
    "Relaciona [mi tema de proyecto] con los 17 ODS de la Agenda 2030"
  Revisa y perfecciona el resultado con tu criterio propio.

MUY IMPORTANTE: No te limites a mostrar la tabla. Añade debajo de ella un párrafo
argumentando las relaciones que has marcado como Medio o Alto, explicando
concretamente cómo tu proyecto contribuye a esos ODS. Sin ese texto explicativo,
la tabla no tiene valor académico.

REFERENCIA OFICIAL DE LOS ODS: https://sdgs.un.org/goals
-->

```{r ods, cache=FALSE}
# ============================================================
# TABLA ODS — EDICIÓN DIRECTA
# Para cada ODS marca con "X" UNA SOLA columna:
#   No_procede | Bajo | Medio | Alto
# Deja las demás columnas vacías ("").
# No es necesario ningún fichero externo.
# ============================================================
tb <- tribble(
  ~ODS,                                                                          ~No_procede, ~Bajo, ~Medio, ~Alto,
  "ODS 1.  Fin de la pobreza",                                                   "X",         "",    "",     "",
  "ODS 2.  Hambre cero",                                                         "",         "X",    "",     "",
  "ODS 3.  Salud y bienestar",                                                   "",         "",    "X",     "",
  "ODS 4.  Educación de calidad",                                                "",         "",    "",     "X",
  "ODS 5.  Igualdad de género",                                                  "X",         "",    "",     "",
  "ODS 6.  Agua limpia y saneamiento",                                           "X",         "",    "",     "",
  "ODS 7.  Energía asequible y no contaminante",                                 "X",         "",    "",     "",
  "ODS 8.  Trabajo decente y crecimiento económico",                             "X",         "",    "",     "",
  "ODS 9.  Industria, innovación e infraestructura",                             "X",         "",    "",     "",
  "ODS 10. Reducción de las desigualdades",                                      "X",         "",    "",     "",
  "ODS 11. Ciudades y comunidades sostenibles",                                  "X",         "",    "",     "",
  "ODS 12. Producción y consumo responsables",                                   "X",         "",    "",     "",
  "ODS 13. Acción por el clima",                                                 "X",         "",    "",     "",
  "ODS 14. Vida submarina",                                                      "X",         "",    "",     "",
  "ODS 15. Vida de ecosistemas terrestres",                                      "X",         "",    "",     "",
  "ODS 16. Paz, justicia e instituciones sólidas",                               "X",         "",    "",     "",
  "ODS 17. Alianzas para lograr los objetivos",                                  "X",         "",    "",     ""
)

colnames(tb) <- c("ODS", "No procede", "Bajo", "Medio", "Alto")

kable(
  tb,
  caption = "Grado de relación del proyecto con los objetivos de desarrollo sostenible (ODS)",
  format = "html",
  table.attr = 'style="width:600px; margin-left: auto; margin-right: auto;"'
) |>
  column_spec(2, extra_css = "text-align: center;") |>
  column_spec(3, extra_css = "text-align: center;") |>
  column_spec(4, extra_css = "text-align: center;") |>
  column_spec(5, extra_css = "text-align: center;")
```

<!--
TEXTO OBLIGATORIO TRAS LA TABLA:
Añade aquí (fuera de este comentario) un párrafo de 100-200 palabras que argumente
las relaciones marcadas como Medio o Alto en la tabla anterior.
-->


# Desarrollo


## Herramientas empleadas

<!--
PROPÓSITO: Justificar la elección de las herramientas tecnológicas usadas en el proyecto.

CONTENIDO ESPERADO:
  - R y RStudio: menciona la versión de R utilizada (obtenida con R.version.string),
    destacando su potencia para análisis estadístico, visualización y generación
    de informes reproducibles con R Markdown.
  - Librerías principales: describe brevemente las más relevantes para tu proyecto
    (no es necesario listarlas todas, solo las que tienen un papel central).
    Agrupa las librerías por función: manipulación de datos, visualización, modelado,
    generación del informe.
  - Servidor Shiny del DIS: menciona que el cuadro de mandos está desplegado en el
    servidor Shiny del DIS (10.22.143.222:3838), accesible desde la red del DIS
    o su VPN, y que este despliegue permite compartir los resultados con cualquier usuario
    sin necesidad de instalar R.
  - Si has usado otras herramientas complementarias (Google Sheets, QGIS, APIs externas,
    etc.), menciónalas y justifica su uso.


-->

**Ejemplo Texto con cita bibliográfica**: Las principales herramientas usadas en este proyecto se describen en profundidad en [[Al26](https://luisalvarezmat-aedv.share.connect.posit.cloud/)].

## Metodología

<!--
NOTA: Esta sección describe la metodología de desarrollo CRISP-DM que se usará para organizar el trabajo del proyecto.
-->

> En esta sección solo se describen los diferentes apartados de la metodología, **NO SE DESARROLLAN LOS DIFERENTES APARTADOS**, solo se añade, si es necesario, un pequeño párrafo a cada apartado para indicar las especificidades de tu proyecto en el contexto de cada apartado. El desarrollo de cada uno de los apartados se hace después en las secciones correspondientes.

Utilizaremos la metodología de desarrollo CRISP-DM (Cross Industry Standard Process for Data Mining), un marco ampliamente utilizado para proyectos de Ciencias de Datos. En la siguiente figura se presenta un diagrama con las diferentes fases de esta metodología que a continuación describimos con más detalle:

<center>
<img src="https://ctim.es/AEDV/1200px-CRISP-DM_Process_Diagram1.5x.png" width="40%" />
<p style="font-size: 14px; color: gray;"><em>Figura 2. Diagrama de la metodología de desarrollo CRISP-DM.</em></p>
</center>

* **Comprensión del negocio**. A partir de los objetivos y las preguntas de investigación del proyecto, se realiza la búsqueda y evaluación de fuentes de información y datos, y se describe la estrategia seguida para seleccionar los datasets, incluido el uso de la IA.

* **Comprensión de los datos**. Se analiza la estructura y organización de los datos obtenidos. Se identifican posibles problemas como datos faltantes, outliers o inconsistencias.

* **Preparación de los datos**. Se realizan limpieza, transformación, combinación y selección o creación de variables relevantes para el análisis.

* **Modelado**. Se seleccionan y aplican los modelos adecuados para analizar los datos.

* **Evaluación**. Se evalúa si el modelo responde a las preguntas de investigación y se compara con otros métodos cuando procede.

* **Despliegue**. Se comunica el trabajo mediante esta memoria y se diseña un cuadro de mandos para presentar los resultados de forma eficaz y atractiva.

<!--
NOTA SOBRE LA PRESENTACIÓN DE RESULTADOS:
De acuerdo con la metodología CRISP-DM, los resultados se presentan, discuten
y validan de forma distribuida a lo largo de las fases de Preparación de los
datos, Modelado, Evaluación y Despliegue. Por tanto, en esta memoria no existe una sección separada de
"Resultados". Esta decisión es intencionada y coherente con la metodología.
-->

Es importante observar que esta metodología es **iterativa**: los resultados obtenidos en fases avanzadas pueden requerir revisar y ajustar fases anteriores. A continuación se describe en detalle cómo se ha abordado cada fase.


## Comprensión del negocio

<!--
================================================================================
FASE CRISP-DM 1: COMPRENSIÓN DEL NEGOCIO
================================================================================
PROPÓSITO: Describir el proceso de búsqueda, evaluación y selección de fuentes
de datos e información. NO repetir los objetivos del proyecto (ya están en la
Introducción) ni describir los datos en detalle (eso va en la fase siguiente),
pero SÍ justificar la selección a partir de las preguntas de investigación
planteadas en "Objetivos": el lector debe entender por qué estos datos, y no
otros, permiten responderlas.

CONTENIDO ESPERADO:

1. ESTRATEGIA DE SELECCIÓN DE LOS DATASETS Y USO DE LA IA
   Este es el lugar de la memoria donde se explica CÓMO se llegó a los datasets
   elegidos. Describe el proceso real, incluidos los intentos fallidos:
   - Punto de partida: qué tema y qué preguntas de investigación iniciales guiaron la
     búsqueda (o, si partiste de explorar los catálogos, cómo surgieron las
     preguntas a la vista de lo que había disponible).
   - Catálogos y fuentes explorados (INE, ISTAC, EUROSTAT, Banco Mundial,
     EDGAR, CLIMA, INFORME PISA u otras) y por qué te centraste en unos y no en otros.
   - Uso de la IA en la selección: qué agentes usaste, qué les proporcionaste
     (p. ej. el catálogo .xlsx de la fuente) y cuáles fueron las principales
     peticiones (prompts) y respuestas. Por ejemplo: "de este catálogo, dame los
     datasets sobre vivienda con datos por provincia", "descarta los que no
     tengan datos de Canarias". Indica también qué propuestas de la IA
     descartaste y por qué: la IA solo ve el índice, no los datos.
   - Candidatos validados con los *_DatasetSelection.Rmd: cuáles cumplieron los
     requisitos de AEDV y cuáles no (y por qué criterio fallaron).
   - Justificación final: para cada dataset elegido, a qué pregunta(s) de
     investigación (P1, P2...) ayuda a responder. Un dataset que no sirve para
     ninguna pregunta sobra; una pregunta sin datos que la respalden hay que
     reformularla.
   El uso de la IA en esta fase se describe AQUÍ con detalle; en el Anexo I solo
   se resume dentro de la visión global del uso de la IA en el proyecto.

2. BÚSQUEDA DE DATOS Y FUENTES CONSULTADAS
   - ¿Dónde buscaste los datos? (portales open data, APIs, scraping, encuestas, etc.)
   - Enumera todas las fuentes consultadas, aunque no las hayas usado finalmente.
   - Para cada fuente usada, indica: nombre, organismo responsable, URL, formato
     del fichero descargado (CSV, Excel, JSON, shapefile...) y fecha de descarga.
   - Si los datos provienen de una API, describe brevemente cómo se accede a ella.

3. DIFICULTADES E INCIDENCIAS EN LA OBTENCIÓN DE DATOS
   - Fuentes que encontraste pero no pudiste usar (acceso restringido, formato
     incompatible, datos insuficientes, cobertura temporal inadecuada, etc.).
   - Limitaciones de las fuentes seleccionadas (actualización infrecuente, posibles
     sesgos en la recogida, cobertura geográfica parcial, etc.).

4. ANÁLISIS DE LA FIABILIDAD Y CALIDAD ESPERADA DE LAS FUENTES
   - ¿Quién produce los datos? ¿Es un organismo oficial, una empresa privada,
     una comunidad de voluntarios (como OpenStreetMap)?
   - ¿Con qué frecuencia se actualizan?
   - ¿Hay documentación metodológica disponible? ¿Cómo se recogen los datos?
   - ¿Has encontrado discrepancias entre fuentes distintas sobre el mismo fenómeno?

5. REVISIÓN BIBLIOGRÁFICA (si procede)
   - Menciona brevemente los artículos, informes o libros más relevantes consultados
     para entender el contexto del problema.

IMPORTANTE: En esta fase NO se describe la estructura de los datos (eso es
Comprensión de los datos) ni se procesa ningún dato. Tampoco se incluyen gráficas.


================================================================================
-->


## Comprensión de los datos

<!--
================================================================================
FASE CRISP-DM 2: COMPRENSIÓN DE LOS DATOS
================================================================================
PROPÓSITO: Describir objetivamente la estructura y contenido de los datos tal
como se obtienen, SIN procesarlos ni valorarlos. Es la fase del "diagnóstico":
se expone lo que hay, no lo que se debería hacer con ello.

CONTENIDO ESPERADO (aborda cada punto que sea aplicable a tu dataset):

1. DESCRIPCIÓN DE LAS VARIABLES
   - Variables categóricas: nombre, descripción, todos los valores posibles
     y su significado. Por ejemplo: COMUNIDAD_AUTONOMA puede tomar 17 valores,
     uno por cada comunidad.
   - Variables numéricas (observaciones): nombre, descripción, unidad de medida,
     rango esperado.
   - Variables de fecha/tiempo: formato, granularidad (diaria, mensual, anual).

2. ESTRUCTURA DE LOS DATOS: ¿SON TIDY?
   - Datos "tidy" (ordenados): una fila = una observación + sus variables categóricas.
     Ejemplo: cada fila es una medición de temperatura en una estación y fecha concretas.
   - Datos "no tidy": varias observaciones por fila. Habitualmente los valores de
     una variable categórica aparecen como nombres de columnas.
     Ejemplo: columnas "2018", "2019", "2020"... con una observación en cada celda.

3. TAMAÑO Y COBERTURA DEL DATASET
   - Número total de filas y columnas del dataset original.
   - Intervalo temporal cubierto (fecha inicio – fecha fin) y granularidad temporal.
   - Cobertura geográfica (países, regiones, municipios...).
   - Número de observaciones por variable categórica relevante (frecuencias).

4. ATRIBUTOS COMBINADOS
   - Identifica las combinaciones de variables categóricas que aparecen en el dataset
     y cuántas observaciones tiene cada combinación.
   - Ejemplo: si tienes PAIS x AÑO x SECTOR, ¿están todas las combinaciones presentes
     o hay combinaciones sin datos?

5. ANÁLISIS FOCALIZADO (si procede)
   - Si tu proyecto se centra en una región, período o grupo específico, describe
     aquí cómo son los datos para ese subconjunto en particular.

6. PROBLEMAS IDENTIFICADOS
   - Valores ausentes (NA): ¿en qué variables? ¿cuántos? ¿patrón aleatorio o sistemático?
   - Outliers detectados visualmente: valores extremos que destacan a primera vista.
   - Inconsistencias: cambios de nombre, unidades distintas en diferentes períodos,
     filas duplicadas, codificaciones diferentes para el mismo valor.
   - IMPORTANTE: solo se identifican, NO se decide cómo tratarlos (eso va en Preparación).
   - HERRAMIENTAS ÚTILES para este diagnóstico (ver capítulo 2 del libro):
       skim(tabla)          -> resumen completo: tipos, NA y distribución por columna
       gg_miss_var(tabla)   -> gráfico de valores faltantes por variable
       clean_names(tabla)   -> normaliza nombres de columnas problemáticos

REGLA DE ORO: "Solo se expone, no se opina". Evita frases como "estos datos son
de buena calidad" o "habría que eliminar los outliers". Reserva las valoraciones
y decisiones para la fase de Preparación.

SOBRE LAS GRÁFICAS EN ESTA FASE:
En general no se incluyen gráficas elaboradas, pues requieren procesado previo.
Se permiten visualizaciones muy básicas de frecuencias: histogramas simples,
tablas de conteo o gráficas de barras de frecuencias absolutas sin transformaciones.


================================================================================
-->

<div class="nota">
<strong class="bloque-titulo">Inclusión datasets </strong>

Usando los Rmd **\_DatasetSelection** de las carpetas de ISTAC, INE, WORLD_BANK y EUROSTAT (o los de EDGAR, CLIMA e INFORME_PISA) seleccionamos los datasets y los incorporamos aquí en la memoria con `aedv_incluir_dataset()`, pegando en esta sección el chunk que indica cada uno de esos documentos en su última sección, según se explica en los ficheros `README_Proyecto_Personal.Rmd` (carpeta `ProyectoPersonal`) y `README_Selección_Tema.Rmd` (subcarpeta `SelecciónDatasetsProyecto`).

Cada dataset se incluye con su propio chunk, con las opciones `results='asis'` y `cache=FALSE`. Los ficheros del dataset (el `.rds`, el `_metadatos.xlsx` y el `_analisis.Rmd`) tienen que estar en la carpeta de esta memoria. Por ejemplo, el dataset principal del proyecto:

````{verbatim, echo=TRUE}
```{r, results='asis', cache=FALSE}
# IPC por comunidades autónomas (INE, tabla 76136): el análisis completo
# aparece aquí y los datos quedan en la tabla ipc
ipc <- aedv_incluir_dataset("76136_analisis.Rmd")
```
````

Un dataset auxiliar, que no tiene que cumplir los requisitos de AEDV, puede incluirse sin la parte de validación:

````{verbatim, echo=TRUE}
```{r, results='asis', cache=FALSE}
poblacion <- aedv_incluir_dataset("56940_analisis.Rmd", validacion = FALSE)
```
````

En los datasets con varias tablas (EDGAR, CLIMA e INFORME_PISA), la función las devuelve en una lista que se separa a continuación, cada tabla con su nombre:

````{verbatim, echo=TRUE}
```{r, results='asis', cache=FALSE}
clima <- aedv_incluir_dataset("CLIMA_CANARIAS_analisis.Rmd")
clima_obs  <- clima$data   # observaciones mensuales por municipio, 1990-2022
clima_proy <- clima$proy   # proyecciones por escenario, modelo y horizonte
```
````

Es **muy importante** tener en cuenta lo siguiente:

*  La información automática que se genera hay que perfeccionarla añadiendo texto explicativo. 

* Debe quedar claro que la colección de datos utilizada cumple con los requisitos de AEDV

* Es especialmente **importante e indispensable** que todos los conceptos que aparecen en los datasets utilizados estén perfectamente explicados:  contenido del dataset, que se se mide, significado de las variables categóricas y significado de todas las opciones de las variables categóricas especialmente cuando son conceptos técnicos. 

NOTA: ESTA NOTA SE BORRA O SE  PONE ENTRE COMENTARIOS UNA VEZ CUMPLIMENTADO EL APARTADO. 
</div>


## Preparación de los datos

<!--
================================================================================
FASE CRISP-DM 3: PREPARACIÓN DE LOS DATOS
================================================================================
PROPÓSITO: Transformar los datos brutos de la fase anterior en un dataset limpio,
coherente y listo para el modelado, tomando decisiones justificadas en cada paso.

CONTENIDO ESPERADO:

1. DECISIONES DE SELECCIÓN Y FILTRADO
   - ¿Qué variables categóricas o sus opciones se han eliminado? ¿Por qué?
     (irrelevantes para los objetivos, insuficientes observaciones, calidad dudosa...)
   - ¿Qué intervalo temporal se ha seleccionado para el estudio? Justifica la elección.
   - ¿Se han filtrado regiones, grupos o categorías específicos? ¿Por qué?

2. DEFINICIÓN DE LOS ATRIBUTOS COMBINADOS DEL ESTUDIO
   - Expón con claridad y de forma justificada los atributos combinados (cruce de
     variables categóricas) que vas a usar en el análisis.
   - Indica cuántas combinaciones quedan tras el filtrado y si hay combinaciones
     sin datos que haya que tener en cuenta.

3. LIMPIEZA DE DATOS
   - Tratamiento de valores ausentes (NA): ¿se eliminan las filas?, ¿se rellenan
     los huecos de las series por interpolación (na.approx de zoo) o con un
     modelo ARIMA?
   - Tratamiento de outliers: ¿se mantienen, se eliminan o se sustituyen? Justifica
     la decisión con lo que muestran los datos.
   - Para las series temporales, ver la sección "Rellenar huecos en una serie
     temporal y sustituir datos anómalos" del capítulo de series temporales del libro.
   - Corrección de inconsistencias identificadas en la fase anterior.

4. TRANSFORMACIÓN DE DATOS
   - Pivotado de tablas si los datos no eran tidy (pivot_longer, pivot_wider).
   - Cambios de tipo (character → factor, character → Date con as.Date o ymd).
   - Normalización o escalado de variables si procede.
   - Transformaciones matemáticas (logaritmo, raíz cuadrada, Yeo-Johnson...).

5. CREACIÓN DE NUEVAS VARIABLES (feature engineering)
   - Variables derivadas calculadas a partir de las originales.
     Ejemplo: tasa de variación interanual, ratio entre dos variables, acumulados móviles.
   - Variables temporales extraídas de fechas (año, mes, trimestre, día de la semana).

6. COMBINACIÓN DE TABLAS
   - Si usas varias fuentes de datos, describe cómo se han unido (join).
   - Indica la clave de unión y el tipo de join (left, inner, full).
   - Señala si hubo pérdida de observaciones en el join y por qué.

SOBRE LAS GRÁFICAS EN ESTA FASE:
Aquí SÍ se incluyen gráficas que ilustran los datos ya procesados, pero SIN
aplicar todavía los modelos de la fase siguiente.
Tipos de gráficas apropiadas: barras, líneas temporales, circulares, mapas de
calor (heatmaps), mapas coropléticos (leaflet), scatter plots exploratorios.
  - Las primeras gráficas dan una visión general del fenómeno antes de entrar
    en detalles: suele funcionar empezar por la evolución de algunas series
    temporales con facet_wrap.
  - En la Entrega 2 las gráficas son estáticas (ggplot2); en la Entrega 3 se
    pasan TODAS a dinámicas (plotly).
  - Revisa cada gráfica con el recuadro "Algunos errores a evitar en los
    gráficos" del README del proyecto (área "Visualizaciones en la memoria").

SOBRE LAS TABLAS:
Si una tabla tiene demasiadas filas o columnas, recórtala antes de mostrarla
(select() para las columnas relevantes, slice(1:10) o filter() para las filas),
termínala con knitr::kable() y envuelve el chunk en <div class="tabla-scroll-xy">
(con una línea en blanco antes y después del chunk), como se explica en el
README del proyecto.

NOTA SOBRE ITERATIVIDAD (CRISP-DM):
Si durante el Modelado o la Evaluación detectas que necesitas una variable
adicional, un filtrado distinto o una transformación que no hiciste inicialmente,
vuelve a esta sección y documenta el cambio con una nota explícita del tipo:
  "Tras el modelado inicial se detectó que [...], por lo que se añadió/modificó
   el siguiente paso de preparación: [...]"
Esto hace visible la naturaleza iterativa de CRISP-DM y demuestra madurez
metodológica. No lo ocultes: es parte del proceso esperado.

================================================================================
-->




## Modelado

<!--
================================================================================
FASE CRISP-DM 4: MODELADO
================================================================================
PROPÓSITO: Aplicar las técnicas analíticas y modelos estadísticos adecuados
para responder a las preguntas de investigación planteadas en los objetivos.

CONTENIDO ESPERADO:

1. JUSTIFICACIÓN DE LOS MODELOS ELEGIDOS
   - ¿Por qué has elegido estos modelos y no otros?
   - ¿Qué supuestos deben cumplirse para que el modelo sea válido?
     (normalidad, homocedasticidad, ausencia de autocorrelación, etc.)
   - ¿Has verificado previamente que esos supuestos se cumplen en tus datos?

2. DESCRIPCIÓN Y APLICACIÓN DE CADA MODELO
   Usa las técnicas del libro de la asignatura y, cuando existan, las funciones
   de utilidades.R (aedv_...) en vez de programarlas desde cero:

   SERIES TEMPORALES (Entrega 2):
   - Descomposición STL: separa tendencia, estacionalidad y residuo.
   - Modelos ARIMA y STL + ARIMA para el modelado y la predicción
     (aedv_prediccion_arima(), aedv_prediccion_stl_arima()).

   ANÁLISIS DE ATRIBUTOS (Entrega 3):
   - Matriz de correlación (aedv_matriz_correlacion()): relaciones lineales
     entre los atributos.
   - Regresión lineal simple entre dos atributos (lm(), aedv_tabla_lm()) y
     transformación de Yeo-Johnson (aedv_yeo_johnson(), aedv_yeojohnson_lambda())
     cuando mejora el ajuste.
   - PCA (prcomp()): reduce la dimensión y muestra la variabilidad principal.
   - k-means sobre las componentes principales (aedv_kmeans()): agrupa las
     áreas geográficas con un comportamiento parecido.


3. PRESENTACIÓN DE RESULTADOS DEL MODELO
   - Muestra los parámetros del modelo ajustado con su interpretación.
   - Incluye gráficas que ilustren el ajuste del modelo a los datos.
   - Para modelos predictivos, muestra las predicciones junto con los datos reales.

NOTA SOBRE ITERATIVIDAD (CRISP-DM):
Si durante el modelado detectas que los datos necesitan una transformación
adicional, una variable nueva o un filtrado diferente al realizado en la fase
de Preparación, documenta aquí el hallazgo y el motivo del retorno:
  "El diagnóstico de residuos reveló heterocedasticidad, por lo que se aplicó
   transformación logarítmica a la variable Y (ver Preparación, apartado 4)."
Referenciar explícitamente la sección de Preparación donde se realizó el
ajuste hace visible la iteración y mantiene la coherencia del documento.


================================================================================
-->




## Evaluación

<!--
================================================================================
FASE CRISP-DM 5: EVALUACIÓN
================================================================================
PROPÓSITO: Valorar de forma crítica si los modelos desarrollados responden
adecuadamente a las preguntas de investigación y si los resultados son fiables.

CONTENIDO ESPERADO:

1. SERIES TEMPORALES (Entrega 2)
   - Métricas de ajuste del ARIMA: RMSE, MAE y MASE (aedv_arima_accuracy()) y
     desviación típica de los residuos.
   - Tests de validación de los residuos: ¿se comportan como ruido blanco?
     (aedv_tests_residuos()), junto con sus gráficos (ACF, histograma,
     residuos frente al tiempo).
   - ¿Fue necesario usar STL + ARIMA o transformar la serie para mejorar los
     resultados del ARIMA? ¿Por qué?
   - Si lo has usado, compara los métodos con la validación cruzada temporal
     del libro (aedv_cv_arima(), aedv_cv_stl_arima()).

2. ANÁLISIS DE ATRIBUTOS (Entrega 3)
   - Ajustes lineales: calidad del ajuste y análisis de su error
     (aedv_tabla_lm()). ¿La transformación de Yeo-Johnson mejora el ajuste?
   - PCA: ¿qué porcentaje de la varianza explican las primeras componentes?
     ¿Cuántas hacen falta (aedv_pca_n_componentes())? ¿Cómo se interpretan
     a partir de sus loadings?
   - k-means: ¿los grupos obtenidos tienen sentido en el contexto del problema?

3. DISCUSIÓN CRÍTICA DE RESULTADOS
   - ¿El modelo responde satisfactoriamente a las preguntas de investigación?
   - ¿Hay patrones en los residuos que sugieran que el modelo no captura algo?
   - ¿Los resultados son coherentes con lo esperado según la bibliografía?
   - ¿Qué limitaciones tiene el modelo? (sobreajuste, datos insuficientes,
     variables confundidoras no controladas, etc.)

4. COMPARACIÓN CON MÉTODOS ALTERNATIVOS (si procede)
   - Si has probado varios modelos, compara sus métricas en una tabla.
   - Justifica cuál es el modelo final seleccionado y por qué.

CONSEJO: La evaluación honesta, incluyendo las limitaciones, es un signo de
madurez académica. No intentes ocultar resultados insatisfactorios; en cambio,
analiza sus causas y propón mejoras en la sección de Trabajo futuro.

DISTINCIÓN CON LA SECCIÓN DE CONCLUSIONES:
El foco de esta sección es TÉCNICO: métricas numéricas, análisis de residuos,
validación estadística, comparación de modelos. Las preguntas clave son:
  ¿Funciona bien el modelo? ¿Es fiable? ¿Cuáles son sus limitaciones técnicas?
En Conclusiones el foco es INTERPRETATIVO: qué significan los resultados en el
contexto del problema real, si se han alcanzado los objetivos, qué implicaciones
tienen los hallazgos. No repitas aquí el contenido de Conclusiones ni viceversa.


================================================================================
-->



## Despliegue

<!--
================================================================================
FASE CRISP-DM 6: DESPLIEGUE
================================================================================
PROPÓSITO: Comunicar los resultados del proyecto de forma accesible y útil,
tanto a través de esta memoria como mediante el cuadro de mandos interactivo.

CONTENIDO ESPERADO:

1. ESTA MEMORIA
   - Explica brevemente las decisiones de diseño tomadas al redactar la memoria:
     estructura, nivel de detalle, público objetivo, decisiones de visualización.
   - Menciona si se ha optado por un CSS personalizado, numeración de secciones,
     o cualquier otro elemento de formato relevante.

2. CUADRO DE MANDOS (Dashboard)
   ESTE ES EL ELEMENTO MÁS IMPORTANTE DE ESTA SECCIÓN.
   Se describe A NIVEL DE DISEÑO (qué muestra, para quién y cómo se usa), no
   el código con el que está programado. Debes describir con detalle:

   a) MOTIVACIÓN DEL DISEÑO:
      - ¿A qué audiencia va dirigido el dashboard? (expertos, público general,
        decisores, estudiantes...)
      - ¿Qué preguntas debe poder responder el usuario al interactuar con él?
      - ¿Por qué has elegido esa estructura (pestañas, sidebar, valueBoxes...)?

   b) DESCRIPCIÓN DE LOS APARTADOS:
      Por cada pestaña o panel del dashboard, describe:
      - Qué visualización contiene y qué muestra.
      - Qué widgets de interacción incluye (selectInput, sliderInput, dateRangeInput...)
        y qué permite controlar cada uno.
      - Qué insight principal se obtiene de ese panel.

   RECUERDA: En la Entrega 3 el cuadro de mandos debe estar desplegado y
   accesible en el servidor del DIS en el momento de la corrección. Incluye el
   enlace actualizado al inicio de este documento.


================================================================================
-->


# Conclusiones y trabajo futuro

## Conclusiones

<!--
================================================================================
SECCIÓN: CONCLUSIONES
================================================================================
PROPÓSITO: Sintetizar de forma clara y honesta los hallazgos más relevantes
del proyecto, conectándolos directamente con los objetivos planteados.

ESTRUCTURA RECOMENDADA:

1. REVISIÓN DE OBJETIVOS
   Para cada objetivo definido en la Introducción, indica:
   - ¿Se ha alcanzado? ¿Parcialmente? ¿No se ha podido alcanzar?
   - ¿Cuál es el resultado concreto obtenido para ese objetivo?
   Esta correspondencia explícita objetivo→resultado es el núcleo de las conclusiones.
   Responde también, una a una, a las preguntas de investigación (P1, P2...)
   planteadas en "Objetivos", con la respuesta concreta que dan tus datos.

2. HALLAZGOS MÁS RELEVANTES
   - Los 3-5 resultados más importantes del análisis, explicados en términos
     comprensibles para alguien que no haya leído el resto del documento.
   - Evita repetir detalles técnicos del modelado; céntrate en el significado
     e implicaciones de los resultados.

3. LIMITACIONES DEL TRABAJO
   - Reconoce honestamente las restricciones del estudio:
     tamaño de muestra, período temporal limitado, variables no disponibles,
     supuestos del modelo no verificables, posibles sesgos en los datos, etc.
   - Un reconocimiento honesto de las limitaciones aumenta la credibilidad
     del trabajo, no la disminuye.

ERRORES FRECUENTES A EVITAR:
  - Introducir resultados nuevos que no aparecen en el Desarrollo.
  - Escribir generalidades que no se derivan de tu análisis concreto.
  - Copiar texto generado por IA sin contrastarlo con tus resultados reales.
  - Omitir las limitaciones o presentarlas de forma superficial.
  - Repetir el contenido técnico de Evaluación (métricas, residuos, validación):
    aquí el foco es el SIGNIFICADO de los resultados, no su validación técnica.

DISTINCIÓN CON LA SECCIÓN DE EVALUACIÓN:
Evaluación responde a: ¿funciona bien el modelo estadísticamente?
Conclusiones responde a: ¿qué nos dice el modelo sobre el problema real?
    Ejemplo: Evaluación → "El RMSE del modelo ARIMA es 2.3 sobre el conjunto test."
             Conclusiones → "La evolución de X muestra una tendencia creciente
                             que confirma la hipótesis planteada en el objetivo 2."


================================================================================
-->




## Trabajo futuro

<!--
================================================================================
SECCIÓN: TRABAJO FUTURO
================================================================================
PROPÓSITO: Identificar las líneas de mejora y extensión del proyecto que no
han podido abordarse en el alcance actual.

CONTENIDO ESPERADO:

1. ASPECTOS PENDIENTES DEL ALCANCE ACTUAL
   - Partes del análisis que quedaron incompletas o que podrían profundizarse.
   - Variables o fuentes de datos que sería valioso incorporar.

2. EXTENSIONES NATURALES DEL PROYECTO
   - Nuevas preguntas de investigación que han surgido a partir de los resultados.
   - Modelos más avanzados que podrían aplicarse con más tiempo o datos.
   - Extensión geográfica o temporal del análisis.

3. APLICACIONES PRÁCTICAS
   - ¿Cómo podría usarse este trabajo en un contexto real?
   - ¿Qué organismo o actor podría beneficiarse de los resultados?

CONSEJO: Cada punto de trabajo futuro debe conectar con una limitación concreta
identificada en las Conclusiones o con un resultado del análisis que abre una
nueva pregunta. Evita propuestas genéricas desconectadas del trabajo realizado.


================================================================================
-->



# Bibliografía {-}

<!--
================================================================================
SECCIÓN: BIBLIOGRAFÍA
================================================================================
INSTRUCCIONES:
Incluye aquí todas las fuentes citadas en el documento. Usa un formato
consistente. 

MÍNIMO RECOMENDADO: 5 referencias de calidad (artículos, informes oficiales,
libros o documentación técnica relevante). Evita citar únicamente páginas web
genéricas o entradas de Wikipedia.

IMPORTANTE: TODAS LAS REFERENCIAS DEBEN EMPEZAR POR UN IDENTIFICADOR ENTRE CORCHETES
CON LAS INICIALES DEL PRIMER APELLIDO DEL AUTOR (O ENTIDAD) Y EL AÑO. TODAS LAS 
REFERENCIAS BIBLIOGRÁFICAS DEBEN APARECER EN ALGÚN LUGAR DEL TEXTO IDENTIFICADAS 
CON SU INDICADOR. Si la referencia es un enlace web hay que añadir las fechas de consulta
================================================================================
-->

[[Al26](https://luisalvarezmat-aedv.share.connect.posit.cloud/)] Álvarez Luis. *Análisis Exploratorio de Datos y Visualización*, posit.cloud, 2026. (diversas consultas entre el Enero Septiembre y Diciembre d 2026)


# Anexo I. Agentes de IA utilizados y organización del trabajo con la IA {-}

<!--
================================================================================
ANEXO: AGENTES DE IA Y ORGANIZACIÓN DEL TRABAJO
================================================================================
PROPÓSITO: Describir la aportación de los agentes IA al desarrollo del proyecto.

NOTA: el uso de la IA para buscar y seleccionar los datasets (peticiones
realizadas, candidatos propuestos y descartados) se describe en detalle en la
sección "Comprensión del negocio". Aquí basta con recogerlo en las tablas y en
la reflexión global, sin repetirlo.
-->

## Herramientas y agentes IA utilizados {-}

<!-- Completa la tabla con las herramientas que hayas usado realmente. -->

| Agente | Coste | Uso principal |
|---|---|---|
| Claude (Sonnet 4.5) | Gratuito | Depuración de código R y redacción de la memoria |
| ChatGPT (GPT-4o) | Gratuito | Consultas conceptuales y explicación de errores |
| GitHub Copilot | Licencia estudiante | Autocompletado de código en RStudio |
| Gemini | Gratuito | Búsqueda de información sobre el dominio del proyecto |

*Sustituye estas filas por las herramientas que hayas usado realmente. En "Uso principal" basta una frase breve por agente.*

## Organización del trabajo con la IA en AEDV {-}

### Reflexión sobre el uso de la IA {-}

<!--
Redacta unos párrafos que expliquen CÓMO has trabajado realmente con la IA en la asignatura AEDV,
no solo en el proyecto personal sino en cualquier aspecto del desarrollo de la asignatura. Apóyate en estas preguntas:

- ORGANIZACIÓN. ¿Has creado "proyectos" o contextos persistentes en el agente?
  ¿Cuántos y con qué criterio (por fase CRISP-DM, por tipo de tarea, uno solo)?
  ¿Adjuntaste datasets, código o la memoria para que el agente los tuviera a mano?
  ¿Cómo separabas o retomabas las conversaciones cuando se hacían muy largas?

- FLUJO DE TRABAJO. ¿Cuándo recurrías a la IA: antes, durante o después de
  trabajar en R? ¿Cuál era tu proceso habitual (pregunta abierta → revisión →
  adaptación, o algún otro)?

- VERIFICACIÓN Y CRITERIO PROPIO. ¿Cómo comprobabas que el código o el resultado
  eran correctos? ¿Qué decidiste NO delegar y hacer por ti mismo, y por qué?
  Esta es la parte más importante: demuestra que entiendes lo que entregas.

- LÍMITES. El uso de la IA tiene dos límites: entender todo lo que entregas
  y usar solo las librerías que aparecen en el libro de la asignatura, con
  un código comprensible teniendo en cuenta el contenido y el enfoque de la
  asignatura. ¿Cómo te aseguraste de respetarlos? ¿Qué hiciste cuando la IA
  te propuso un paquete que no está en el libro o un código que se alejaba
  de lo visto en la asignatura? Cuando `utilidades.R` ya tenía una función
  para lo que necesitabas, ¿le pediste a la IA que la usara en vez de
  programar algo equivalente desde cero?

- VALORACIÓN. ¿Qué te aportó organizarte así frente a conversaciones sueltas?
  ¿Qué dificultades encontraste? ¿Qué cambiarías si empezaras de nuevo?
-->

*Escribe aquí tu reflexión.*

### Productividad por fase {-}

<!--
Rellena una fila por fase en la que hayas usado la IA. En "Comentario" resume en
una o dos frases para qué te sirvió (y para qué no). En "Productividad" indica un
factor multiplicativo ESTIMADO de cuánto crees que aumentó tu productividad en esa
fase respecto a haberla hecho sin ninguna IA: ×1 = igual que sin IA, ×2 = el doble
de rápido/productivo, ×0,8 = te ralentizó. Es una estimación subjetiva y honesta,
no un dato medido; justifica los valores extremos en el comentario.
-->

| Fase o tema | Comentario | Productividad |
|---|---|:--:|
| Familiarización con la asignatura | Aclarar conceptos y dudas del temario | ×4 |
| Realización de ejercicios | Explicación de errores y pistas, sin copiar la solución | ×1,5 |
| Selección del tema del proyecto | Exploración de ideas y validación de datasets | ×1,5 |
| Procesado de datos (`dplyr`) | Filtros, `join`s y reestructuración de las tablas | ×2 |
| Gráficas estáticas con `ggplot2` | Ajuste de estética, escalas y `facet_wrap` | ×3 |
| Series temporales (`fpp3`) | Descomposición y modelos ARIMA | ×2,5 |
| Análisis de atributos | Correlación, PCA y transformación Yeo-Johnson | ×2,5 |
| Visualización dinámica | Conversión a `plotly`/`leaflet` y ajuste de tooltips | ×3 |
| Desarrollo del dashboard | Estructura de `shiny`/`flexdashboard` y reactividad | ×4 |
| Redacción de la memoria | Redacción ODS | ×10 |
| Redacción de la memoria | Redacción de estado del arte | ×5 |
| Redacción de la memoria | Revisión de estilo y coherencia del texto | ×2 |

*El listado de fases/temas y los factores son orientativos, sustituyelos en base a tu experiencia real.*



****

<br> 

# Anexo II. Seguimiento temporal de actividades del proyecto {-}

<!--
================================================================================
ANEXO: SEGUIMIENTO TEMPORAL DE ACTIVIDADES
================================================================================
INSTRUCCIONES PARA CONFIGURAR EL SEGUIMIENTO:

PASO 1 - OBTENER LA GOOGLE SHEET:
  Descarga la plantilla de seguimiento desde el Campus Virtual. Abre la plantilla 
  en el navegador dándote de alta en una cuenta tuya de Google. Realiza 
  una copia local del archivo (menú superior Archivo -> "Hacer una copia"). 
  

PASO 2 - COMPARTIR EN MODO LECTURA:
  En Google Sheets: Archivo → Compartir → Compartir con otras personas
  → Cambiar a "Cualquier persona con el enlace puede ver" → Copiar enlace.

PASO 3 - ACTUALIZAR EL ENLACE:
  Sustituye la URL del read_sheet() de abajo por el enlace compartido que
  acabas de copiar.

OBLIGACIONES DE REGISTRO:
  ✓ ES OBLIGATORIO tener este apartado actualizado en CADA entrega del proyecto.
  ✓ Registra cada sesión de trabajo EN EL MOMENTO de realizarla, no después.
  ✓ En una entrega NO pueden aparecer sesiones con fechas anteriores a la
    entrega anterior. Cada entrega es un corte temporal verificable.

ESTRUCTURA DE LA GOOGLE SHEET (columnas esperadas):
  - ACTIVITY : categoría de la actividad (debe coincidir con los valores del
               vector "actividades" definido en el chunk de abajo)
  - START     : fecha de inicio de la sesión (formato YYYY-MM-DD)
  - MINUTES   : duración de la sesión en minutos
  - NOTES     : descripción breve de lo realizado (opcional pero recomendable)
================================================================================
-->

```{r seguimiento-lectura, cache=FALSE}
gs4_deauth()
SeguimientoActividadesProyecto <- read_sheet(
  'https://docs.google.com/spreadsheets/d/1w07FWlS3cwTad0mZa_Tanl-LL32IPEQXUqNPXmslpSs/edit?usp=sharing'
) |>
  as_tibble()
```

**TOTAL HORAS TRABAJADAS EN EL PROYECTO:** `r round(sum(SeguimientoActividadesProyecto$MINUTES / 60), digits = 2)`

## Horas trabajadas por actividad {-}



```{r seguimiento-por-actividad, cache=FALSE}
# Vector con el orden canónico de las actividades (debe coincidir exactamente
# con los valores registrados en la columna ACTIVITY de la Google Sheet)
actividades <- c(
  "Introducción",
  "Aportaciones del trabajo",
  "Comprensión del negocio",
  "Comprensión de los datos",
  "Preparación de los datos",
  "Modelado",
  "Evaluación",
  "Despliegue",
  "Conclusiones y Trabajo Futuro",
  "Otros"
)

p <- SeguimientoActividadesProyecto |>
  group_by(ACTIVITY) |>
  summarise(
    HORAS = round(sum(MINUTES) / 60, digits = 1)
  ) |>
  mutate(ACTIVITY = factor(ACTIVITY, levels = actividades)) |>
  ggplot(aes(ACTIVITY, HORAS)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = HORAS), size = 3, colour = "blue", nudge_y = 0.2) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(
    x     = "",
    y     = "HORAS TRABAJADAS",
    title = ""
  )

ggplotly(p)
```


## Horas trabajadas por semana {-}



```{r seguimiento-por-semana, cache=FALSE}
p <- SeguimientoActividadesProyecto |>
  mutate(
    semana_inicio = floor_date(as.Date(START), unit = "week", week_start = 1)
  ) |>
  group_by(semana_inicio) |>
  summarise(
    HORAS = round(sum(MINUTES) / 60, digits = 1)
  ) |>
  arrange(semana_inicio) |>
  mutate(
    etiqueta = format(semana_inicio, "%d %b")  # ej. "03 feb", "10 feb"
  ) |>
  mutate(etiqueta = factor(etiqueta, levels = etiqueta)) |>  # preserva orden cronológico en el eje X
  ggplot(aes(etiqueta, HORAS)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = HORAS), size = 3, colour = "blue", nudge_y = 0.2) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(
    x     = "FECHA INICIO SEMANA",
    y     = "HORAS TRABAJADAS",
    title = ""
  )

ggplotly(p)
```


## Desglose detallado por sesión de trabajo {-}


```{r seguimiento-tabla, cache=FALSE}
SeguimientoActividadesProyecto |>
  datatable(
    options = list(
      scrollX = TRUE,    # Scroll horizontal si la tabla es muy ancha
      scrollY = "400px", # Scroll vertical con altura fija
      paging  = FALSE    # Sin paginación: todas las filas visibles con scroll
    )
  )
```
