//2. Actividades //

x = c(1,3,5,7,9)
y = c(2,4,6,7,11,12)
x+1
## [1]  2  4  6  8 10
y*2
## [1]  4  8 12 14 22 24
length(x)
## [1] 5
length(y)
## [1] 6
(x)+(y)
## Warning in (x) + (y): longitud de objeto mayor no es múltiplo de la longitud de
## uno menor
## [1]  3  7 11 14 20 13
sum(x>5)
## [1] 2
sum(x[x>5])
## [1] 16
sum(x>5 | x< 3)
## [1] 3
y[2]
## [1] 4
y[-2]
## [1]  2  6  7 11 12
y[x]
## [1]  2  6 11 NA NA
y[y>=8]
## [1] 11 12

// 2.2. Un conductor europeo de viaje por Estados Unidos apunta las millas recorridas por su coche cada vez que llena el tanque de gasolina. La relación de las últimas 10 veces que lo ha llenado es la siguiente:

millas = c(65241, 65665, 65998, 66014, 66547, 66857, 67025, 67447, 66958, 67002)
kms = millas * 1.609
  1. ¿Qué resultado produce la función diff aplicada sobre los datos anteriores?
diferencia = diff(kms)
print(diferencia)
## [1]  682.216  535.797   25.744  857.597  498.790  270.312  678.998 -786.801
## [9]   70.796
summary(kms)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  104973  106197  107324  106959  107789  108522

//2.3 Una persona dispone de un contrato de pago mínimo telefónico, con el que cuenta poder controlar sus gastos. A pesar de esto cada mes tiene que pagar cantidades diferentes, que finalmente decide revisar. En el último año estas cantidades, en euros, han sido las sigui

  1. ¿Cuánto le ha costado la factura del último año?
cantidades = c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32)

pago_total = sum(cantidades)

print(paste("El total pagado en el año es de ", pago_total,"€"))
## [1] "El total pagado en el año es de  478 €"

b.¿Cuánto ha pagado en promedio cada mes?

promedio_pago = mean(cantidades)

print(paste("El promedio pagado por mes es: ", promedio_pago, "€"))
## [1] "El promedio pagado por mes es:  39.8333333333333 €"
round(promedio_pago)
## [1] 40

C.¿Cuáles son las cantidades mínimas y máximas pagadas?

pago_min = min(cantidades)
pago_max = max(cantidades)

print(paste("la cantidad minima pagada fue:", pago_min, "€"))
## [1] "la cantidad minima pagada fue: 30 €"
print(paste("la cantidad máxima pagada fue:", pago_max, "€"))
## [1] "la cantidad máxima pagada fue: 49 €"

D. ¿En qué mes se realizó cada pago?

mes = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")

cantidades = c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32)

datos = data.frame(Mes = mes, Cantidad = paste(cantidades, "euros"))

print(datos)
##           Mes Cantidad
## 1       Enero 47 euros
## 2     Febrero 32 euros
## 3       Marzo 40 euros
## 4       Abril 36 euros
## 5        Mayo 49 euros
## 6       Junio 31 euros
## 7       Julio 49 euros
## 8      Agosto 30 euros
## 9  Septiembre 49 euros
## 10    Octubre 35 euros
## 11  Noviembre 48 euros
## 12  Diciembre 32 euros

¿Cuantos meses pagó más de 40 euros?

meses_mayor_40 = sum(cantidades > 40)

print(paste("Total de meses en los que se pagaron más de 40€", meses_mayor_40))
## [1] "Total de meses en los que se pagaron más de 40€ 5"

F.Qué porcentaje del gasto total representa esta cantidad?

porcentaje_mayor_40 = (meses_mayor_40 / length(cantidades)) * 100
print(paste("El porcentaje del gasto total que representa el pago de mayor de 40 euros es:", porcentaje_mayor_40, "%"))
## [1] "El porcentaje del gasto total que representa el pago de mayor de 40 euros es: 41.6666666666667 %"
round(porcentaje_mayor_40)
## [1] 42

2.4. Con los datos siguientes: 61 88 73 49 41 72 99 07 12 13 87 91 05 17 97

  1. Haz un diagrama de porcentual `
# Datos
x = c(61, 88, 73, 49, 41, 72, 99, 7, 12, 13, 87, 91, 5, 17, 97)

# Tamaño del gráfico
options(repr.plot.width=8, repr.plot.height=6)

# Calculamos los porcentajes
porcentajes = round(x / sum(x) * 100, 1)

# Creamos el gráfico de barras
barplot(x, main = "Diagrama de Porcentual", col = rainbow(length(x)), 
        xlab = "Datos", ylab = "Porcentaje", names.arg = 1:length(x))

# Creamos una leyenda personalizada
legend("topright", legend = paste(porcentajes, "%"), fill = rainbow(length(x)), 
       title = "Porcentaje", inset = 0.02, cex = 0.8)

  1. Obtén resúmenes numéricos de los datos.
resumen = summary(x)
print(resumen)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5.00   15.00   61.00   54.13   87.50   99.00
fivenum(x)
## [1]  5.0 15.0 61.0 87.5 99.0
  1. ¿Qué diferencias hay entre summary(x) y fivenum(x)?

En resumen, summary(x) proporciona un resumen más completo que incluye la media y la cantidad de datos faltantes, mientras que fivenum(x) se enfoca en los cinco números resistentes para describir la distribución de los datos y es especialmente útil para identificar valores atípicos. Dependiendo de lo que necesites analizar en tus datos, puedes elegir la función que mejor se adapte a tus necesidades.

2.5. R permite generar datos aleatorios con gran facilidad mediante instrucciones específicas que empiezan con “r” (rnorm, rpois, rbinom,…).

  1. Genera 100 valores de una distribución normal con rnorm(100).
# Generar 100 valores de una distribución normal
datos_normal <- rnorm(100)

# Verificar los primeros valores generados
head(datos_normal)
## [1] -0.5165003 -0.7047333  2.4723072  0.1385882 -0.7560491 -0.2667007
  1. Realiza un histograma de los valores. Repite el proceso un par de veces. ¿Qué observas?
# Cargar la librería ggplot2 para graficar
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
# Crear el histograma
ggplot(data.frame(x = datos_normal), aes(x)) +
  geom_histogram(binwidth = 0.5, fill = "blue", color = "black") +
  labs(title = "Histograma de Datos de Distribución Normal",
       x = "Valores", y = "Frecuencia")

R// En resumen, el histograma de una distribución normal muestra visualmente la forma y la dispersión de los datos, así como la frecuencia de ocurrencia de los valores en la distribución.

  1. Realiza un resumen numérico de los datos.
summary(datos)
##      Mes              Cantidad        
##  Length:12          Length:12         
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

2.6. De forma similar al ejercicio genera 30 valores de una distribución binomial de parámetros (n=5 y p=0,9).

datos_binomial <- rbinom(30, size = 5, prob = 0.9)

# Crear el diagrama de caja
boxplot(datos_binomial, col = "skyblue", main = "Diagrama de Caja (Boxplot)",
        xlab = "Valores")

a) Representa gráficamente estos datos. Qué representación es más adecuada una diagrama boxplot o un diagrama de barras?

# Calcular la frecuencia de cada valor
frecuencia_valores <- table(datos_binomial)

# Crear el diagrama de barras
barplot(frecuencia_valores, col = "skyblue", main = "Diagrama de Barras",
        xlab = "Valores", ylab = "Frecuencia")

  1. Realiza un resumen numérico de los datos y compáralo con el del ejercicio anterior. ¿Qué deberías hacer para obtener un resumen similar?
datos_binomial <- rbinom(30, size = 5, prob = 0.9)

# Realizar un resumen numérico de los datos binomiales
summary(datos_binomial)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.000   4.000   5.000   4.667   5.000   5.000

R//Comparando los resúmenes numéricos de ambas distribuciones, podrás observar las diferencias en sus medidas de tendencia central, dispersión y forma de distribución.

Para obtener un resumen similar entre ambas distribuciones, puedes ajustar el tamaño de la muestra para que sean comparables en términos de cantidad de datos generados, por ejemplo, generando 30 valores de la distribución normal en lugar de 100

summary(datos)
##      Mes              Cantidad        
##  Length:12          Length:12         
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

2.7. El número de fallos en los 23 primeros intentos de puesta en órbita de un satélite fue: 0 1 0 NA 0 0 0 0 0 1 1 1 0 0 3 0 0 0 0 0 2 0 1 (NA significa ”not available” – se ha perdido el dato).

  1. Representa gráficamente estos datos. Qué representación es más adecuada una diagrama boxplot o un diagrama de barras?
datos = c(0, 1, 0, NA, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 1)


frecuencia = table(datos, useNA = "ifany")


barplot(frecuencia, main = "numero de fallos en orbita ", xlab = "Valor", ylab = "Frecuencia", col = "red")

R// Representa mejor los datos de los intentos fallidos en orbita el diagrama de barras ya que realiza el conteo y la frecuencia del error, y el boxoplot representa más datos atipicos fuera de orbita.

Tabula los datos y calcula el número medio de errores (Puedes tener que probar con mean(x,na.rm=TRUE) o x[!is.na(x)] para prescindir de los valores faltantes

datos = c(0, 1, 0, NA, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 1)

frecuencia <- table(datos, useNA = "ifany")

print(frecuencia)
## datos
##    0    1    2    3 <NA> 
##   15    5    1    1    1
media_errores <- mean(datos, na.rm = TRUE)
print(media_errores)
## [1] 0.4545455

2.8. En una encuesta en la que se evalúa el funcionamiento de un curso se han recogido las siguientes respuestas de 10 estudiantes a tres preguntas P1, P2 y P3:

  1. Entra los datos mediante c(), scan(), read.table() y data.entry().
# Crear vectores con los datos de cada pregunta
P1 <- c(3, 3, 3, 4, 3, 4, 3, 4, 4, 3)
P2 <- c(5, 5, 2, 2, 5, 2, 2, 5, 5, 2)
P3 <- c(1, 3, 1, 3, 3, 3, 1, 3, 1, 1)

# Mostrar los datos
print(P1)
##  [1] 3 3 3 4 3 4 3 4 4 3
print(P2)
##  [1] 5 5 2 2 5 2 2 5 5 2
print(P3)
##  [1] 1 3 1 3 3 3 1 3 1 1
datos = matrix(c(3, 3, 3, 4, 3, 4, 3, 4, 4, 3,
                  5, 5, 2, 2, 5, 2, 2, 5, 5, 2,
                  1, 3, 1, 3, 3, 3, 1, 3, 1, 1), 
                nrow = 3, byrow = TRUE)


rownames(datos) <- c("P1", "P2", "P3")
colnames(datos) <- c("Estudiante 1", "Estudiante 2", "Estudiante 3", "Estudiante 4", "Estudiante 5", "Estudiante 6", "Estudiante 7", "Estudiante 8", "Estudiante 9", "Estudiante 10")


print(datos)
##    Estudiante 1 Estudiante 2 Estudiante 3 Estudiante 4 Estudiante 5
## P1            3            3            3            4            3
## P2            5            5            2            2            5
## P3            1            3            1            3            3
##    Estudiante 6 Estudiante 7 Estudiante 8 Estudiante 9 Estudiante 10
## P1            4            3            4            4             3
## P2            2            2            5            5             2
## P3            3            1            3            1             1
tabla_P1 <- table(P1)
tabla_P2 <- table(P2)
tabla_P3 <- table(P3)


print(tabla_P1)
## P1
## 3 4 
## 6 4
print(tabla_P2)
## P2
## 2 5 
## 5 5
print(tabla_P3)
## P3
## 1 3 
## 5 5
  1. Realiza tablas de contingencia cruzadas para cada pregunta, de 2 en 2 y las 3 a la vez.

Tablas de contingencia cruzadas de 2 en 2 P1 vs. P2

# Tabla de contingencia cruzada entre P1 y P2
tabla_P1_P2 <- table(P1, P2)


print(tabla_P1_P2)
##    P2
## P1  2 5
##   3 3 3
##   4 2 2

P1 vs. P3

tabla_P1_P3 <- table(P1, P3)


print(tabla_P1_P3)
##    P3
## P1  1 3
##   3 4 2
##   4 1 3

P2 vs. P3

# Tabla de contingencia cruzada entre P2 y P3
tabla_P2_P3 <- table(P2, P3)


print(tabla_P2_P3)
##    P3
## P2  1 3
##   2 3 2
##   5 2 3
# Tabla de contingencia cruzada entre P1, P2 y P3
tabla_P1_P2_P3 <- table(P1, P2, P3)


print(tabla_P1_P2_P3)
## , , P3 = 1
## 
##    P2
## P1  2 5
##   3 3 1
##   4 0 1
## 
## , , P3 = 3
## 
##    P2
## P1  2 5
##   3 0 2
##   4 2 1

d.Haz un diagrama de barras apiladas de las preguntas 2 y 3

respuestas <- data.frame(
  Estudiante = 1:10,
  P2 = c(5, 5, 2, 2, 5, 2, 2, 5, 5, 2),
  P3 = c(1, 3, 1, 3, 3, 3, 1, 3, 1, 1)
)

# Calcular la suma de respuestas para cada pregunta
suma_P2 <- sum(respuestas$P2)
suma_P3 <- sum(respuestas$P3)

# Crear el diagrama de barras apiladas
barplot(
  matrix(c(suma_P2, suma_P3), nrow = 1),
  beside = TRUE,
  names.arg = c("P2", "P3"),
  col = c("blue", "green"),
  main = "Respuestas de las preguntas 2 y 3",
  xlab = "Preguntas",
  ylab = "Suma de respuestas"
)

e) Haz un diagrama de barras con las tres preguntas simultáneamente.

estudiantes = c(1,2,3,4,5,6,7,8,9,10)

#e. Haz un diagrama de barras con las tres preguntas simultáneamente.
# Crear una matriz con las frecuencias de las tres preguntas
barplot_matrix = rbind(P1, P2, P3)

# Colores para cada pregunta
colores = c("blue", "orange", "darkseagreen3")

# Crear el diagrama de barras
barplot(barplot_matrix, beside = TRUE, col = colores,
        names.arg = estudiantes,
        main = "Diagrama de Barras de las Tres Preguntas",
        xlab = "Estudiante", ylab = "Valor",
        legend.text = c("P1", "P2", "P3"))

# Agregar leyenda
legend("topright", legend = c("P1", "P2", "P3"), fill = colores)

2.9. Genera 2 vectores de 50 valores cada de una distribución normal con rnorm (50). a) Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.

set.seed(123)  
vector1 <- rnorm(50)
vector2 <- rnorm(50)


print(head(vector1))
## [1] -0.56047565 -0.23017749  1.55870831  0.07050839  0.12928774  1.71506499
print(head(vector2))
## [1]  0.25331851 -0.02854676 -0.04287046  1.36860228 -0.22577099  1.51647060
  1. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
# Realizar la prueba de normalidad para vector1
resultado_test1 <- shapiro.test(vector1)
print(resultado_test1)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector1
## W = 0.98928, p-value = 0.9279
# Realizar la prueba de normalidad para vector2
resultado_test2 <- shapiro.test(vector2)
print(resultado_test2)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector2
## W = 0.99073, p-value = 0.9618
  1. Determine si entre los vectores hay o no diferencias significativas, t-student test
resultado_ttest <- t.test(vector1, vector2)
print(resultado_ttest)
## 
##  Welch Two Sample t-test
## 
## data:  vector1 and vector2
## t = -0.61157, df = 97.951, p-value = 0.5422
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.4754485  0.2514391
## sample estimates:
##  mean of x  mean of y 
## 0.03440355 0.14640827

2.10. Genera un vector de 50 valores por medio de rnorm y un vector de 50 valores por medio rbinom

set.seed(123)  # Para reproducibilidad
vector_normal <- rnorm(50)


print(head(vector_normal))
## [1] -0.56047565 -0.23017749  1.55870831  0.07050839  0.12928774  1.71506499
vector_binomial <- rbinom(50, size = 10, prob = 0.5)

print(head(vector_binomial))
## [1] 5 4 5 8 5 7
  1. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
resultado_test_normal <- shapiro.test(vector_normal)
print(resultado_test_normal)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector_normal
## W = 0.98928, p-value = 0.9279
resultado_test_binomial <- shapiro.test(vector_binomial)
print(resultado_test_binomial)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector_binomial
## W = 0.94735, p-value = 0.02658
  1. Determine si entre los vectores hay o no diferencias significativas, t-student test
resultado_ttest <- t.test(vector_normal, vector_binomial)
print(resultado_ttest)
## 
##  Welch Two Sample t-test
## 
## data:  vector_normal and vector_binomial
## t = -19.202, df = 77.942, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -5.590800 -4.540393
## sample estimates:
##  mean of x  mean of y 
## 0.03440355 5.10000000