Pregunta 1

¿Cuál será el resultado de ejecutar las siguientes instrucciones?

#A). x = c(1,3,5,7,9
x = c(1,3,5,7,9) 
#Resultado de la primer instrucción
x
## [1] 1 3 5 7 9
#B). y = c(2,4,6,7,11,12) 
y = c(2,4,6,7,11,12)
#Resultado de la segunda instrucción
y
## [1]  2  4  6  7 11 12
#C) x+1 
#Resultado de la tercer instrucción
x+1 
## [1]  2  4  6  8 10
#D). y*2 
#Resultado de la cuarta instrucción
y*2 
## [1]  4  8 12 14 22 24
#E). length(x) and length(y) 
#Tamaño del vector X
length(x) 
## [1] 5
#Tamaño del vector Y
length(y) 
## [1] 6
#F). x + y 
#Resultado de la sexta instrucción
x_plus_y = x + y
## Warning in x + y: longer object length is not a multiple of shorter object
## length
x_plus_y
## [1]  3  7 11 14 20 13
#G). sum(x>5) and sum(x[x>5]) 
#sum(x>5)
sum(x>5)
## [1] 2
#sum(x[x>5])
sum(x[x>5]) 
## [1] 16
#H). sum(x>5 | x< 3) 
#Resultado de la octava instrucción
sum(x>5 | x< 3) 
## [1] 3
#I). y[2] 
#Resultado de la novena instrucción
y[2] 
## [1] 4
#J). y[-2] 
#Resultado de la decima instrucción 
y[-2] 
## [1]  2  6  7 11 12
#K). y[x]
#Resultado de la onceava instrucción 
y[x]
## [1]  2  6 11 NA NA
#I). (¿Que significa NA?) 
#En R, NA representa un valor "No Available" o "Not Available", es decir, un valor faltante o no disponible. Es utilizado frecuentemente en análisis de datos para marcar datos que están ausentes o que no se han recogido. 

#M)y[y>=8] 
#Resultado de la doceava instrucción
y[y>=8] 
## [1] 11 12

Pregunta 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)
millas
##  [1] 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
kms
##  [1] 104972.8 105655.0 106190.8 106216.5 107074.1 107572.9 107843.2 108522.2
##  [9] 107735.4 107806.2
#C). ¿Qué resultado produce la función diff aplicada sobre los datos anteriores? 
diferencias=diff(millas)
diferencias
## [1]  424  333   16  533  310  168  422 -489   44
#D). ¿Qué funciones son adecuadas para resumir estos datos? 
#Para resumir los datos del vector millas en R, se pueden utilizar varias funciones que proporcionan estadísticas descriptivas, lo cual es muy útil para obtener una visión general rápida de la distribución y las características de tus datos

#summary():
#Esta función proporciona un resumen estadístico que incluye el mínimo, el máximo, la mediana, la media, y los cuartiles (1er y 3er).

#mean():
#Calcula la media aritmética de los datos.

#median():
#Encuentra la mediana de los datos, que es el valor central en un conjunto de datos ordenados.

Punto 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:

costo=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_costo_anual=sum(costo)
total_costo_anual
## [1] 478
#B). ¿Cuánto ha pagado en promedio cada mes? 
promedio_mensual=mean(costo)
promedio_mensual
## [1] 39.83333
#C). ¿Cuáles son las cantidades mínimas y máximas pagadas?
costo_minimo=min(costo)
costo_maximo=max(costo)

costo_minimo
## [1] 30
costo_maximo
## [1] 49
#D).¿En qué mes se realizó cada pago? 
nombres_meses=c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")

#Nombres de meses al vector de costos
names(costo)=nombres_meses

#Cada costo tiene un nombre de mes asociado
costo
##      Enero    Febrero      Marzo      Abril       Mayo      Junio      Julio 
##         47         32         40         36         49         31         49 
##     Agosto Septiembre    Octubre  Noviembre  Diciembre 
##         30         49         35         48         32
#E). ¿Cuantos meses pagó más de 40 euros? 
meses_mayor_40=sum(costo > 40)
meses_mayor_40
## [1] 5
#F). ¿Qué porcentaje del gasto total representa esta cantidad?
costo_mayor_40=costo[costo > 40]
suma_costo_mayor_40=sum(costo_mayor_40)

# Calcular el porcentaje en relación con el gasto total anual
porcentaje_gasto=(suma_costo_mayor_40 / sum(costo)) * 100
porcentaje_gasto
## [1] 50.62762

#Punto 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 
datos <- c(61, 88, 73, 49, 41, 72, 99, 7, 12, 13, 87, 91, 5, 17, 97)

# Calcular porcentajes
porcentajes <- (datos / sum(datos)) * 100

# Crear un vector con etiquetas para cada número
etiquetas <- as.character(datos)

# Crear el gráfico de barras de los porcentajes
barplot(porcentajes, names.arg = etiquetas, col = "skyblue", main = "Diagrama de Porcentajes")

#B). Obtén resúmenes numéricos de los datos.
# Resumen estadístico básico
summary(datos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5.00   15.00   61.00   54.13   87.50   99.00
# Media (promedio)
media <- mean(datos)
media
## [1] 54.13333
# Mediana (valor central)
mediana <- median(datos)
mediana
## [1] 61
# Mínimo y máximo
minimo <- min(datos)
maximo <- max(datos)

# Varianza y desviación estándar
varianza <- var(datos)
desviacion <- sd(datos)

# Imprimir resultados
minimo
## [1] 5
maximo
## [1] 99
varianza
## [1] 1274.267
desviacion
## [1] 35.69687
#C). ¿Qué diferencias hay entre summary(x) y fivenum(x)?
#summary(x) es más completo y proporciona más información estadística general sobre tus datos, mientras que fivenum(x) se enfoca específicamente en los cinco números resumen clave para visualizar la distribución de los datos mediante un diagrama de caja. 

Punto 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_normales=rnorm(100)
print(datos_normales)
##   [1]  0.265937025 -0.050101891 -0.787184266 -0.404769116  0.112055233
##   [6]  0.694651138  0.911927412 -0.444936762 -1.495847940  0.751397090
##  [11] -0.349802422  0.663515062  2.350697263  1.193001313 -0.255994682
##  [16] -0.700505005 -0.247352564  0.072992957 -1.302499596  1.545311078
##  [21]  0.436340357  0.941920721  0.475863696  0.033210130 -0.687854221
##  [26] -0.912243553  0.525575447  0.439139488  1.622491612 -0.652121680
##  [31]  0.407890175  0.431093431 -1.826796707 -0.950818961  0.334904099
##  [36]  0.089151305 -0.639655538  0.471610873  0.997055670  0.977830809
##  [41] -0.140537767  0.875640364 -0.799643467 -0.856718714 -1.097582307
##  [46]  0.811240427 -0.557909047  2.341089116  1.166808563  1.387469920
##  [51] -0.729441492  1.815259425 -1.028566694 -1.224701468 -0.396362680
##  [56] -1.042855795  1.522582641  0.076640366  1.091192117  0.457231542
##  [61]  0.521722886 -0.192997970  0.282425878  1.119915194 -0.012229769
##  [66] -0.552921304 -0.711915755 -0.530563037 -1.092264641  0.003521043
##  [71] -0.613809409  0.640199643 -0.986182513  0.963636516  2.718007187
##  [76] -1.722790989  0.261858089 -0.589634066  1.586380727  0.611228734
##  [81] -0.476428570  0.818160683  1.242410523 -1.578771809 -1.083301835
##  [86] -1.755483057 -1.243909538 -1.647348085  1.299179827  0.093302836
##  [91]  0.348544588 -1.316504194  1.045159128  0.613503155  1.127295930
##  [96] -0.268850976 -1.400137096 -0.779938748 -1.463689549 -2.149418841
#B). Realiza un histograma de los valores. Repite el proceso un par de veces. ¿Qué observas?
# Crea un histograma de los datos
hist(datos_normales, breaks = 10, col = "lightblue", main = "Histograma de datos normales")

# Repite el proceso un par de veces
for (i in 1:2) {
  datos_normales=rnorm(100)
  hist(datos_normales, breaks = 10, col = "lightblue", main = paste("Histograma de datos normales - Repetición", i))
}

#Se observa que la forma de la distribución cambia ligeramente en cada repetición debido a la naturaleza aleatoria de la generación de datos. Sin embargo, la distribución general seguirá siendo normal en la mayoría de los casos, lo que es característico de la distribución normal.

#C). Realiza un resumen numérico de los datos.
# Muestra un resumen numérico de los datos
summary(datos_normales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -2.3105 -0.9216 -0.1457 -0.1554  0.4646  2.1523

Punto 6

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

#A). Representa los resultados con un diagrama de barras o de pastel.
datos_binomiales=rbinom(30, size = 5, prob = 0.9)

# Cuenta la frecuencia de cada valor
frecuencia=table(datos_binomiales)

#Diagrama de barras
barplot(frecuencia, main = "Diagrama de barras de distribución binomial",
        xlab = "Valores", ylab = "Frecuencia", col = "lightblue")

#Diagrama de pastel
pie(frecuencia, main = "Diagrama de pastel de distribución binomial",
    col = rainbow(length(frecuencia)))

#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?
# Muestra un resumen numérico de los datos binomiales
summary(datos_binomiales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.000   4.000   5.000   4.467   5.000   5.000
# Muestra un resumen numérico de los datos normales generados anteriormente
summary(datos_normales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -2.3105 -0.9216 -0.1457 -0.1554  0.4646  2.1523
#Si se desea obtener un resumen similar entre ambos tipos de distribuciones, tocaria calcular la media y la desviación estándar de los datos binomiales para compararlas con las de los datos normales. Esto dará una idea de cómo difieren en términos de centralidad y dispersión.

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

# Datos de fallos en los intentos de puesta en órbita
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)

# Eliminar los valores NA
fallos=fallos[!is.na(fallos)]

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

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

# Diagrama boxplot
boxplot(fallos, horizontal = TRUE, main = "Diagrama boxplot de fallos en intentos de puesta en órbita",
        xlab = "Número de fallos")

#El diagrama de barras mostrará la frecuencia de cada número de fallos, lo que puede ser útil para tener una idea rápida de la distribución de los datos. Mientras tanto, el diagrama boxplot proporcionará una representación visual de la distribución, mostrando la mediana, los cuartiles y los posibles valores atípicos.
#Ambosson adecuados, la desición final se tomará deacuerdo a como se prefiera.

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

# Tabular los datos
tabla_fallos=table(fallos)
print(tabla_fallos)
## 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

Punto 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()
respuestas <- data.frame(
  Estudiante = 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)
)
# Ingreso de datos usando c()
#respuestas_c=data.frame(
# Estudiante = 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)
#)


#Estructura de los datos
print(respuestas)
##    Estudiante P1 P2 P3
## 1           1  3  5  1
## 2           2  3  5  3
## 3           3  3  2  1
## 4           4  4  2  3
## 5           5  3  5  3
## 6           6  4  2  3
## 7           7  3  2  1
## 8           8  4  5  3
## 9           9  4  5  1
## 10         10  3  2  1
# Ingreso de datos usando scan()
#respuestas_scan <- data.frame(
#  Estudiante = 1:10,
#  P1 = scan(),
#  P2 = scan(),
#  P3 = scan()
#)
# Luego de ingresar los datos uno por uno, presiona Enter y Ctrl+D para finalizar la entrada.

# Crear un archivo de texto (por ejemplo, respuestas.txt) con los datos y luego leerlo
#respuestas_read <- read.table("respuestas.txt", header = TRUE)
# Asegúrate de que el archivo respuestas.txt esté en el directorio de trabajo de R.

# Ingreso de datos usando data.entry()
#respuestas_entry <- data.frame(
#  Estudiante = 1:10,
#  P1 = numeric(10),
#  P2 = numeric(10),
#  P3 = numeric(10)
#)
#data.entry(respuestas_entry)
# Se abrirá una ventana de edición donde puedes ingresar los datos.

#B). Tabula los resultados de cada pregunta por separado. 
# Tabular los resultados de cada pregunta
tabla_p1=table(respuestas$P1)
tabla_p2=table(respuestas$P2)
tabla_p3=table(respuestas$P3)

#Tablas de resultados
print("Tabla de resultados para P1:")
## [1] "Tabla de resultados para P1:"
print(tabla_p1)
## 
## 3 4 
## 6 4
print("Tabla de resultados para P2:")
## [1] "Tabla de resultados para P2:"
print(tabla_p2)
## 
## 2 5 
## 5 5
print("Tabla de resultados para P3:")
## [1] "Tabla de resultados para P3:"
print(tabla_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 para P1 y P2:
tabla_p1_p2=table(respuestas$P1, respuestas$P2)
print("Tabla de contingencia cruzada para P1 y P2:")
## [1] "Tabla de contingencia cruzada para P1 y P2:"
print(tabla_p1_p2)
##    
##     2 5
##   3 3 3
##   4 2 2
#Tabla para P1 y P3:
tabla_p1_p3=table(respuestas$P1, respuestas$P3)
print("Tabla de contingencia cruzada para P1 y P3:")
## [1] "Tabla de contingencia cruzada para P1 y P3:"
print(tabla_p1_p3)
##    
##     1 3
##   3 4 2
##   4 1 3
#Tabla para P2 y P3:
tabla_p2_p3=table(respuestas$P2, respuestas$P3)
print("Tabla de contingencia cruzada para P2 y P3:")
## [1] "Tabla de contingencia cruzada para P2 y P3:"
print(tabla_p2_p3)
##    
##     1 3
##   2 3 2
##   5 2 3
#Tabla para las tres preguntas juntas:
tabla_todas=table(respuestas$P1, respuestas$P2, respuestas$P3)
print("Tabla de contingencia cruzada para las tres preguntas:")
## [1] "Tabla de contingencia cruzada para las tres preguntas:"
print(tabla_todas)
## , ,  = 1
## 
##    
##     2 5
##   3 3 1
##   4 0 1
## 
## , ,  = 3
## 
##    
##     2 5
##   3 0 2
##   4 2 1
#D). Haz un diagrama de barras apiladas de las preguntas 2 y 3
# Calcular la frecuencia de respuestas para P2 y P3
tabla_p2_p3=table(respuestas$P2, respuestas$P3)

#Vector de colores para las barras apiladas
colores=c("lightblue", "lightgreen")

#Diagrama de barras apiladas
barplot(tabla_p2_p3, beside = TRUE, col = colores,
        legend.text = TRUE, args.legend = list(title = "P3"), 
        main = "Diagrama de Barras Apiladas P2 y P3",
        xlab = "Respuestas P2", ylab = "Frecuencia")

#E). Haz un diagrama de barras con las tres preguntas simultáneamente.
# Combinar las respuestas en un nuevo marco de datos
respuestas_combinadas=data.frame(
  Pregunta = rep(c("P1", "P2", "P3"), each = nrow(respuestas)),
  Respuesta = c(respuestas$P1, respuestas$P2, respuestas$P3)
)

# Diagrama de barras
barplot(table(respuestas_combinadas$Pregunta, respuestas_combinadas$Respuesta),
        beside = TRUE, col = rainbow(nrow(table(respuestas_combinadas$Pregunta))),
        legend.text = TRUE, args.legend = list(title = "Respuestas"),
        main = "Diagrama de Barras de Respuestas a las Tres Preguntas",
        xlab = "Preguntas", ylab = "Frecuencia")

Punto 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.
# Generar dos vectores de 50 valores cada uno de una distribución normal
set.seed(123)  # Establecer semilla para reproducibilidad
vector1=rnorm(50)
vector2=rnorm(50)

# Realizar la prueba de normalidad Shapiro-Wilk para cada vector
shapiro_test_vector1=shapiro.test(vector1)
shapiro_test_vector2=shapiro.test(vector2)

# Mostrar los resultados de las pruebas de normalidad
print("Resultados de la prueba de normalidad Shapiro-Wilk para el vector 1:")
## [1] "Resultados de la prueba de normalidad Shapiro-Wilk para el vector 1:"
print(shapiro_test_vector1)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector1
## W = 0.98928, p-value = 0.9279
print("Resultados de la prueba de normalidad Shapiro-Wilk para el vector 2:")
## [1] "Resultados de la prueba de normalidad Shapiro-Wilk para el vector 2:"
print(shapiro_test_vector2)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector2
## W = 0.99073, p-value = 0.9618
#B). Determine si entre los vectores hay o no diferencias significativas, t-student test
# Realizar una prueba t de Student para muestras independientes
t_test=t.test(vector1, vector2)

# Mostrar los resultados del t-test
print("Resultados del t-test:")
## [1] "Resultados del t-test:"
print(t_test)
## 
##  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

Punto 10

#A). Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
# Generar un vector de 50 valores de una distribución normal
set.seed(123)  # Establecer semilla para reproducibilidad
vector_normal=rnorm(50)

# Generar un vector de 50 valores de una distribución binomial
vector_binomial=rbinom(50, size = 10, prob = 0.5)  # Ejemplo de distribución binomial con n=10 y p=0.5

# Realizar la prueba de normalidad Shapiro-Wilk para cada vector
shapiro_test_normal=shapiro.test(vector_normal)
shapiro_test_binomial=shapiro.test(vector_binomial)

# Mostrar los resultados de las pruebas de normalidad
print("Resultados de la prueba de normalidad Shapiro-Wilk para el vector normal:")
## [1] "Resultados de la prueba de normalidad Shapiro-Wilk para el vector normal:"
print(shapiro_test_normal)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector_normal
## W = 0.98928, p-value = 0.9279
print("Resultados de la prueba de normalidad Shapiro-Wilk para el vector binomial:")
## [1] "Resultados de la prueba de normalidad Shapiro-Wilk para el vector binomial:"
print(shapiro_test_binomial)
## 
##  Shapiro-Wilk normality test
## 
## data:  vector_binomial
## W = 0.94735, p-value = 0.02658
#B). Determine si entre los vectores hay o no diferencias significativas, t-student test
# Realizar una prueba t de Student para muestras independientes
t_test=t.test(vector_normal, vector_binomial)

# Mostrar los resultados del t-test
print("Resultados del t-test para determinar diferencias significativas entre los vectores:")
## [1] "Resultados del t-test para determinar diferencias significativas entre los vectores:"
print(t_test)
## 
##  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