Código
rm(list=ls())
# Librerías necesarias
require(tidyverse)
require(ggfortify)
require(plotly)
require(kableExtra)
require(knitr)
require(devtools)
options(scipen = 999)
Presentamos un ejemplo de modelos de regresión a partir de datos reales de clima y de uso del sistema de bicicletas Ecobici de la Ciudad Autónoma de Buenos Aires.
A continuación, se muestran algunos posibles ajustes de regresión que vinculan la cantidad de usuarios del sistema Ecobici por día en función de ciertas variables climáticas.
rm(list=ls())
# Librerías necesarias
require(tidyverse)
require(ggfortify)
require(plotly)
require(kableExtra)
require(knitr)
require(devtools)
options(scipen = 999)
En el dataset climabici
de la librería datosIC
se incluyen datos de viajes con duración entre 5 y 60 minutos, cualquier día de la semana, durante el año 2022. A continuación, se muestran 10 datos de dicho conjunto.
::install_github("daniellaparada/datosIC")
devtoolslibrary(datosIC)
<- climabici datos
fecha | n | tavg | tmin | tmax | prcp | dia | tipo_dia | lluvia |
---|---|---|---|---|---|---|---|---|
2022-01-01 | 2233 | 24.8 | 20.7 | 29.1 | 2.3 | sábado | Fin de semana | Llueve |
2022-01-02 | 3162 | 24.7 | 19.2 | 29.7 | 1.5 | domingo | Fin de semana | Llueve |
2022-01-03 | 7389 | 27.9 | 24.1 | 31.7 | 6.7 | lunes | Lunes a viernes | Llueve |
2022-01-04 | 7215 | 28.2 | 24.8 | 32.6 | 3.9 | martes | Lunes a viernes | Llueve |
2022-01-05 | 7611 | 21.7 | 16.7 | 31.7 | 0.0 | miércoles | Lunes a viernes | No llueve |
2022-01-06 | 8336 | 22.1 | 18.8 | 25.7 | 0.0 | jueves | Lunes a viernes | No llueve |
2022-01-07 | 8079 | 23.8 | 20.6 | 26.6 | 0.0 | viernes | Lunes a viernes | No llueve |
2022-01-08 | 3529 | 24.4 | 21.8 | 27.1 | 0.0 | sábado | Fin de semana | No llueve |
2022-01-09 | 3453 | 24.9 | 20.9 | 29.5 | 0.0 | domingo | Fin de semana | No llueve |
2022-01-10 | 7825 | 26.9 | 22.8 | 31.3 | 0.0 | lunes | Lunes a viernes | No llueve |
Como puede verse en el siguiente gráfico, la cantidad de registros de viajes de esa duración varía en función de la temperatura del día, de las precipitaciones, y de si se trata de un día de la semana (lunes a viernes) o fin de semana (sábado y domingo), entre otros.
El sistema de Ecobici es un sistema público de transporte y, como tal, es razonable que su uso sea intensivo durante los días hábiles, lo que explica las tendencias separadas que se ven en el gráfico anterior. Sin embargo, en el conjunto de datos no se tiene información de feriados, por lo que hay algunas observaciones del grupo verde (lunes a viernes) que se observan próximos a los del grupo rojo (fines de semana). También hay fines de semana que coinciden con feriados en los que típicamente hay menos movimiento; y también ocurre lo contrario: fines de semana de uso atípico, como el de aquel domingo 18 de diciembre de 2022 en que Argentina se coronó campeón Mundial, y cuya observación, aunque de color rojo (domingo), se ubica dentro de la nube de puntos verdes.
El tamaño de los puntos del gráfico anterior es proporcional al nivel de precipitación (en mm) del día. Sin embargo, una observación (27/02/22) registra una precipitación tan alta (más de 240 mm) que limita la posibilidad de apreciar qué ocurre, en general, cuando llueve y las lluvias no son tan extremas en términos de precipitación acumulada (acá una noticia al respecto).
fecha | n | tavg | tmin | tmax | prcp | dia | tipo_dia | lluvia |
---|---|---|---|---|---|---|---|---|
2022-02-27 | 1573 | 23.1 | 21.8 | 25.6 | 246.9 | domingo | Fin de semana | Llueve |
Para lo que sigue, removemos esa observación.
<- datos[-58, ]
datos ggplotly(
ggplot(data = datos, aes(
x = tavg,
y = n,
key = fecha,
size = prcp,
color = tipo_dia
+
)) labs(x = "Temperatura media", y = "Cantidad de usos de Ecobici") +
geom_point() +
scale_color_manual(values = c("Fin de semana" = "deeppink2", "Lunes a viernes" = "dodgerblue2")) +
geom_smooth(method = "lm",
formula = y ~ poly(x, 2)) +
theme_classic(),
source = "select",
tooltip = c("key")
)
En efecto, los puntos más grandes de cada “nube” de color se encuentran ubicados por debajo de la tendencia general del resto de los puntos de su clase. Es decir, los días con mayor nivel de precipitación, la cantidad de usos del sistema de Ecobici se reduce notablemente, tanto para días hábiles como fines de semana. En particular, las tendencias por tipo de día se observan más “limpias” cuando se filtra por días en los que no se registran precipitaciones, como se observa a continuación.
ggplotly(
ggplot(
data = filter(datos, lluvia == "No llueve"),
aes(
x = tavg,
y = n,
key = fecha,
color = tipo_dia
)+
) labs(x = "Temperatura media", y = "Cantidad de usos de Ecobici") +
geom_point() +
scale_color_manual(values = c("Fin de semana" = "deeppink2", "Lunes a viernes" = "dodgerblue2")) +
geom_smooth(method = "lm",
formula = y ~ poly(x, 2)) +
theme_classic(),
source = "select",
tooltip = c("key")
)
Se incorpora la variable de precipitaciones (prcp
) además de la temperatura (tavg
) a un modelo de regresión para predecir la cantidad de bicicletas utilizadas por día (n
). En esta primera exploración, no se distingue por tipo de día (tipo_dia
).
= lm(n ~ tavg + prcp, data = datos) fitlm
Call:
lm(formula = n ~ tavg + prcp, data = datos)
Residuals:
Min 1Q Median 3Q Max
-7328.4 -3839.4 707.9 3262.7 5908.4
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6737.93 671.79 10.030 < 0.0000000000000002 ***
tavg 83.27 36.56 2.278 0.02333 *
prcp -116.44 39.00 -2.986 0.00302 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3677 on 359 degrees of freedom
Multiple R-squared: 0.03235, Adjusted R-squared: 0.02696
F-statistic: 6.001 on 2 and 359 DF, p-value: 0.002733
El coeficiente estimado para la variable del nivel de precipitación es \(-116.44\), lo que sugiere que el incremento en el nivel de lluvia hace disminuir la cantidad de bicicletas que se usan en un día, razonablemente con lo esperado y observado.
Lo contrario ocurre con la temperatura, cuyo coeficiente estimado es \(83.27\), que sugiere que el aumento de temperatura incrementa el uso del sistema Ecobici.
Para lo que sigue, trabajamos con una reducción inicial de los datos a los días “lluviososo y templados”, es decir, a las observaciones que registran precipitación no nula y temperatura media inferior a 25°, e incorporamos la variable de precipitaciones en un modelo de regresión múltiple.
<- filter(datos,
datosfilt == "Llueve",
lluvia < 25)
tavg ggplotly(
ggplot(data = datosfilt, aes(
x = tavg,
y = n,
key = fecha,
size = prcp,
color = tipo_dia
+
)) labs(x = "Temperatura media", y = "Cantidad de usos de Ecobici") +
geom_point() +
scale_color_manual(values = c("Fin de semana" = "deeppink2", "Lunes a viernes" = "dodgerblue2")) +
geom_smooth(method = "lm",
formula = y ~ x) +
theme_classic(),
source = "select",
tooltip = c("key")
)
<- filter(datos,
datosfilt == "Llueve",
lluvia == "Lunes a viernes",
tipo_dia < 25)
tavg = lm(n ~ tavg + prcp, data = datosfilt)
fitlm summary(fitlm)
Call:
lm(formula = n ~ tavg + prcp, data = datosfilt)
Residuals:
Min 1Q Median 3Q Max
-6996.6 -1537.5 -29.4 2145.9 4274.0
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6376.65 1422.03 4.484 0.0000386 ***
tavg 186.20 80.94 2.301 0.0253 *
prcp -102.49 46.93 -2.184 0.0334 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2610 on 54 degrees of freedom
Multiple R-squared: 0.1259, Adjusted R-squared: 0.09356
F-statistic: 3.89 on 2 and 54 DF, p-value: 0.0264
<- filter(datos,
datosfilt == "Llueve",
lluvia == "Fin de semana",
tipo_dia < 25)
tavg
= lm(n ~ tavg + prcp, data = datosfilt)
fitlm summary(fitlm)
Call:
lm(formula = n ~ tavg + prcp, data = datosfilt)
Residuals:
Min 1Q Median 3Q Max
-1735.57 -607.12 -54.45 517.62 1882.70
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3611.0469 908.5880 3.974 0.000691 ***
tavg 0.0722 48.7403 0.001 0.998832
prcp -64.1289 24.7465 -2.591 0.017032 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 904 on 21 degrees of freedom
Multiple R-squared: 0.2635, Adjusted R-squared: 0.1934
F-statistic: 3.757 on 2 and 21 DF, p-value: 0.04028
Para una primera evaluación de estos modelos, buscamos predecir la cantidad de usos del sistema Ecobici para un día de semana, con temperatura media de 24° y con un nivel de precipitaciones de 5 mm.
tavg | prcp | tipo_dia |
---|---|---|
24 | 5 | Lunes a viernes |
Ajustamos diferentes modelos de acuerdo con la exploración inicial y vemos las predicciones y sus intervalos de confianza de nivel \(95\%\).
<- filter(datos,
datosfilt == "Llueve",
lluvia == "Lunes a viernes",
tipo_dia < 25)
tavg
<- lm(n ~ 1, data = datos)
m1 <- lm(n ~ 1, data = datosfilt)
m2 <- lm(n ~ tavg, data = datos)
m3 <- lm(n ~ tavg, data = datosfilt)
m4 <- lm(n ~ tavg + prcp, data = datos)
m5 <- lm(n ~ tavg + prcp, data = datosfilt)
m6
<- rbind(
predichos predict(m1, nd, interval = "prediction"),
predict(m2, nd, interval = "prediction"),
predict(m3, nd, interval = "prediction"),
predict(m4, nd, interval = "prediction"),
predict(m5, nd, interval = "prediction"),
predict(m6, nd, interval = "prediction")
)
<- cbind(predichos, predichos[, 3] - predichos[, 2])
predichos
rownames(predichos) <- c(
"Modelo 1: Todos los datos -> mean(n)",
"Modelo 2: LaV, lluvia, <25° -> mean(n)",
"Modelo 3: Todos los datos -> tavg",
"Modelo 4: LaV, lluvia, <25° -> tavg",
"Modelo 5: Todos los datos -> tavg + prcp",
"Modelo 6: LaV, lluvia, <25° -> tavg + prcp"
)
colnames(predichos) <- c("Pred", "linf", "lsup", "long")
::kable(data.frame(predichos), caption = "Predicciones con diferentes ajustes.") knitr
Pred | linf | lsup | long | |
---|---|---|---|---|
Modelo 1: Todos los datos -> mean(n) | 8020.412 | 679.5616 | 15361.26 | 14681.70 |
Modelo 2: LaV, lluvia, <25° -> mean(n) | 9008.351 | 3469.1432 | 14547.56 | 11078.42 |
Modelo 3: Todos los datos -> tavg | 8408.683 | 1075.0282 | 15742.34 | 14667.31 |
Modelo 4: LaV, lluvia, <25° -> tavg | 9844.809 | 4300.5957 | 15389.02 | 11088.43 |
Modelo 5: Todos los datos -> tavg + prcp | 8154.161 | 897.8224 | 15410.50 | 14512.68 |
Modelo 6: LaV, lluvia, <25° -> tavg + prcp | 10333.054 | 4948.6154 | 15717.49 | 10768.88 |
Como es de esperar, el modelo que da lugar a un intervalo de predicción de menor longitud para esta nueva observación es el que incorpora datos de temperatura y precipitaciones, pero que fue construido con el dataset reducido a días de semana, templados y con lluvias.
Buscamos un modelo más versátil y con buena capacidad predictiva. Para lo que sigue, transformamos la variable tipo_dia
en una categórica (finde
) representando por 1 a los días de fin de semana, y por 0, a los días de semana. Trabajamos con el dataset completo.
<- datos %>%
datos_tr mutate(finde = ifelse(tipo_dia == "Lunes a viernes", 0, 1)) %>%
select(c(1, 2, 3, 6, 10))
::kable(datos_tr[1:10, ], caption = "Datos con variable categórica para tipo de día, primeras 10 observaciones.") knitr
fecha | n | tavg | prcp | finde |
---|---|---|---|---|
2022-01-01 | 2233 | 24.8 | 2.3 | 1 |
2022-01-02 | 3162 | 24.7 | 1.5 | 1 |
2022-01-03 | 7389 | 27.9 | 6.7 | 0 |
2022-01-04 | 7215 | 28.2 | 3.9 | 0 |
2022-01-05 | 7611 | 21.7 | 0.0 | 0 |
2022-01-06 | 8336 | 22.1 | 0.0 | 0 |
2022-01-07 | 8079 | 23.8 | 0.0 | 0 |
2022-01-08 | 3529 | 24.4 | 0.0 | 1 |
2022-01-09 | 3453 | 24.9 | 0.0 | 1 |
2022-01-10 | 7825 | 26.9 | 0.0 | 0 |
Evaluamos un modelo que incorpora los datos de temperatura, precipitaciones y tipo de día a través de la variable categórica creada.
= lm(n ~ poly(tavg, 2) + prcp + finde, data = datos_tr)
fitlm summary(fitlm)
Call:
lm(formula = n ~ poly(tavg, 2) + prcp + finde, data = datos_tr)
Residuals:
Min 1Q Median 3Q Max
-7852.9 -882.7 159.1 1245.6 3643.8
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10137.43 125.46 80.803 < 0.0000000000000002 ***
poly(tavg, 2)1 7648.92 1967.85 3.887 0.000121 ***
poly(tavg, 2)2 -18509.72 1940.26 -9.540 < 0.0000000000000002 ***
prcp -123.97 20.57 -6.027 0.00000000417 ***
finde -6614.07 224.73 -29.432 < 0.0000000000000002 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1933 on 357 degrees of freedom
Multiple R-squared: 0.734, Adjusted R-squared: 0.731
F-statistic: 246.2 on 4 and 357 DF, p-value: < 0.00000000000000022
<- round(fitlm$coefficients, 0) coef
Los coeficiente estimados sugieren que la cantidad basal de usos del sistema es de \(10137\) y que, ceteris paribus, ocurre lo siguiente:
como la relación entre la cantidad de usos y la temperatura es modelada con un polinomio de grado 2 y con coeficientes \(7649\) y \(-18510\), para cada grado en la variable temperatura respectivamente, se penaliza la cantidad de usos por temperaturas extremas (comportamiento que ya habíamos comentado en el capítulo 1),
los usos disminuyen por la presencia de lluvia, a razón de \(-124\) por cada mm de precipitaciones registrado y,
el mayor impacto en la cantidad de usos reside en el tipo de día, registrando una reducción de \(6614\) usos los fines de semana respecto de los días de semana.
Volvemos a predecir la cantidad de usos del sistema Ecobici para un día de semana, con temperatura media de 24° y con un nivel de precipitaciones de 5 mm y comparamos con los predichos anteriores.
<- data.frame(tavg = 24, prcp = 5, finde = 0)
nd
<- predict(fitlm, nd, interval = "prediction")
predicho_nuevo <-
predicho_nuevo cbind(predicho_nuevo, predicho_nuevo[, 3] - predicho_nuevo[, 2])
colnames(predicho_nuevo) <- c("Pred", "linf", "lsup", "long")
rownames(predicho_nuevo) <-
c("Modelo completo: Todos los datos -> tavg + tavg^2 + prcp + finde")
::kable(data.frame(rbind(predichos, predicho_nuevo)), caption = "Predicciones con diferentes ajustes.") knitr
Pred | linf | lsup | long | |
---|---|---|---|---|
Modelo 1: Todos los datos -> mean(n) | 8020.412 | 679.5616 | 15361.26 | 14681.700 |
Modelo 2: LaV, lluvia, <25° -> mean(n) | 9008.351 | 3469.1432 | 14547.56 | 11078.415 |
Modelo 3: Todos los datos -> tavg | 8408.683 | 1075.0282 | 15742.34 | 14667.311 |
Modelo 4: LaV, lluvia, <25° -> tavg | 9844.809 | 4300.5957 | 15389.02 | 11088.426 |
Modelo 5: Todos los datos -> tavg + prcp | 8154.161 | 897.8224 | 15410.50 | 14512.677 |
Modelo 6: LaV, lluvia, <25° -> tavg + prcp | 10333.054 | 4948.6154 | 15717.49 | 10768.878 |
Modelo completo: Todos los datos -> tavg + tavg^2 + prcp + finde | 9823.279 | 6005.6077 | 13640.95 | 7635.343 |
Como es de esperar, la predicción dada por el modelo completo parece ser más precisa que las de los restantes. Más aún, como el modelo estima a partir del conjunto de datos completo, su desempeño se mantiene, incluso para la predicción de la cantidad de usos del sistema Ecobici más generales, como por ejemplo, para un fin de semana, con temperatura media de 25°, sin lluvias, y en relación con los predichos anteriores.
<- data.frame(tavg = 20, prcp = 0, finde = 1)
nd2
::kable(nd2, caption = "Otra nueva observación a predecir.") knitr
tavg | prcp | finde |
---|---|---|
20 | 0 | 1 |
<- predict(fitlm, nd2, interval = "prediction")
predicho_nuevo <-
predicho_nuevo cbind(predicho_nuevo, predicho_nuevo[, 3] - predicho_nuevo[, 2])
colnames(predicho_nuevo) <- c("Pred", "linf", "lsup", "long")
rownames(predicho_nuevo) <-
c("Modelo completo: Todos los datos -> tavg + tavg^2 + prcp + finde")
<- rbind(
predichos predict(m1, nd2, interval = "prediction"),
predict(m2, nd2, interval = "prediction"),
predict(m3, nd2, interval = "prediction"),
predict(m4, nd2, interval = "prediction"),
predict(m5, nd2, interval = "prediction"),
predict(m6, nd2, interval = "prediction")
)
<- cbind(predichos, predichos[, 3] - predichos[, 2])
predichos
rownames(predichos) <- c(
"Modelo 1: Todos los datos -> mean(n)",
"Modelo 2: LaV, lluvia, <25° -> mean(n)",
"Modelo 3: Todos los datos -> tavg",
"Modelo 4: LaV, lluvia, <25° -> tavg",
"Modelo 5: Todos los datos -> tavg + prcp",
"Modelo 6: LaV, lluvia, <25° -> tavg + prcp"
)
colnames(predichos) <- c("Pred", "linf", "lsup", "long")
::kable(data.frame(rbind(predichos, predicho_nuevo)), caption = "Predicciones con diferentes ajustes.") knitr
Pred | linf | lsup | long | |
---|---|---|---|---|
Modelo 1: Todos los datos -> mean(n) | 8020.412 | 679.5616 | 15361.262 | 14681.700 |
Modelo 2: LaV, lluvia, <25° -> mean(n) | 9008.351 | 3469.1432 | 14547.559 | 11078.415 |
Modelo 3: Todos los datos -> tavg | 8156.240 | 834.1490 | 15478.330 | 14644.181 |
Modelo 4: LaV, lluvia, <25° -> tavg | 9307.742 | 3842.4732 | 14773.011 | 10930.538 |
Modelo 5: Todos los datos -> tavg + prcp | 8403.300 | 1158.5107 | 15648.090 | 14489.579 |
Modelo 6: LaV, lluvia, <25° -> tavg + prcp | 10100.688 | 4761.4766 | 15439.899 | 10678.422 |
Modelo completo: Todos los datos -> tavg + tavg^2 + prcp + finde | 4555.102 | 728.3893 | 8381.814 | 7653.425 |
Mientras todas las demás predicciones rondan valores entre \(8000\) y \(10000\), el modelo completo predice alrededor de \(4300\) usos, dando lugar, además, al intervalo de menor longitud observada. Es decir, el modelo de regresión múltiple que parece más adecuado para el problema es:
n ~ tavg + tavg^2 + prcp + finde
.
A continuación, se detallan aspectos de los datasets que conformaron el dataset reducido para el desarrollo del ejemplo, a la vez que se incluyen las fuentes de los datos y el código utilizado para pre-procesarlo con la sintaxis de tidyverse
. De esta forma, puede fácilmente replicarse y/o adaptarse si así se lo desea.
El dataset reducido con el que se desarrolló el ejemplo y que surge de tal pre-procesamiento, es climabici
de la librería datosIC
.
Los datos de este ejemplo corresponden a datos de clima del año 2022 tomados de la base de datos meteorológicos y climáticos de MeteoStat (disponibles acá). En particular, se consideran los datos de la estación meteorológica de Aeroparque (ID 87582), desde el 1ro de enero de 2022 hasta el 31 de diciembre de 2022, y un conjunto reducido de variables.
<-
clima read_csv("./fuente/02_regresion_multiple/registro_tiempo_aeroparque.csv") %>%
select(c(1:5, 7:8, 10))
Los datos de este ejemplo corresponden a datos de uso del sistema Ecobici de la Ciudad de Buenos Aires (disponibles acá). En particular, se consideran los datos del año 2022 correspondientes a viajes de entre 5 minutos y 1 hora de duración.
Ecobici es el sistema de transporte público de bicicletas de la Ciudad de Buenos Aires, que tiene estaciones automáticas con bicicletas a disposición las 24 horas, todos los días del año. El sistema es gratuito para todas las personas residentes del país de lunes a viernes (días hábiles) con hasta cuatro viajes de 30 minutos cada uno. Sin embargo, si se utiliza por un tiempo mayor que el indicado o durante los fines de semana, existen diferentes pases con variados costos. A modo de referencia, el pase que habilita a hacer 6 viajes diarios de hasta 60 minutos cada uno cualquier día de la semana tiene un costo de $1.785 (junio 2023).
<- read_csv(
trips "./fuente/02_regresion_multiple/trips_2022.csv",
col_types = cols(fecha_origen_recorrido = col_datetime(format = "%Y-%m-%d %H:%M:%S"))
%>%
) mutate(fecha = format(as_date(ymd_hms(
fecha_destino_recorrido%>%
)))) filter(duracion_recorrido > 300 && duracion_recorrido < 3600) %>%
group_by(fecha) %>%
count() %>%
mutate(fecha = as_date(fecha))
climabici
Para reducir los datos al estudio de interés, se crea un dataset conjunto, climabici
, a partir de los datos de clima y de uso del sistema Ecobici, en el que se dispone de las siguientes variables.
fecha
: fecha, en el formato año-mes-día.n
: cantidad de registros de uso del sistema EcoBici en la fecha indicada.tmed
: temperatura media (°C) registrada en esa fecha.tmin
: temperatura mínima (°C) registrada en esa fecha.tmax
: temperatura máxima (°C) registrada en esa fecha.prcp
: precipitaciones (mm) registrada en esa fecha.dia
: día de la semana de la fecha indicada.tipo_dia
: tipo de día (Fin de semana o Lunes a viernes) de la fecha indicada.lluvia
: condición de lluvia (Llueve: prcp
>0, No llueve: prcp
=0) de la fecha indicada.<- trips %>%
trips filter(fecha >= min(clima$date) & fecha <= max(clima$date))
<- left_join(trips, clima, by = c("fecha" = "date")) %>%
datos drop_na() %>%
mutate(
dia = weekdays(fecha),
tipo_dia = ifelse(dia %in% c("sábado", "domingo"), "Fin de semana", "Lunes a viernes"),
lluvia = ifelse(prcp == 0, "No llueve", "Llueve")
)
El dataset climabici
está disponible en la librería datosIC
.
library(datosIC)
climabici
fecha | n | tavg | tmin | tmax | prcp | dia | tipo_dia | lluvia |
---|---|---|---|---|---|---|---|---|
2022-01-01 | 2233 | 24.8 | 20.7 | 29.1 | 2.3 | sábado | Fin de semana | Llueve |
2022-01-02 | 3162 | 24.7 | 19.2 | 29.7 | 1.5 | domingo | Fin de semana | Llueve |
2022-01-03 | 7389 | 27.9 | 24.1 | 31.7 | 6.7 | lunes | Lunes a viernes | Llueve |
2022-01-04 | 7215 | 28.2 | 24.8 | 32.6 | 3.9 | martes | Lunes a viernes | Llueve |
2022-01-05 | 7611 | 21.7 | 16.7 | 31.7 | 0.0 | miércoles | Lunes a viernes | No llueve |
2022-01-06 | 8336 | 22.1 | 18.8 | 25.7 | 0.0 | jueves | Lunes a viernes | No llueve |
2022-01-07 | 8079 | 23.8 | 20.6 | 26.6 | 0.0 | viernes | Lunes a viernes | No llueve |
2022-01-08 | 3529 | 24.4 | 21.8 | 27.1 | 0.0 | sábado | Fin de semana | No llueve |
2022-01-09 | 3453 | 24.9 | 20.9 | 29.5 | 0.0 | domingo | Fin de semana | No llueve |
2022-01-10 | 7825 | 26.9 | 22.8 | 31.3 | 0.0 | lunes | Lunes a viernes | No llueve |
sessionInfo()
R version 4.2.3 (2023-03-15 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Argentina.utf8 LC_CTYPE=Spanish_Argentina.utf8
[3] LC_MONETARY=Spanish_Argentina.utf8 LC_NUMERIC=C
[5] LC_TIME=Spanish_Argentina.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] datosIC_0.0.0.9000 devtools_2.4.5 usethis_2.1.6 knitr_1.42
[5] kableExtra_1.3.4 plotly_4.10.1 ggfortify_0.4.16 lubridate_1.9.2
[9] forcats_1.0.0 stringr_1.5.0 dplyr_1.1.2 purrr_1.0.1
[13] readr_2.1.4 tidyr_1.3.0 tibble_3.2.1 ggplot2_3.4.2
[17] tidyverse_2.0.0
loaded via a namespace (and not attached):
[1] nlme_3.1-162 fs_1.6.1 webshot_0.5.5 httr_1.4.5
[5] tools_4.2.3 profvis_0.3.7 utf8_1.2.3 R6_2.5.1
[9] lazyeval_0.2.2 mgcv_1.8-42 colorspace_2.1-0 urlchecker_1.0.1
[13] withr_2.5.0 tidyselect_1.2.0 gridExtra_2.3 prettyunits_1.1.1
[17] processx_3.8.0 curl_5.0.0 compiler_4.2.3 cli_3.6.1
[21] rvest_1.0.3 xml2_1.3.5 labeling_0.4.2 scales_1.2.1
[25] callr_3.7.3 systemfonts_1.0.4 digest_0.6.31 rmarkdown_2.21
[29] svglite_2.1.1 pkgconfig_2.0.3 htmltools_0.5.5 sessioninfo_1.2.2
[33] fastmap_1.1.1 highr_0.10 htmlwidgets_1.6.2 rlang_1.1.0
[37] rstudioapi_0.14 shiny_1.7.4 generics_0.1.3 jsonlite_1.8.4
[41] crosstalk_1.2.0 magrittr_2.0.3 Matrix_1.5-4 Rcpp_1.0.10
[45] munsell_0.5.0 fansi_1.0.4 lifecycle_1.0.3 stringi_1.7.12
[49] yaml_2.3.7 pkgbuild_1.4.0 grid_4.2.3 promises_1.2.0.1
[53] crayon_1.5.2 miniUI_0.1.1.1 lattice_0.21-8 splines_4.2.3
[57] hms_1.1.3 ps_1.7.4 pillar_1.9.0 pkgload_1.3.2
[61] glue_1.6.2 evaluate_0.20 data.table_1.14.8 remotes_2.4.2
[65] vctrs_0.6.1 tzdb_0.3.0 httpuv_1.6.9 gtable_0.3.4
[69] cachem_1.0.7 xfun_0.39 mime_0.12 xtable_1.8-4
[73] later_1.3.0 viridisLite_0.4.2 memoise_2.0.1 timechange_0.2.0
[77] ellipsis_0.3.2
Sistema Ecobici de la Ciudad Autónoma de Buenos Aires (info disponible acá y datos disponibles acá.)