Introducción

El presente informe tiene como propósito analizar cómo diferentes características estructurales de los conjuntos de datos publicados en datos.gov.co pueden influir en el número de Vistas que dichos recursos reciben. La motivación para este estudio surge de la necesidad de comprender qué factores aumentan la visibilidad o el interés por parte de los usuarios, lo cual es clave para instituciones que desean mejorar la difusión y uso de sus datos abiertos.

Se emplea la técnica de regresión múltiple, la cual permite determinar el efecto de varias variables independientes de manera simultánea. En este análisis se usan cuatro variables numéricas:

Variable dependiente (Y): - Vista

Variables independientes (X): - descargas - Número de Filas - Número de Columnas

Cada una aporta información diferente: las descargas reflejan interacción directa del usuario; el número de filas sugiere tamaño del dataset; y el número de columnas expresa complejidad o riqueza de atributos., la cual permite determinar el efecto de varias variables independientes de manera simultánea. En este análisis se usan cuatro variables numéricas en total**: Vistas (variable dependiente), Descargas, Número de Filas y Número de Columnas. Cada una aporta información diferente: las descargas reflejan interacción directa del usuario; el número de filas sugiere tamaño del dataset; y el número de columnas expresa complejidad o riqueza de atributos. Además del modelo estadístico, se presentan gráficos exploratorios que ayudan a visualizar patrones, relaciones lineales, posibles outliers y tendencias. Estas visualizaciones no solo complementan el análisis cuantitativo, sino que también permiten identificar comportamientos que podrían no ser evidentes únicamente con los coeficientes del modelo.

Finalmente, el informe incluye un diagnóstico del modelo para verificar si los supuestos estadísticos se cumplen y si la regresión lineal es adecuada para los datos observados.

Carga de datos

datos <- read_csv("Vista_Filtrada_Asset_Inventory_20251115.csv", show_col_types = FALSE)

Selección y limpieza de variables numéricas

datos2 <- datos %>%
select(Vistas, Descargas, `Número de Filas`, `Número de Columnas`) %>%
na.omit()


knitr::kable(knitr::kable(summary(datos2), format = "latex", caption = "Resumen de variables numéricas") %>%
kable_styling(latex_options = c("hold_position", "scale_down")), caption = "Resumen de variables numéricas", format = "latex", booktabs = TRUE)
# Ajuste del modelo de regresión múltiple
modelo <- lm(Vistas ~ Descargas + `Número de Filas` + `Número de Columnas`, data = datos2)


# Tabla bonita de coeeficientes
tidy(modelo) %>%
kable(format = "latex", booktabs = TRUE, caption = "Coeficientes del modelo de regresión múltiple") %>%
kable_styling(latex_options = c("hold_position", "striped", "scale_down"))

Estadísticos descriptivos

En esta sección se presentan medidas importantes como la media, mediana, mínimo, máximo y cuartiles para cada una de las cuatro variables numéricas utilizadas en el análisis. Estas estadísticas permiten comprender mejor la distribución general de los datos antes de ajustar el modelo.

desc <- describe(datos2)[, c("n","mean","median","sd","min","max")]

kable(desc, format = "html", caption = "Estadísticos Descriptivos") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "center"
  ) %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2:6, width = "10em")
Estadísticos Descriptivos
n mean median sd min max
Vistas 8622 3831.72106 404 4.471504e+04 4 2299480
Descargas 8622 794.15565 104 1.278906e+04 0 1002090
Número de Filas 8622 340404.58154 185 5.289661e+06 0 286796310
Número de Columnas 8622 12.90791 9 1.254343e+01 1 402

Ecuación general del modelo

\[ Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k + \varepsilon \] # Ecuación del modelo adaptadas a las variables El modelo estimado tiene la forma:

\[ Vistas = \beta_0 + \beta_1 \cdot Descargas + \beta_2 \cdot NumeroDeFilas + \beta_3 \cdot NumeroDeColumnas + \varepsilon \]


## ANOVA
El ANOVA muestra que todas las variables del modelo (Descargas, Número de Filas y Número de Columnas) presentan valores p menores a 0.05, por lo que se consideran estadísticamente significativas. La variable Descargas destaca con un F de 6512.899, indicando un fuerte aporte al modelo.

Dado que el modelo presenta valores F altos y p muy bajos, se rechaza la hipótesis nula y se concluye que el modelo de regresión múltiple es significativo en su conjunto. Esto confirma que las variables independientes explican una parte importante de la variabilidad de la variable dependiente.


```r
anova(modelo) %>%
  kable(format = "html", caption = "ANOVA del Modelo de Regresión Múltiple") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
ANOVA del Modelo de Regresión Múltiple
Df Sum Sq Mean Sq F value Pr(>F)
Descargas 1 7.400791e+12 7.400791e+12 6512.899209 0.0000000
Número de Filas 1 1.080984e+10 1.080984e+10 9.512954 0.0020467
Número de Columnas 1 3.265361e+10 3.265361e+10 28.736079 0.0000001
Residuals 8618 9.792876e+12 1.136328e+09 NA NA

Gráficos

Relación entre Descargas y Vistas

Este gráfico permite evaluar si existe una asociación directa entre el número de descargas y el número de vistas de un dataset. Cada punto representa un conjunto de datos individual. Una tendencia ascendente en la línea de regresión indica que, a medida que las descargas aumentan, las vistas también tienden a incrementarse. Esto sugiere que los usuarios podrían estar tanto visualizando como descargando los conjuntos de datos con mayor frecuencia.

ggplot(datos2, aes(x = Descargas, y = Vistas)) +
geom_point(size = 2, alpha = 0.6) +
geom_smooth(method = "lm", linewidth = 1.2, se = TRUE) +
theme_minimal(base_size = 13) +
theme(panel.grid.minor = element_blank(),
plot.title = element_text(face = "bold")) +
ggtitle("Relación entre Descargas y Vistas") +
geom_point() +
geom_smooth(method = "lm")

Relaciones adicionales

Relación entre Número de Filas y Vistas

Este gráfico permite observar si datasets más extensos en términos de número de filas atraen más vistas. Una posible explicación de esta relación sería que conjuntos más grandes podrían considerarse más completos o útiles, generando mayor interés.

ggplot(datos2, aes(x = `Número de Filas`, y = Vistas)) +
geom_point(size = 2, alpha = 0.6) +
geom_smooth(method = "lm", linewidth = 1.2, se = TRUE) +
theme_minimal(base_size = 13) +
theme(panel.grid.minor = element_blank(),
plot.title = element_text(face = "bold")) +
ggtitle("Relación entre Número de Filas y Vistas") +
geom_point() + geom_smooth(method = "lm")

Relación entre Número de Columnas y Vistas

Aquí se analiza si el número de columnas que refleja la complejidad estructural o cantidad de atributos disponibles está asociado con la cantidad de vistas. Una tendencia positiva podría indicar que datasets más detallados capturan mejor la atención de los usuarios.

ggplot(datos2, aes(x = `Número de Columnas`, y = Vistas)) +
geom_point(size = 2, alpha = 0.6) +
geom_smooth(method = "lm", linewidth = 1.2, se = TRUE) +
theme_minimal(base_size = 13) +
theme(panel.grid.minor = element_blank(),
plot.title = element_text(face = "bold")) +
ggtitle("Relación entre Número de Columnas y Vistas") +
geom_point() + geom_smooth(method = "lm")

Diagnóstico del modelo

El diagnóstico del modelo es esencial para evaluar si la regresión lineal es apropiada para nuestros datos. Entre los elementos revisados se encuentran:

plot(modelo, which = 1)

plot(modelo, which = 2)

plot(modelo, which = 3)

plot(modelo, which = 5)

##Muestreo aleatorio simple

Para seleccionar una porción representativa del conjunto de datos, se aplicó un muestreo aleatorio simple (MAS). Este método garantiza que todas las observaciones tengan la misma probabilidad de ser elegidas, evitando sesgos en la selección. En este caso, se tomó el 10% de los datos, permitiendo analizar una muestra manejable y representativa del total.

# ============================================
# Sección: Muestreo aleatorio simple
# ============================================

set.seed(123)
muestra <- datos2[sample(1:nrow(datos2), size = 0.10 * nrow(datos2)), ]

# Mostrar primeras filas de la muestra
head(muestra)
## # A tibble: 6 × 4
##   Vistas Descargas `Número de Filas` `Número de Columnas`
##    <dbl>     <dbl>             <dbl>                <dbl>
## 1   2848       394               130                    7
## 2   1186       493            460970                   15
## 3    262        65               103                   13
## 4    135        60                63                    8
## 5   4278       782             32260                   15
## 6   1255       180               187                    6

Análisis de entrenamiento y prueba

Con el fin de evaluar la capacidad predictiva del modelo, los datos se dividieron en dos grupos: 70% para entrenamiento y 30% para prueba. Con el conjunto de entrenamiento se ajustó el modelo de regresión, y luego se generaron predicciones sobre los datos de prueba. Finalmente, se calcularon métricas como RMSE, MAE, MAPE y R² en prueba, que permiten determinar qué tan bien predice el modelo valores nuevos de la variable Vistas.

# ------------------------------
# 1. División de datos
# ------------------------------
set.seed(123)
indice <- sample(1:nrow(datos2), size = 0.7 * nrow(datos2))

train <- datos2[indice, ]
test  <- datos2[-indice, ]

# ------------------------------
# 2. Entrenar el modelo en training
# ------------------------------
modelo_train <- lm(Vistas ~ ., data = train)

# ------------------------------
# 3. Predicciones en datos de prueba
# ------------------------------
predicciones <- predict(modelo_train, newdata = test)

# ------------------------------
# 4. Métricas
# ------------------------------
RMSE <- sqrt(mean((test$Vistas - predicciones)^2))
MAE <- mean(abs(test$Vistas - predicciones))
MAPE <- mean(abs((test$Vistas - predicciones) / test$Vistas)) * 100
R2_test <- cor(test$Vistas, predicciones)^2

# ------------------------------
# 5. Tabla de métricas
# ------------------------------
metricas <- data.frame(
  Métrica = c("RMSE", "MAE", "MAPE (%)", "R² en prueba"),
  Valor = c(RMSE, MAE, MAPE, R2_test)
)

kable(metricas, format = "html", caption = "Métricas del Modelo en Datos de Prueba") %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE)
Métricas del Modelo en Datos de Prueba
Métrica Valor
RMSE 38748.787842
MAE 4492.085514
MAPE (%) 2555.397975
R² en prueba 0.698056

Conclusiones

A partir del análisis descriptivo, gráfico y estadístico, se obtienen las siguientes conclusiones principales:

  • Las variables utilizadas muestran diferentes niveles de relación con Vistas, siendo Descargas usualmente la más asociada, lo que concuerda con la expectativa de que los datasets más descargados también suelen ser más vistos.
  • El modelo de regresión múltiple explica una parte significativa de la variabilidad en Vistas, lo cual indica que estas variables estructurales sí influyen en la visibilidad del recurso.
  • El diagnóstico del modelo muestra información relevante sobre la calidad del ajuste. En caso de identificar heterocedasticidad o no normalidad en los residuos, se podría considerar aplicar transformaciones como logaritmos o escalamientos.
  • Las gráficas confirman las tendencias generales e indican la presencia de posibles valores extremos, que podrían investigarse individualmente.
  • Se recomienda incluir otras variables disponibles en el portal, como fecha de actualización, entidad publicadora, categoría del recurso o tipo de archivo, para construir modelos más completos y robustos.

En general, este análisis demuestra que el comportamiento de las vistas puede modelarse mediante características estructurales del dataset, lo que abre la puerta a optimizar la gestión y publicación de datos abiertos en Colombia: Las variables numéricas disponibles permiten construir un modelo válido, El modelo explica una parte significativa de la variación en Vistas, Se recomienda evaluar transformaciones o agregar más variables si se desea mejorar el ajuste.