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.
datos <- read_csv("Vista_Filtrada_Asset_Inventory_20251115.csv", show_col_types = FALSE)
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"))
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")
| 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 |
\[ 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)
| 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 |
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")
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")
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")
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
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étrica | Valor |
|---|---|
| RMSE | 38748.787842 |
| MAE | 4492.085514 |
| MAPE (%) | 2555.397975 |
| R² en prueba | 0.698056 |
A partir del análisis descriptivo, gráfico y estadístico, se obtienen las siguientes conclusiones principales:
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.