TALLER

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

B

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

C

#c
x + 1 
## [1]  2  4  6  8 10

D

y*2
## [1]  4  8 12 14 22 24

E

#e
length(x) 
## [1] 5
length(y)
## [1] 6

F

#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

#g
sum(x > 5)
## [1] 2
sum(x[x > 5])
## [1] 16

H

#h
sum(x>5 | x< 3)
## [1] 3

I

#i
y[2] 
## [1] 4

J

#j
y[-2]
## [1]  2  6  7 11 12

K

#k
y[x]
## [1]  2  6 11 NA NA

I

#i
#(¿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

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

B

# 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

# c) ¿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

D

# 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)

# Datos de las cantidades pagadas en euros durante el último año
cantidades <- c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32)

# a) ¿Cuánto le ha costado la factura del último año?
total_pago <- sum(cantidades)
print(paste("El costo total de la factura del último año es:", total_pago, "euros"))
## [1] "El costo total de la factura del último año es: 478 euros"
# b) ¿Cuánto ha pagado en promedio cada mes?
promedio_pago <- mean(cantidades)
print(paste("El promedio de pago por mes es:", promedio_pago, "euros"))
## [1] "El promedio de pago por mes es: 39.8333333333333 euros"
# c) ¿Cuáles son las cantidades mínimas y máximas pagadas?
min_pago <- min(cantidades)
max_pago <- max(cantidades)
print(paste("La cantidad mínima pagada fue:", min_pago, "euros"))
## [1] "La cantidad mínima pagada fue: 30 euros"
print(paste("La cantidad máxima pagada fue:", max_pago, "euros"))
## [1] "La cantidad máxima pagada fue: 49 euros"
#D)¿En qué mes se realizó cada pago?
# Datos
meses <- 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)

# Crear un dataframe con los datos
datos <- data.frame(Mes = meses, Cantidad = paste(cantidades, "euros"))

# Imprimir el cuadro
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
# e) ¿Cuantos meses pagó más de 40 euros?
meses_mas_40 <- sum(cantidades > 40)
print(paste("Número de meses en los que se pagaron más de 40 euros:", meses_mas_40))
## [1] "Número de meses en los que se pagaron más de 40 euros: 5"
# f) ¿Qué porcentaje del gasto total representa esta cantidad?
porcentaje_mas_40 <- (meses_mas_40 / length(cantidades)) * 100
print(paste("El porcentaje del gasto total que representa el pago de más de 40 euros es:", porcentaje_mas_40, "%"))
## [1] "El porcentaje del gasto total que representa el pago de más de 40 euros es: 41.6666666666667 %"

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

#a)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 pastel
pie(x, labels = "", main = "Diagrama de Porcentual", col = rainbow(length(x)))

# Creamos una leyenda separada para mostrar los colores y los porcentajes
legend("right", legend = paste(porcentajes, "%"), fill = rainbow(length(x)), title = "Porcentaje")

B)

# b) Obtén resúmenes numéricos de los datos.
#Resúmenes numéricos
resumen <- summary(x)

# Imprimir el resumen
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
#c)¿Qué diferencias hay entre summary(x) y fivenum(x)? 

#summary(x): Esta función proporciona un resumen más completo de los datos, que incluye la media, la mediana, los cuartiles y los valores mínimo y máximo.

#fivenum(x): Esta función devuelve únicamente cinco números resumen, que son el mínimo, el primer cuartil (Q1), la mediana (Q2), el tercer cuartil (Q3) y el máximo. Estos son los cinco números necesarios para construir un diagrama de caja (boxplot).

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

#a)  Generar 100 valores de una distribución normal con rnorm(100):
# Generar 100 valores de una distribución normal
datos <- rnorm(100)
#b) Realizar un histograma de los valores:
# Instalar y cargar el paquete ggplot2 si aún no lo tienes instalado
# install.packages("ggplot2")
library(ggplot2)

# Graficar el histograma con límites específicos en el eje x
ggplot(data.frame(x = datos), aes(x)) +
  geom_histogram(binwidth = 0.5, fill = "lightblue", color = "black") +
  labs(title = "Histograma de datos aleatorios",
       x = "Valor", y = "Frecuencia") +
  xlim(-3, 2)
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_bar()`).

C)

#c) Realizar un resumen numérico de los datos:
# Resumen numérico de los datos
summary(datos)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -2.50524 -0.88646 -0.05843 -0.11447  0.48366  2.76467

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

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

Diagrama de barra

pie(x,
    main = "Distribución binomial",
    labels = NULL,
    col = rainbow(length(x)),  # Utilizamos diferentes colores para cada porción del pastel
    border = "white"  # Añadimos bordes blancos para separar las porciones
)

# Calculamos el porcentaje de éxitos y fracasos
porcentaje_exito <- round(mean(x == 5) * 100, 2)
porcentaje_fracaso <- 100 - porcentaje_exito

# Agregamos etiquetas de éxito y fracaso
etiquetas <- c(paste("Éxito:", porcentaje_exito, "%"), paste("Fracaso:", porcentaje_fracaso, "%"))
legend("topright", legend = etiquetas, fill = rainbow(2), title = "Resultado")

forma de pastel B)

#b) Realiza un resumen numérico de los datos y compáralo con el del ejercicio anterior.
summary(datos)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -2.50524 -0.88646 -0.05843 -0.11447  0.48366  2.76467

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). A)

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

# Diagrama de barras
barplot(table(fallos),
        main = "Número de fallos en intentos de puesta en órbita",
        xlab = "Número de fallos",
        ylab = "Frecuencia")

# Diagrama de caja
boxplot(fallos,
        main = "Número de fallos en intentos de puesta en órbita",
        ylab = "Número de fallos")

B)

#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. 
# Tabla de frecuencias
tabla_frecuencias <- table(fallos)
print(tabla_frecuencias)
## fallos
##  0  1  2  3 
## 15  5  1  1
# Calcular el número medio de errores
media_errores <- mean(fallos, 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:

# Crear la tabla
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)

# Agregar nombres de filas y columnas
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")

# Mostrar la tabla
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
#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
# Tablas de contingencia cruzadas para cada pregunta de 2 en 2
tabla_P1_P2 <- table(P1, P2)
tabla_P1_P3 <- table(P1, P3)
tabla_P2_P3 <- table(P2, P3)

# Tabla de contingencia cruzada para las tres preguntas simultáneamente
tabla_total <- table(P1, P2, P3)

# Mostrar las tablas
print("Tabla de contingencia cruzada entre P1 y P2:")
## [1] "Tabla de contingencia cruzada entre P1 y P2:"
print(tabla_P1_P2)
##    P2
## P1  2 5
##   3 3 3
##   4 2 2
print("Tabla de contingencia cruzada entre P1 y P3:")
## [1] "Tabla de contingencia cruzada entre P1 y P3:"
print(tabla_P1_P3)
##    P3
## P1  1 3
##   3 4 2
##   4 1 3
print("Tabla de contingencia cruzada entre P2 y P3:")
## [1] "Tabla de contingencia cruzada entre P2 y P3:"
print(tabla_P2_P3)
##    P3
## P2  1 3
##   2 3 2
##   5 2 3
print("Tabla de contingencia cruzada entre las tres preguntas:")
## [1] "Tabla de contingencia cruzada entre las tres preguntas:"
print(tabla_total)
## , , 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("blue1", "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("blue1", "indianred1"))

E)

#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("cornflowerblue", "indianred1", "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).

vectorA=rnorm(50)
vectorb=rnorm(50)
#a. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
# Genera los vectores de 50 valores cada uno
vector1 <- rnorm(50)
vector2 <- rnorm(50)

# Realiza la prueba de Shapiro-Wilk para el primer vector
shapiro.test(vector1)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector1
## W = 0.97631, p-value = 0.4088
# Realiza la prueba de Shapiro-Wilk para el segundo vector
shapiro.test(vector2)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector2
## W = 0.98551, p-value = 0.7933
#b) Para determinar si hay diferencias significativas entre los dos vectores utilizando la prueba t de Student, puedes hacer lo siguiente:
t.test(vectorA)
## 
##  One Sample t-test
## 
## data:  vectorA
## t = -1.4407, df = 49, p-value = 0.156
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.52772314  0.08701774
## sample estimates:
##  mean of x 
## -0.2203527
t.test(vectorb)
## 
##  One Sample t-test
## 
## data:  vectorb
## t = -0.11114, df = 49, p-value = 0.912
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.2279759  0.2040801
## sample estimates:
##  mean of x 
## -0.0119479

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.92346, p-value = 0.003153
#d. Determine si entre los vectores hay o no diferencias significativas, t-student test
t.test(ran)
## 
##  One Sample t-test
## 
## data:  ran
## t = 21.054, df = 49, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  3.184028 3.855972
## sample estimates:
## mean of x 
##      3.52