From 970e694a39e84fcfd6f2f4efc3ca1a9432cad716 Mon Sep 17 00:00:00 2001 From: Juan Rossano Date: Fri, 27 Mar 2026 00:17:43 -0300 Subject: [PATCH] Trabajo practico Proyecto 1 --- .gitignore | 4 + PA1_template.Rmd | 167 +++++++++++++++++- PA1_template.html | 313 ++++++++++++++++++++++++++++++++++ PA1_template.md | 247 +++++++++++++++++++++++++++ figure/PA1_activity-ADP-1.png | Bin 0 -> 7368 bytes figure/PA1_activity-DSF-1.png | Bin 0 -> 6383 bytes figure/PA1_activity-PPD-1.png | Bin 0 -> 4259 bytes figure/PA1_activity-TPD-1.png | Bin 0 -> 4557 bytes 8 files changed, 722 insertions(+), 9 deletions(-) create mode 100644 .gitignore create mode 100644 PA1_template.html create mode 100644 PA1_template.md create mode 100644 figure/PA1_activity-ADP-1.png create mode 100644 figure/PA1_activity-DSF-1.png create mode 100644 figure/PA1_activity-PPD-1.png create mode 100644 figure/PA1_activity-TPD-1.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..5b6a0652566 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.Rproj.user +.Rhistory +.RData +.Ruserdata diff --git a/PA1_template.Rmd b/PA1_template.Rmd index d5cc677c93d..18028449546 100644 --- a/PA1_template.Rmd +++ b/PA1_template.Rmd @@ -1,25 +1,174 @@ --- -title: "Reproducible Research: Peer Assessment 1" -output: - html_document: - keep_md: true +title: "Solucion" +author: "Juan Rossano" +date: "2026-03-25" +output: html_document --- +#### 1. Carga del conjunto de datos -## Loading and preprocessing the data +```{r carga, include=FALSE, cache=TRUE} +activity <- read.csv(unz("activity.zip", "activity.csv"), stringsAsFactors = FALSE) +``` +#### Caracteristicas +variables incluidas en este conjunto de datos son: -## What is mean total number of steps taken per day? +* **steps**: Número de pasos dados en un intervalo de 5 minutos (los valores + faltantes se codifican como `NA`). +* **date**: Fecha en que se tomó la medición en formato AAAA-MM-DD +* **interval**: Identificador del intervalo de 5 minutos en el que se tomó la + medición -## What is the average daily activity pattern? +#### 2. Procesar/transformar los datos -## Imputing missing values +```{r, include=FALSE } +activity$date <- as.Date(activity$date, format = "%Y-%m-%d") +``` +### ¿Cuál es el número medio total de pasos dados por día? +Para esta parte de la tarea, puede ignorar los valores faltantes en el conjunto +de datos. -## Are there differences in activity patterns between weekdays and weekends? +1. Cree un histograma del número total de pasos dados cada día. + +2. Calcule e indique la **media** y la **mediana** del número total de pasos +dados por día. + +```{r PA1_activity-PPD, fig.path="figure/"} +total_steps_day <- aggregate(steps ~ date, data = activity, FUN = sum, na.rm = TRUE) + +hist(total_steps_day$steps, + main = "Total de pasos por día", + xlab = "Pasos por día", + ylab = "Frecuencia", + col = "lightblue", + border = "white") + +mean_steps_day <- mean(total_steps_day$steps) +median_steps_day <- median(total_steps_day$steps) + +mean_steps_day +median_steps_day +``` + +### ¿Cuál es el patrón de actividad diaria promedio? + +1. Crea un gráfico de series temporales (es decir, `type = "l"`) con el +intervalo de 5 minutos (eje x) y el número promedio de pasos dados, promediado a +lo largo de todos los días (eje y). + +2. ¿Qué intervalo de 5 minutos, en promedio a lo largo de todos los días del +conjunto de datos, contiene el mayor número de pasos? + +```{r PA1_activity-ADP, fig.path="figure/"} +avg_steps_interval <- aggregate(steps ~ interval, data = activity, FUN = mean, na.rm = TRUE) + +plot(avg_steps_interval$interval, + avg_steps_interval$steps, + type = "l", + xlab = "Intervalo de 5 minutos", + ylab = "Promedio de pasos", + main = "Patrón de actividad diaria promedio") + +max_interval <- avg_steps_interval$interval[which.max(avg_steps_interval$steps)] +max_interval +``` + +### Imputación de valores faltantes + +Tenga en cuenta que hay varios días/intervalos con valores faltantes +(codificados como `NA`). La presencia de días faltantes puede introducir sesgos +en algunos cálculos o resúmenes de los datos. + +1. Calcule e informe el número total de valores faltantes en el conjunto de +datos (es decir, el número total de filas con `NA`). + +2. Diseñe una estrategia para completar todos los valores faltantes en el +conjunto de datos. La estrategia no necesita ser compleja. Por ejemplo, podría +usar la media/mediana de ese día, o la media de ese intervalo de 5 minutos, etc. + +3. Cree un nuevo conjunto de datos idéntico al original, pero con los datos +faltantes completados. + +4. Cree un histograma del número total de pasos dados cada día y calcule e +informe la **media** y la **mediana** del número total de pasos dados por día. +¿Estos valores difieren de las estimaciones de la primera parte de la tarea? +¿Qué impacto tiene la imputación de datos faltantes en las estimaciones del +número total de pasos diarios? + +```{r PA1_activity-TPD, fig.path="figure/"} +na_total <- sum(is.na(activity$steps)) +na_total + +# Estrategia: imputar cada NA de steps con la media de su intervalo de 5 minutos. +interval_means <- aggregate(steps ~ interval, data = activity, FUN = mean, na.rm = TRUE) + +activity_filled <- activity +na_index <- is.na(activity_filled$steps) +activity_filled$steps[na_index] <- interval_means$steps[ + match(activity_filled$interval[na_index], interval_means$interval) +] + +total_steps_day_filled <- aggregate(steps ~ date, data = activity_filled, FUN = sum) + +hist(total_steps_day_filled$steps, + main = "Total de pasos por día (con imputación)", + xlab = "Pasos por día", + ylab = "Frecuencia", + col = "lightgreen", + border = "white") + +mean_steps_day_filled <- mean(total_steps_day_filled$steps) +median_steps_day_filled <- median(total_steps_day_filled$steps) + +mean_steps_day_filled +median_steps_day_filled + +cat("Media sin imputar:", mean_steps_day, "\n") +cat("Mediana sin imputar:", median_steps_day, "\n") +cat("Media con imputación:", mean_steps_day_filled, "\n") +cat("Mediana con imputación:", median_steps_day_filled, "\n") +``` + +### ¿Existen diferencias en los patrones de actividad entre los días laborables y los fines de semana? + +Para esta parte, la función `weekdays()` puede ser útil. Utilice el conjunto de +datos con los valores faltantes completados. + +1. Cree una nueva variable categórica en el conjunto de datos con dos niveles: +"weekday" y "weekend", que indiquen si una fecha determinada es un día laborable +o un fin de semana. + +1. Cree un gráfico de panel que contenga una serie temporal (es decir, `type = +"l"`) del intervalo de 5 minutos (eje x) y el número promedio de pasos dados, +promediado para todos los días laborables o fines de semana (eje y). + +```{r PA1_activity-DSF, fig.path="figure/"} +library(lattice) + +activity_filled$day_type <- ifelse( + weekdays(activity_filled$date) %in% c("Saturday", "Sunday", "sábado", "domingo"), + "weekend", + "weekday" +) + +activity_filled$day_type <- factor(activity_filled$day_type, levels = c("weekday", "weekend")) + +avg_by_daytype <- aggregate(steps ~ interval + day_type, + data = activity_filled, + FUN = mean) + +xyplot(steps ~ interval | day_type, + data = avg_by_daytype, + type = "l", + layout = c(1, 2), + xlab = "Intervalo de 5 minutos", + ylab = "Número promedio de pasos") +``` diff --git a/PA1_template.html b/PA1_template.html new file mode 100644 index 00000000000..ddcb51673c0 --- /dev/null +++ b/PA1_template.html @@ -0,0 +1,313 @@ + + + + + + +Solucion + + + + +
+

Solucion

+

Juan Rossano

+

2026-03-25

+
+
+

1. Carga del conjunto de datos

+

Caracteristicas

+

variables incluidas en este conjunto de datos son:

+ +

2. Procesar/transformar los datos

+

¿Cuál es el número medio total de pasos dados por día?

+

Para esta parte de la tarea, puede ignorar los valores faltantes en el conjunto +de datos.

+
    +
  1. +

    Cree un histograma del número total de pasos dados cada día.

    +
  2. +
  3. +

    Calcule e indique la media y la mediana del número total de pasos +dados por día.

    +
  4. +
+
total_steps_day <- aggregate(steps ~ date, data = activity, FUN = sum, na.rm = TRUE)
+
+hist(total_steps_day$steps,
+    main = "Total de pasos por día",
+    xlab = "Pasos por día",
+    ylab = "Frecuencia",
+    col = "lightblue",
+    border = "white")
+
+

plot of chunk PA1_activity-PPD

+
mean_steps_day <- mean(total_steps_day$steps)
+median_steps_day <- median(total_steps_day$steps)
+
+mean_steps_day
+
+
## [1] 10766.19
+
+
median_steps_day
+
+
## [1] 10765
+
+

¿Cuál es el patrón de actividad diaria promedio?

+
    +
  1. +

    Crea un gráfico de series temporales (es decir, type = "l") con el +intervalo de 5 minutos (eje x) y el número promedio de pasos dados, promediado a +lo largo de todos los días (eje y).

    +
  2. +
  3. +

    ¿Qué intervalo de 5 minutos, en promedio a lo largo de todos los días del +conjunto de datos, contiene el mayor número de pasos?

    +
  4. +
+
avg_steps_interval <- aggregate(steps ~ interval, data = activity, FUN = mean, na.rm = TRUE)
+
+plot(avg_steps_interval$interval,
+    avg_steps_interval$steps,
+    type = "l",
+    xlab = "Intervalo de 5 minutos",
+    ylab = "Promedio de pasos",
+    main = "Patrón de actividad diaria promedio")
+
+

plot of chunk PA1_activity-ADP

+
max_interval <- avg_steps_interval$interval[which.max(avg_steps_interval$steps)]
+max_interval
+
+
## [1] 835
+
+

Imputación de valores faltantes

+

Tenga en cuenta que hay varios días/intervalos con valores faltantes +(codificados como NA). La presencia de días faltantes puede introducir sesgos +en algunos cálculos o resúmenes de los datos.

+
    +
  1. +

    Calcule e informe el número total de valores faltantes en el conjunto de +datos (es decir, el número total de filas con NA).

    +
  2. +
  3. +

    Diseñe una estrategia para completar todos los valores faltantes en el +conjunto de datos. La estrategia no necesita ser compleja. Por ejemplo, podría +usar la media/mediana de ese día, o la media de ese intervalo de 5 minutos, etc.

    +
  4. +
  5. +

    Cree un nuevo conjunto de datos idéntico al original, pero con los datos +faltantes completados.

    +
  6. +
  7. +

    Cree un histograma del número total de pasos dados cada día y calcule e +informe la media y la mediana del número total de pasos dados por día. +¿Estos valores difieren de las estimaciones de la primera parte de la tarea? +¿Qué impacto tiene la imputación de datos faltantes en las estimaciones del +número total de pasos diarios?

    +
  8. +
+
na_total <- sum(is.na(activity$steps))
+na_total
+
+
## [1] 2304
+
+
# Estrategia: imputar cada NA de steps con la media de su intervalo de 5 minutos.
+interval_means <- aggregate(steps ~ interval, data = activity, FUN = mean, na.rm = TRUE)
+
+activity_filled <- activity
+na_index <- is.na(activity_filled$steps)
+activity_filled$steps[na_index] <- interval_means$steps[
+    match(activity_filled$interval[na_index], interval_means$interval)
+]
+
+total_steps_day_filled <- aggregate(steps ~ date, data = activity_filled, FUN = sum)
+
+hist(total_steps_day_filled$steps,
+         main = "Total de pasos por día (con imputación)",
+         xlab = "Pasos por día",
+         ylab = "Frecuencia",
+         col = "lightgreen",
+         border = "white")
+
+

plot of chunk PA1_activity-TPD

+
mean_steps_day_filled <- mean(total_steps_day_filled$steps)
+median_steps_day_filled <- median(total_steps_day_filled$steps)
+
+mean_steps_day_filled
+
+
## [1] 10766.19
+
+
median_steps_day_filled
+
+
## [1] 10766.19
+
+
cat("Media sin imputar:", mean_steps_day, "\n")
+
+
## Media sin imputar: 10766.19
+
+
cat("Mediana sin imputar:", median_steps_day, "\n")
+
+
## Mediana sin imputar: 10765
+
+
cat("Media con imputación:", mean_steps_day_filled, "\n")
+
+
## Media con imputación: 10766.19
+
+
cat("Mediana con imputación:", median_steps_day_filled, "\n")
+
+
## Mediana con imputación: 10766.19
+
+

¿Existen diferencias en los patrones de actividad entre los días laborables y los fines de semana?

+

Para esta parte, la función weekdays() puede ser útil. Utilice el conjunto de +datos con los valores faltantes completados.

+
    +
  1. +

    Cree una nueva variable categórica en el conjunto de datos con dos niveles: +“weekday” y “weekend”, que indiquen si una fecha determinada es un día laborable +o un fin de semana.

    +
  2. +
  3. +

    Cree un gráfico de panel que contenga una serie temporal (es decir, type = "l") del intervalo de 5 minutos (eje x) y el número promedio de pasos dados, +promediado para todos los días laborables o fines de semana (eje y).

    +
  4. +
+
library(lattice)
+
+activity_filled$day_type <- ifelse(
+    weekdays(activity_filled$date) %in% c("Saturday", "Sunday", "sábado", "domingo"),
+    "weekend",
+    "weekday"
+)
+
+activity_filled$day_type <- factor(activity_filled$day_type, levels = c("weekday", "weekend"))
+
+avg_by_daytype <- aggregate(steps ~ interval + day_type,
+                                                        data = activity_filled,
+                                                        FUN = mean)
+
+xyplot(steps ~ interval | day_type,
+             data = avg_by_daytype,
+             type = "l",
+             layout = c(1, 2),
+             xlab = "Intervalo de 5 minutos",
+             ylab = "Número promedio de pasos")
+
+

plot of chunk PA1_activity-DSF

+
+ + + + diff --git a/PA1_template.md b/PA1_template.md new file mode 100644 index 00000000000..5abfaa9503f --- /dev/null +++ b/PA1_template.md @@ -0,0 +1,247 @@ +--- +title: "Solucion" +author: "Juan Rossano" +date: "2026-03-25" +output: html_document +--- + +#### 1. Carga del conjunto de datos + + + +#### Caracteristicas + +variables incluidas en este conjunto de datos son: + +* **steps**: Número de pasos dados en un intervalo de 5 minutos (los valores + faltantes se codifican como `NA`). + +* **date**: Fecha en que se tomó la medición en formato AAAA-MM-DD + +* **interval**: Identificador del intervalo de 5 minutos en el que se tomó la + medición + + +#### 2. Procesar/transformar los datos + + + + +### ¿Cuál es el número medio total de pasos dados por día? + +Para esta parte de la tarea, puede ignorar los valores faltantes en el conjunto +de datos. + +1. Cree un histograma del número total de pasos dados cada día. + +2. Calcule e indique la **media** y la **mediana** del número total de pasos +dados por día. + + +``` r +total_steps_day <- aggregate(steps ~ date, data = activity, FUN = sum, na.rm = TRUE) + +hist(total_steps_day$steps, + main = "Total de pasos por día", + xlab = "Pasos por día", + ylab = "Frecuencia", + col = "lightblue", + border = "white") +``` + +![plot of chunk PA1_activity-PPD](figure/PA1_activity-PPD-1.png) + +``` r +mean_steps_day <- mean(total_steps_day$steps) +median_steps_day <- median(total_steps_day$steps) + +mean_steps_day +``` + +``` +## [1] 10766.19 +``` + +``` r +median_steps_day +``` + +``` +## [1] 10765 +``` + +### ¿Cuál es el patrón de actividad diaria promedio? + +1. Crea un gráfico de series temporales (es decir, `type = "l"`) con el +intervalo de 5 minutos (eje x) y el número promedio de pasos dados, promediado a +lo largo de todos los días (eje y). + +2. ¿Qué intervalo de 5 minutos, en promedio a lo largo de todos los días del +conjunto de datos, contiene el mayor número de pasos? + + +``` r +avg_steps_interval <- aggregate(steps ~ interval, data = activity, FUN = mean, na.rm = TRUE) + +plot(avg_steps_interval$interval, + avg_steps_interval$steps, + type = "l", + xlab = "Intervalo de 5 minutos", + ylab = "Promedio de pasos", + main = "Patrón de actividad diaria promedio") +``` + +![plot of chunk PA1_activity-ADP](figure/PA1_activity-ADP-1.png) + +``` r +max_interval <- avg_steps_interval$interval[which.max(avg_steps_interval$steps)] +max_interval +``` + +``` +## [1] 835 +``` + +### Imputación de valores faltantes + +Tenga en cuenta que hay varios días/intervalos con valores faltantes +(codificados como `NA`). La presencia de días faltantes puede introducir sesgos +en algunos cálculos o resúmenes de los datos. + +1. Calcule e informe el número total de valores faltantes en el conjunto de +datos (es decir, el número total de filas con `NA`). + +2. Diseñe una estrategia para completar todos los valores faltantes en el +conjunto de datos. La estrategia no necesita ser compleja. Por ejemplo, podría +usar la media/mediana de ese día, o la media de ese intervalo de 5 minutos, etc. + +3. Cree un nuevo conjunto de datos idéntico al original, pero con los datos +faltantes completados. + +4. Cree un histograma del número total de pasos dados cada día y calcule e +informe la **media** y la **mediana** del número total de pasos dados por día. +¿Estos valores difieren de las estimaciones de la primera parte de la tarea? +¿Qué impacto tiene la imputación de datos faltantes en las estimaciones del +número total de pasos diarios? + + +``` r +na_total <- sum(is.na(activity$steps)) +na_total +``` + +``` +## [1] 2304 +``` + +``` r +# Estrategia: imputar cada NA de steps con la media de su intervalo de 5 minutos. +interval_means <- aggregate(steps ~ interval, data = activity, FUN = mean, na.rm = TRUE) + +activity_filled <- activity +na_index <- is.na(activity_filled$steps) +activity_filled$steps[na_index] <- interval_means$steps[ + match(activity_filled$interval[na_index], interval_means$interval) +] + +total_steps_day_filled <- aggregate(steps ~ date, data = activity_filled, FUN = sum) + +hist(total_steps_day_filled$steps, + main = "Total de pasos por día (con imputación)", + xlab = "Pasos por día", + ylab = "Frecuencia", + col = "lightgreen", + border = "white") +``` + +![plot of chunk PA1_activity-TPD](figure/PA1_activity-TPD-1.png) + +``` r +mean_steps_day_filled <- mean(total_steps_day_filled$steps) +median_steps_day_filled <- median(total_steps_day_filled$steps) + +mean_steps_day_filled +``` + +``` +## [1] 10766.19 +``` + +``` r +median_steps_day_filled +``` + +``` +## [1] 10766.19 +``` + +``` r +cat("Media sin imputar:", mean_steps_day, "\n") +``` + +``` +## Media sin imputar: 10766.19 +``` + +``` r +cat("Mediana sin imputar:", median_steps_day, "\n") +``` + +``` +## Mediana sin imputar: 10765 +``` + +``` r +cat("Media con imputación:", mean_steps_day_filled, "\n") +``` + +``` +## Media con imputación: 10766.19 +``` + +``` r +cat("Mediana con imputación:", median_steps_day_filled, "\n") +``` + +``` +## Mediana con imputación: 10766.19 +``` + +### ¿Existen diferencias en los patrones de actividad entre los días laborables y los fines de semana? + +Para esta parte, la función `weekdays()` puede ser útil. Utilice el conjunto de +datos con los valores faltantes completados. + +1. Cree una nueva variable categórica en el conjunto de datos con dos niveles: +"weekday" y "weekend", que indiquen si una fecha determinada es un día laborable +o un fin de semana. + +1. Cree un gráfico de panel que contenga una serie temporal (es decir, `type = +"l"`) del intervalo de 5 minutos (eje x) y el número promedio de pasos dados, +promediado para todos los días laborables o fines de semana (eje y). + + +``` r +library(lattice) + +activity_filled$day_type <- ifelse( + weekdays(activity_filled$date) %in% c("Saturday", "Sunday", "sábado", "domingo"), + "weekend", + "weekday" +) + +activity_filled$day_type <- factor(activity_filled$day_type, levels = c("weekday", "weekend")) + +avg_by_daytype <- aggregate(steps ~ interval + day_type, + data = activity_filled, + FUN = mean) + +xyplot(steps ~ interval | day_type, + data = avg_by_daytype, + type = "l", + layout = c(1, 2), + xlab = "Intervalo de 5 minutos", + ylab = "Número promedio de pasos") +``` + +![plot of chunk PA1_activity-DSF](figure/PA1_activity-DSF-1.png) diff --git a/figure/PA1_activity-ADP-1.png b/figure/PA1_activity-ADP-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4927771f9d4b52faa108e472b0509142abac75e1 GIT binary patch literal 7368 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 A!vFvP literal 0 HcmV?d00001