Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.Rproj.user
.Rhistory
.RData
.Ruserdata
167 changes: 158 additions & 9 deletions PA1_template.Rmd
Original file line number Diff line number Diff line change
@@ -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")
```
313 changes: 313 additions & 0 deletions PA1_template.html

Large diffs are not rendered by default.

Loading