2.1. ¿Cuál será el resultado de ejecutar las siguientes instrucciones?:
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
NA
## [1] NA
NA representa “Not Available” y se utiliza en R para indicar valores faltantes o no disponibles.
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
diferencias_kms = diff(kms)
diferencias_millas = diff(millas)
print(diferencias_kms)
## [1] 682.216 535.797 25.744 857.597 498.790 270.312 678.998 -786.801
## [9] 70.796
print(diferencias_millas)
## [1] 424 333 16 533 310 168 422 -489 44
summary(kms)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 104973 106197 107324 106959 107789 108522
summary(millas)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 65241 66002 66702 66475 66991 67447
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:
facturas = c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32)
total_facturas <- sum(facturas)
print(paste("El total gastado en el ultimo ano es:", total_facturas, "euros"))
## [1] "El total gastado en el ultimo ano es: 478 euros"
promedio_mensual = mean(facturas)
print(paste("El promedio mensual de gastos es:", promedio_mensual, "euros"))
## [1] "El promedio mensual de gastos es: 39.8333333333333 euros"
minimo = min(facturas)
maximo = max(facturas)
print(paste("El minimo pago realizado fue:", minimo, "euros"))
## [1] "El minimo pago realizado fue: 30 euros"
print(paste("El maximo pago realizado fue:", maximo, "euros"))
## [1] "El maximo pago realizado fue: 49 euros"
meses = c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
for (i in 1:length(meses)) {
print(paste("En", meses[i], "se realiz0 un pago de", facturas[i], "euros"))
}
## [1] "En Enero se realiz0 un pago de 47 euros"
## [1] "En Febrero se realiz0 un pago de 32 euros"
## [1] "En Marzo se realiz0 un pago de 40 euros"
## [1] "En Abril se realiz0 un pago de 36 euros"
## [1] "En Mayo se realiz0 un pago de 49 euros"
## [1] "En Junio se realiz0 un pago de 31 euros"
## [1] "En Julio se realiz0 un pago de 49 euros"
## [1] "En Agosto se realiz0 un pago de 30 euros"
## [1] "En Septiembre se realiz0 un pago de 49 euros"
## [1] "En Octubre se realiz0 un pago de 35 euros"
## [1] "En Noviembre se realiz0 un pago de 48 euros"
## [1] "En Diciembre se realiz0 un pago de 32 euros"
meses_mas_40 = sum(facturas > 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"
gasto_mas_40 = sum(facturas[facturas > 40])
porcentaje_gasto_mas_40 <- (gasto_mas_40 / total_facturas) * 100
print(paste("El porcentaje del gasto total representado por pagos superiores a 40 euros es:", round(porcentaje_gasto_mas_40, 2), "%"))
## [1] "El porcentaje del gasto total representado por pagos superiores a 40 euros es: 50.63 %"
2.4. Con los datos siguientes:
datos = c(61, 88, 73, 49, 41, 72, 99, 7, 12, 13, 87, 91, 5, 17, 97)
porcentaje = prop.table(table(datos)) * 100
pie(porcentaje, main = "Diagrama de porcentual")
resumen_num = summary(datos)
print("Resumen numérico:")
## [1] "Resumen numérico:"
print(resumen_num)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.00 15.00 61.00 54.13 87.50 99.00
resumen_summary = summary(datos)
print("Resumen numerico con summary():")
## [1] "Resumen numerico con summary():"
print(resumen_summary)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.00 15.00 61.00 54.13 87.50 99.00
resumen_fivenum = fivenum(datos)
print("Resumen numerico con fivenum():")
## [1] "Resumen numerico con fivenum():"
print(resumen_fivenum)
## [1] 5.0 15.0 61.0 87.5 99.0
summary(x) proporciona un resumen más completo de los datos, incluyendo la media, mediana, mínimo, máximo y los cuartiles. Por otro lado, fivenum(x) proporciona solo cinco números resumen: mínimo, primer cuartil, mediana, tercer cuartil y máximo.
2.5. R permite generar datos aleatorios con gran facilidad mediante instrucciones específicas que empiezan con “r”
datos_ram = rnorm(100)
hist(datos_ram, main = "Histograma de distribucion normal", xlab = "Valores", ylab = "Frecuencia", col = "darkred")
Cada vez que se ejecuta rnom(100) nuevos datos ocupa la variabale datos_ram, por lo que el histograma y el resumen cambian
resumen_num1 = summary(datos_ram)
print("Resumen numerico:")
## [1] "Resumen numerico:"
print(resumen_num1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.83903 -0.54859 0.12365 0.06544 0.73338 2.74110
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_binomiales = rbinom(30, size = 5, prob = 0.9)
frecuencia = table(datos_binomiales)
porcentajes = prop.table(frecuencia) * 100
pie(porcentajes, main = "Distribucion binomial")
resumen_numerico_binomial = summary(datos_binomiales)
print("Resumen numerico:")
## [1] "Resumen numerico:"
print(resumen_numerico_binomial)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 4.000 5.000 4.467 5.000 5.000
print("Resumen numerico del ejercicio anterior:")
## [1] "Resumen numerico del ejercicio anterior:"
print(resumen_num1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.83903 -0.54859 0.12365 0.06544 0.73338 2.74110
Para obtener un resumen similar entre los datos generados con la distribución binomial y los datos generados con la distribución normal, podrías ajustar los parámetros de la distribución binomial de tal manera que su forma y dispersión se asemejen más a los datos generados con la distribución normal.
2.7. El número de fallos en los 23 primeros intentos de puesta en órbita de un satélite fue:
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)
par(mfrow = c(1, 2))
barplot(table(fallos, useNA = "ifany"), main = "Diagrama de barras de fallos", xlab = "Numero de fallos", ylab = "Frecuencia", col = "skyblue")
boxplot(fallos, main = "Diagrama de caja de fallos", ylab = "Numero de fallos", col = "darkblue")
El diagrama de barras es más adecuado porque estamos interesados en visualizar la frecuencia de cada valor de fallo. Cada barra representa un valor de fallo y su altura muestra con claridad cuántas veces ocurrió ese valor en los intentos de poner en órbita el satélite. Esto nos permite una fácil comparación entre los diferentes valores de fallo y una comprensión rápida de la distribución de los fallos en los intentos.
tabla_fallos = table(fallos, useNA = "ifany")
print("Tabla de fallos:")
## [1] "Tabla de fallos:"
print(tabla_fallos)
## fallos
## 0 1 2 3 <NA>
## 15 5 1 1 1
media_fallos = mean(fallos, na.rm = TRUE)
print("Numero medio de errores:")
## [1] "Numero medio de errores:"
print(media_fallos)
## [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:
# Datos mediante c()
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)
# Datos mediante scan()
cat("Introduce los datos para P1: ") # 3 3 3 4 3 4 3 4 4 3
## Introduce los datos para P1:
P1_scan = scan()
cat("Introduce los datos para P2: ") # 5 5 2 2 5 2 2 5 5 2
## Introduce los datos para P2:
P2_scan = scan()
cat("Introduce los datos para P3: ") # 1 3 1 3 3 3 1 3 1 1
## Introduce los datos para P3:
P3_scan = scan()
# Datos mediante read.table()
datos = read.table(text = "Estudiante P1 P2 P3
1 3 5 1
2 3 5 3
3 3 2 1
4 4 2 3
5 3 5 3
6 4 2 3
7 3 2 1
8 4 5 3
9 4 5 1
10 3 2 1", header = TRUE)
P1_readtable = datos$P1
P2_readtable = datos$P2
P3_readtable = datos$P3
# Datos mediante data.entry()
datos_entry = data.frame(Estudiante = 1:10, P1 = P1, P2 = P2, P3 = P3)
data.entry(datos_entry)
# Imprimir los datos ingresados
print("Datos ingresados mediante c():")
## [1] "Datos ingresados mediante c():"
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
print("Datos ingresados mediante scan():")
## [1] "Datos ingresados mediante scan():"
print(P1_scan)
## numeric(0)
print(P2_scan)
## numeric(0)
print(P3_scan)
## numeric(0)
print("Datos ingresados mediante read.table():")
## [1] "Datos ingresados mediante read.table():"
print(P1_readtable)
## [1] 3 3 3 4 3 4 3 4 4 3
print(P2_readtable)
## [1] 5 5 2 2 5 2 2 5 5 2
print(P3_readtable)
## [1] 1 3 1 3 3 3 1 3 1 1
print("Datos ingresados mediante data.entry():")
## [1] "Datos ingresados mediante data.entry():"
print(datos_entry$P1)
## [1] 3 3 3 4 3 4 3 4 4 3
print(datos_entry$P2)
## [1] 5 5 2 2 5 2 2 5 5 2
print(datos_entry$P3)
## [1] 1 3 1 3 3 3 1 3 1 1
print("Tabla de P1:")
## [1] "Tabla de P1:"
tabla_P1 = table(P1)
print(tabla_P1)
## P1
## 3 4
## 6 4
print("Tabla de P2:")
## [1] "Tabla de P2:"
tabla_P2 = table(P2)
print(tabla_P2)
## P2
## 2 5
## 5 5
print("Tabla de P3:")
## [1] "Tabla de P3:"
tabla_P3 = table(P3)
print(tabla_P3)
## P3
## 1 3
## 5 5
tabla_P1_P2 = table(P1, P2)
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
tabla_P1_P3 = table(P1, P3)
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
tabla_P2_P3 = table(P2, P3)
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
tabla_P1_P2_P3 = table(P1, P2, P3)
print("Tabla de contingencia cruzada entre P1, P2 y P3:")
## [1] "Tabla de contingencia cruzada entre P1, P2 y 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
barplot(rbind(P2, P3), beside = TRUE, legend = TRUE, col = c("purple", "lightgreen"), main = "Diagrama de barras apiladas de P2 y P3", xlab = "Estudiantes", ylab = "Respuestas")
barplot(rbind(P1, P2, P3), beside = TRUE, legend = TRUE, col = c("lightcoral","purple", "lightgreen"), main = "Diagrama de barras de las 3 Preguntas", xlab = "Estudiantes", ylab = "Respuestas")
2.9. Genera 2 vectores de 50 valores cada de una distribución normal con rnorm (50).
vector1 = rnorm(50)
vector2 = rnorm(50)
shapiro_testv1 = shapiro.test(vector1)
print("Prueba de normalidad de Shapiro-Wilk para el primer vector:")
## [1] "Prueba de normalidad de Shapiro-Wilk para el primer vector:"
print(shapiro_testv1)
##
## Shapiro-Wilk normality test
##
## data: vector1
## W = 0.97483, p-value = 0.3595
shapiro_testv2 = shapiro.test(vector2)
print("Prueba de normalidad de Shapiro-Wilk para el segundo vector:")
## [1] "Prueba de normalidad de Shapiro-Wilk para el segundo vector:"
print(shapiro_testv2)
##
## Shapiro-Wilk normality test
##
## data: vector2
## W = 0.97999, p-value = 0.5513
t_test = t.test(vector1, vector2)
print(t_test)
##
## Welch Two Sample t-test
##
## data: vector1 and vector2
## t = -0.88963, df = 95.289, p-value = 0.3759
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.5773098 0.2200035
## sample estimates:
## mean of x mean of y
## -0.09990845 0.07874467
2.10. Genera un vector de 50 valores por medio de rnorm y un vector de 50 valores por medio rbinom.
vector_rnorm = rnorm(50)
vector_rbinom = rbinom(50, size = 10, prob = 0.5)
shapiro_rnorm = shapiro.test(vector_rnorm)
print("Prueba de normalidad de Shapiro-Wilk para el vector generado por rnorm:")
## [1] "Prueba de normalidad de Shapiro-Wilk para el vector generado por rnorm:"
print(shapiro_rnorm)
##
## Shapiro-Wilk normality test
##
## data: vector_rnorm
## W = 0.95029, p-value = 0.03507
shapiro_rbinom = shapiro.test(vector_rbinom)
print("Prueba de normalidad de Shapiro-Wilk para el vector generado por rbinom:")
## [1] "Prueba de normalidad de Shapiro-Wilk para el vector generado por rbinom:"
print(shapiro_rbinom)
##
## Shapiro-Wilk normality test
##
## data: vector_rbinom
## W = 0.95679, p-value = 0.06524
t_test2 <- t.test(vector_rnorm, vector_rbinom)
print(t_test2)
##
## Welch Two Sample t-test
##
## data: vector_rnorm and vector_rbinom
## t = -16.866, df = 79.626, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -5.453291 -4.302123
## sample estimates:
## mean of x mean of y
## 0.2022932 5.0800000