# "2.1 ¿Cuál será el resultado de ejecutar las siguientes instrucciones?:"

#a
x = c(1,3,5,7,9)

#b
y = c(2,4,6,7,11,12) 

#c
x+1 
## [1]  2  4  6  8 10
#d
y*2
## [1]  4  8 12 14 22 24
#e
length(x) 
## [1] 5
length(y)
## [1] 6
#f
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
#g
sum(x>5)
## [1] 2
sum(x[x>5])
## [1] 16
#h
sum(x>5 | x< 3) 
## [1] 3
#i
y[2] 
## [1] 4
#j
y[-2] 
## [1]  2  6  7 11 12
#k
y[x]
## [1]  2  6 11 NA NA
#l
#(¿Que significa NA?)
#No Aplica

#m
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: 65241 65665 65998 66014 66547 66857 67025 67447 66958 67002

#a. Crea una variable llamada “millas” que contenga los datos anotados. 
millas <- c(65241, 65665, 65998, 66014, 66547, 66857, 67025, 67447, 66958, 67002)

#b. Crea una nueva variable “kms” y asígnale el valor de “millas” transformado en kms (una milla son 1,609 km). 
kms <- millas * 1.609

#c. ¿Qué resultado produce la función diff aplicada sobre los datos anteriores? 
diff(kms)
## [1]  682.216  535.797   25.744  857.597  498.790  270.312  678.998 -786.801
## [9]   70.796
#d. ¿Qué funciones son adecuadas para resumir estos datos? 
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 siguientes: 47 32 40 36 49 31 49 30 49 35 48 32

#a. ¿Cuánto le ha costado la factura del último año?
sum(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32))
## [1] 478
#b. ¿Cuánto ha pagado en promedio cada mes? 
mean(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32))
## [1] 39.83333
#c. ¿Cuáles son las cantidades mínimas y máximas pagadas? 
min(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32))
## [1] 30
max(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32))
## [1] 49
#d. ¿En qué mes se realizó cada pago? 
data = matrix(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32), nrow = 1, byrow = TRUE)
colnames(data) <- c("enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre")
rownames(data) <- c("Cantidad en Euros")
tabla <- as.table(data)
print(tabla)
##                   enero febrero marzo abril mayo junio julio agosto septiembre
## Cantidad en Euros    47      32    40    36   49    31    49     30         49
##                   octubre noviembre diciembre
## Cantidad en Euros      35        48        32
#e. ¿Cuantos meses pagó más de 40 euros? 
sum(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32) > 40)
## [1] 5
#f. ¿Qué porcentaje del gasto total representa esta cantidad? 
sum(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32) > 40) / sum(c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32)) * 100
## [1] 1.046025
#2.4. Con los datos siguientes: 61 88 73 49 41 72 99 07 12 13 87 91 05 17 97
#a. Haz un diagrama de porcentual 

x <- c(61, 88, 73, 49, 41, 72, 99, 07, 12, 13, 87, 91, 05, 17, 97)
stem(x)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   0 | 57237
##   2 | 
##   4 | 19
##   6 | 123
##   8 | 78179
#b. Obtén resúmenes numéricos de los datos. 
summary(x)
##    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
#c. Diferencias entre summary(x) y fivenum(x)
# La función summary() proporciona un resumen más completo de los datos, incluyendo el mínimo, el primer cuartil, la mediana, el tercer cuartil y el máximo.

# La función fivenum() solo proporciona el mínimo, el primer cuartil, la mediana, el tercer cuartil y el máximo.

# En general, la función summary() es más útil para obtener una visión general de los datos, mientras que la función fivenum() es más útil para obtener información específica sobre la distribución de los datos.

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

#a. Genera 100 valores de una distribución normal con rnorm(100). 
datos <- rnorm(100)

#b. Realiza un histograma de los valores. Repite el proceso un par de veces. ¿Qué observas?
hist(datos)

#Se observa que cada vez que se repite el proceso el histograma cambia de valores

#c. Realiza un resumen numérico de los datos
summary(datos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -1.9011 -0.7512 -0.2050 -0.1420  0.3586  1.9676
#2.6. De forma similar al ejercicio genera 30 valores de una distribución binomial de parámetros (n=5 y p=0,9). 
n <- 5
p <- 0.9
x <- rbinom(30, n, p)

#a. Representa los resultados con un diagrama de barras o de pastel.
barplot(x, main = "Distribución binomial", xlab = "Valores", ylab = "Frecuencia")

pie(x, main = "Distribución binomial", labels = c("Éxito", "Fracaso"))

#b. 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?

#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). 
summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     4.0     5.0     4.4     5.0     5.0
#a. Representa gráficamente estos datos. Qué representación es más adecuada una diagrama boxplot o un diagrama de barras?
#Dado que tenemos datos categóricos (número de fallos) y valores faltantes (NA), un diagrama de barras es más adecuado que un diagrama de caja (boxplot) en este caso.

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)

# Eliminar los valores NA
datos <- datos[!is.na(datos)]


barplot(table(datos), main="Número de Fallos en Intentos de Puesta en Órbita", 
        xlab="Número de Fallos", ylab="Frecuencia")

#b. 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. 

media_errores <- mean(datos, na.rm = TRUE)

# Imprimir la media
print(paste("El número medio de errores es:", media_errores))
## [1] "El número medio de errores es: 0.454545454545455"
#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:

#a. Entra los datos mediante c(), scan(), read.table() y data.entry()
estudiantes <- 1:10
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)

datos <- data.frame(Estudiante = estudiantes, P1, P2, P3)

#b. Tabula los resultados de cada pregunta por separado. 
tabla_P1 <- table(P1)
tabla_P2 <- table(P2)
tabla_P3 <- table(P3)

print("Tabla de Pregunta 1:")
## [1] "Tabla de Pregunta 1:"
print(tabla_P1)
## P1
## 3 4 
## 6 4
print("Tabla de Pregunta 2:")
## [1] "Tabla de Pregunta 2:"
print(tabla_P2)
## P2
## 2 5 
## 5 5
print("Tabla de Pregunta 3:")
## [1] "Tabla de Pregunta 3:"
print(tabla_P3)
## P3
## 1 3 
## 5 5
#c. Realiza tablas de contingencia cruzadas para cada pregunta, de 2 en 2 y las 3 a la vez. 
tabla_cruzada_P1_P2 <- table(P1, P2)
tabla_cruzada_P1_P3 <- table(P1, P3)
tabla_cruzada_P2_P3 <- table(P2, P3)
tabla_cruzada_todas <- table(P1, P2, P3)

print("Tabla de contingencia cruzada P1-P2:")
## [1] "Tabla de contingencia cruzada P1-P2:"
print(tabla_cruzada_P1_P2)
##    P2
## P1  2 5
##   3 3 3
##   4 2 2
print("Tabla de contingencia cruzada P1-P3:")
## [1] "Tabla de contingencia cruzada P1-P3:"
print(tabla_cruzada_P1_P3)
##    P3
## P1  1 3
##   3 4 2
##   4 1 3
print("Tabla de contingencia cruzada P2-P3:")
## [1] "Tabla de contingencia cruzada P2-P3:"
print(tabla_cruzada_P2_P3)
##    P3
## P2  1 3
##   2 3 2
##   5 2 3
print("Tabla de contingencia cruzada de todas las preguntas:")
## [1] "Tabla de contingencia cruzada de todas las preguntas:"
print(tabla_cruzada_todas)
## , , 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. 
barplot_matrix <- rbind(P2, P3)

barplot(barplot_matrix, beside = TRUE, col = c("thistle2", "indianred1"), 
        names.arg = estudiantes, 
        main = "Diagrama de Barras Apiladas de P2 y P3",
        xlab = "Estudiante", ylab = "Valor",
        legend.text = c("P2", "P3"))

legend("topright", legend = c("P2", "P3"), fill = c("thistle2", "indianred1"))

#e. Haz un diagrama de barras con las tres preguntas simultáneamente.
barplot_matrix_todas <- rbind(P1, P2, P3)

barplot(barplot_matrix_todas, beside = TRUE, col = c("blueviolet", "thistle2", "indianred1"), 
        names.arg = estudiantes, 
        main = "Diagrama de Barras de las Tres Preguntas",
        xlab = "Estudiante", ylab = "Valor",
        legend.text = c("P1", "P2", "P3"))

legend("topright", legend = c("P1", "P2", "P3"), fill = c("blueviolet", "thistle2", "indianred1"))

#2.9. Genera 2 vectores de 50 valores cada de una distribución normal con rnorm (50).
vectorA=rnorm(50)
vectorb=rnorm(50)

#a. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
shapiro.test(vectorA)
## 
##  Shapiro-Wilk normality test
## 
## data:  vectorA
## W = 0.96554, p-value = 0.1516
shapiro.test(vectorb)
## 
##  Shapiro-Wilk normality test
## 
## data:  vectorb
## W = 0.98448, p-value = 0.749
#b) Determine si entre los vectores hay o no diferencias significativas, t-student test
t.test(vectorA)
## 
##  One Sample t-test
## 
## data:  vectorA
## t = -0.43784, df = 49, p-value = 0.6634
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.3687781  0.2368302
## sample estimates:
##   mean of x 
## -0.06597398
t.test(vectorb)
## 
##  One Sample t-test
## 
## data:  vectorb
## t = -1.3503, df = 49, p-value = 0.1831
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.43949961  0.08623523
## sample estimates:
##  mean of x 
## -0.1766322
#2.10. Genera un vector de 50 valores por medio de rnorm y un vector de 50 valores por medio rbinom. 
ran=rbinom(50,6,0.6)
ran2=rnorm(50)

#c. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector
shapiro.test(ran)
## 
##  Shapiro-Wilk normality test
## 
## data:  ran
## W = 0.92865, p-value = 0.004915
#d. Determine si entre los vectores hay o no diferencias significativas, t-student test
t.test(ran)
## 
##  One Sample t-test
## 
## data:  ran
## t = 20.254, df = 49, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  3.314875 4.045125
## sample estimates:
## mean of x 
##      3.68