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)
print("(NA) significa Not Available (No Disponible) y se utiliza para representar valores faltantes o ausentes en los datos.")
## [1] "(NA) significa Not Available (No Disponible) y se utiliza para representar valores faltantes o ausentes en los datos."
# 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

  1. Crea una variable llamada “millas” que contenga los datos anotados.

  2. Crea una nueva variable “kms” y asígnale el valor de “millas” transformado en kms (una milla son 1,609 km).

# a)
millas = c(65241, 65665, 65998, 66014, 66547, 66857, 67025, 67447, 66958, 67002)
# b)
conver = 1.609
km = conver*millas
km
##  [1] 104972.8 105655.0 106190.8 106216.5 107074.1 107572.9 107843.2 108522.2
##  [9] 107735.4 107806.2
  1. ¿Qué resultado produce la función diff aplicada sobre los datos anteriores?
diff(millas)
## [1]  424  333   16  533  310  168  422 -489   44
diff(km)
## [1]  682.216  535.797   25.744  857.597  498.790  270.312  678.998 -786.801
## [9]   70.796
  1. ¿Qué funciones son adecuadas para resumir estos datos?
summary(km)
##    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

telefono = c(47, 32, 40, 36, 49, 31, 49, 30, 49, 35, 48, 32)
mes = c("Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dic")
#a) ¿Cuánto le ha costado la factura del último año?
sum(telefono)
## [1] 478
#b) ¿Cuánto ha pagado en promedio cada mes?
mean(telefono)
## [1] 39.83333
#c) ¿Cuáles son las cantidades mínimas y máximas pagadas?
maximo = max(telefono)
minimo = min(telefono)
print(paste("Pago maximo:",maximo))
## [1] "Pago maximo: 49"
print(paste("Pago mimino:",minimo))
## [1] "Pago mimino: 30"
#d) ¿En qué mes se realizó cada pago?
matrizFila = rbind(mes, telefono)
matrizColumna = cbind(mes, telefono)
matrizFila
##          [,1]  [,2]  [,3]    [,4]    [,5]  [,6]   [,7]   [,8]  [,9]  [,10]
## mes      "Jan" "Feb" "March" "April" "May" "June" "July" "Aug" "Sep" "Oct"
## telefono "47"  "32"  "40"    "36"    "49"  "31"   "49"   "30"  "49"  "35" 
##          [,11] [,12]
## mes      "Nov" "Dic"
## telefono "48"  "32"
matrizColumna
##       mes     telefono
##  [1,] "Jan"   "47"    
##  [2,] "Feb"   "32"    
##  [3,] "March" "40"    
##  [4,] "April" "36"    
##  [5,] "May"   "49"    
##  [6,] "June"  "31"    
##  [7,] "July"  "49"    
##  [8,] "Aug"   "30"    
##  [9,] "Sep"   "49"    
## [10,] "Oct"   "35"    
## [11,] "Nov"   "48"    
## [12,] "Dic"   "32"
#e) ¿Cuantos meses pagó más de 40 euros?
sum(telefono>40)
## [1] 5
#f) ¿Qué porcentaje del gasto total representa esta cantidad?
sumMeses = sum(telefono[telefono>40])
sumTotal = sum(telefono)
###############################
porTotal = ((sumMeses*100)/sumTotal)
###############################
print(paste("Valor total del pago anual es: ",sumTotal ))
## [1] "Valor total del pago anual es:  478"
print(paste("Valor total del precio mayor a 40 es: ",sumMeses ))
## [1] "Valor total del precio mayor a 40 es:  242"
print(paste("porcentaje de pagos mayores a 40 es: ",round(porTotal, digits = 2))) 
## [1] "porcentaje de pagos mayores a 40 es:  50.63"

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
  2. Obtén resúmenes numéricos de los datos.
proporciones <- c(61, 88, 73, 49, 41, 72, 99, 07, 12, 13, 87, 91, 05, 17, 97) #--> vector
pie(proporciones, main = "Diagrama Porcentual", labels = paste0(proporciones, "%"))

  1. ¿Qué diferencias hay entre summary(x) y fivenum(x)?

summary(x): este comando muestra un resumen general sobre las variables del data frame (mínimo, máximo, media, mediana, primer y tercer cuartil). Además, R reconoce que la variable Species es una variable categórica por lo que muestra la frecuencia de cada categoría.

fivenum(x): Se utiliza para devolver el resumen de datos de entrada de cinco números de Tukey, es decir,valor mínimo, valor de bisagra inferior, valor mediano, valor de bisagra superior y valor máximo de los datos de entrada.

La diferencia se encuentra en la salida de los datos.

#FUNCION SUMMARY
summary(proporciones)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5.00   15.00   61.00   54.13   87.50   99.00
#FUNCION FIVENUM
fivenum(proporciones)
## [1]  5.0 15.0 61.0 87.5 99.0

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).
datos = rnorm(100)
datos
##   [1]  2.00291127  0.14536935  0.65185560 -0.26868047  0.02743853  1.43074570
##   [7]  0.41162077  1.64152127  1.09874838  1.18061169 -0.82081658  0.24090057
##  [13] -0.45492975  1.11075569  0.92739471  0.48688196  1.44272028 -0.20802290
##  [19] -0.77338676  0.17206633  1.46667235 -0.43345023 -0.61760147 -0.95700604
##  [25]  0.94889290 -0.26666881 -0.57888691  0.41662595  0.24059435 -0.60676275
##  [31]  0.28175746 -0.54856112  0.13600773 -0.56531940 -0.55834079  0.89424870
##  [37] -0.64762247 -0.77659963  0.09621306  0.14864782  2.44302912  0.22962345
##  [43]  0.52604831 -0.94739033  0.98148261 -0.57037764 -0.78500110 -0.16338325
##  [49]  1.02681852  0.65378961  0.10395029  0.68228813 -2.61632292  0.63091540
##  [55] -1.69667498 -1.35607860  0.27849054  0.48014471 -0.94241536  0.45845979
##  [61] -0.70837460  0.34199287 -1.53471095  0.99109184 -0.02280760 -0.06782345
##  [67]  0.28615635  1.12291928 -0.20783396  1.88232878 -0.86243242 -0.73258654
##  [73] -0.55365515  1.86168600 -0.66923298 -0.11464296 -0.02440560  1.06028033
##  [79]  1.96158762 -1.19436557  0.11016057 -0.40726522 -0.79605993  1.81685200
##  [85]  1.36754286 -0.48325267  1.22576705 -0.78403560  0.46398404  0.35657264
##  [91]  1.35583642  0.17968676 -0.37317407  2.17886339 -0.01139897 -0.72614924
##  [97] -0.95716660 -1.58197807 -1.12521928 -1.57705347
  1. Realiza un histograma de los valores. Repite el proceso un par de veces. ¿Qué observas?
hist(datos)

c) Realiza un resumen numérico de los datos.

summary(datos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -2.6163 -0.6095  0.1071  0.1098  0.7353  2.4430

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

datosBinom = rbinom(n = 5, size = 30, prob = 0.9)
datosBinom
## [1] 28 23 29 26 25
  1. Representa los resultados con un diagrama de barras o de pastel.
barplot(prop.table(table(datosBinom)),col=c("red","yellow"),
        main="Datos Binomiales",ylim=c(0,0.5),
        ylab ="Frecuencias Relativas",las=1,font.axis=4)

  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?
#Resumen datos
summary(datosBinom)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    23.0    25.0    26.0    26.2    28.0    29.0
#Resumen datos binarios
summary(datos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -2.6163 -0.6095  0.1071  0.1098  0.7353  2.4430

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?
orbitaSat = c(0, 1, 0, NA, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 1)
mean(orbitaSat,na.rm=TRUE) 
## [1] 0.4545455
x[!is.na(orbitaSat)]
##  [1]  1  3  5  9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
boxplot(orbitaSat, notch = FALSE)

stripchart(orbitaSat, vertical = TRUE, method = "jitter",
           pch = 19, add = TRUE, col = 1:length(levels(orbitaSat)))

summary(orbitaSat)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.0000  0.0000  0.0000  0.4545  1.0000  3.0000       1
  1. 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.
hist(orbitaSat)

#Numero medio de errores
mean(orbitaSat,na.rm=TRUE)
## [1] 0.4545455
#posiscion del error
which(is.na(orbitaSat))
## [1] 4
#Valor NA
any(is.na(x))
## [1] FALSE
#Logica del error
is.na(orbitaSat)
##  [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

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().
estudiante = c(1,2,3,4,5,6,7,8,9,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)
colegio = rbind(estudiante, p1, p2, p3)
colegio
##            [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## estudiante    1    2    3    4    5    6    7    8    9    10
## p1            3    3    3    4    3    4    3    4    4     3
## p2            5    5    2    2    5    2    2    5    5     2
## p3            1    3    1    3    3    3    1    3    1     1
  1. Tabula los resultados de cada pregunta por separado.
barplot(p1, main = "Pregunta 01",
     xlab = "P1", ylab = "Frecuencia", 
     col = c("purple", "orange"))

barplot(p2, main = "Pregunta 02",
     xlab = "P2", ylab = "Frecuencia", 
     col = c("purple", "orange"))

barplot(p3, main = "Pregunta 03",
     xlab = "P3", ylab = "Frecuencia", 
     col = c("purple", "orange"))

  1. Realiza tablas de contingencia cruzadas para cada pregunta, de 2 en 2 y las 3 a la vez.
colnames(colegio) = c("S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10")
colegio
##            S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
## estudiante  1  2  3  4  5  6  7  8  9  10
## p1          3  3  3  4  3  4  3  4  4   3
## p2          5  5  2  2  5  2  2  5  5   2
## p3          1  3  1  3  3  3  1  3  1   1
  1. Haz un diagrama de barras apiladas de las preguntas 2 y 3.
colegio2 = rbind(estudiante, p2, p3)

barplot(colegio2, main = "Preguntas Apiladas",
     xlab = "P2 - P3", ylab = "Frecuencia", 
     col = c("red", "yellow"))

  1. Haz un diagrama de barras con las tres preguntas simultáneamente.
barplot(colegio, main = "Preguntas",
     xlab = "P1 - P2 - P3", ylab = "Frecuencia", 
     col = c("red", "grey"))

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

  1. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
v1 = rnorm (50)
v2 = rnorm (50)

#VECTOR 1
v1 
##  [1]  1.854307150 -0.042211045  0.947700552 -2.119832347 -0.992527940
##  [6] -0.291261200 -0.773514001 -1.321167761  0.003626056  0.079466458
## [11]  1.660125008  1.310315596  0.186007440  2.340648175  0.748307027
## [16] -1.452401930 -0.430238141  1.676650433  0.496859100  0.056625199
## [21]  0.956839907 -1.347165580  0.255278419 -0.375562100  1.280435546
## [26] -0.111755415 -0.396525833  2.517675992  0.680275620  0.125402196
## [31]  0.702817457 -0.411449601  0.460458179 -0.158757407  1.684700709
## [36] -0.893114004  0.218812624  0.470361193  1.069157982  1.746766940
## [41]  0.131642434 -0.262544319  0.404706264  1.303631054  0.455082291
## [46] -0.069138550  0.534122836 -1.042369528 -2.014149072 -0.463139333
#NORMALIDAD SHAPIRO-WILK
shapiro.test(v1)
## 
##  Shapiro-Wilk normality test
## 
## data:  v1
## W = 0.9881, p-value = 0.892
#VECTOR 2
v2
##  [1] -1.45108436 -0.63936849  1.55873455 -0.22653067 -0.67190262 -0.16176752
##  [7] -0.17317083 -0.55814822  0.33897951  0.36542426  0.06499541  0.57888150
## [13]  0.19715426  0.31590666 -0.50391543  0.50433783 -0.36980907 -0.59529961
## [19] -1.15444863  0.54659589 -0.82990168  0.42140965  0.58499144  0.74029436
## [25] -0.28303497  0.17191015 -2.30917158  0.87334543  1.68566682 -0.76572665
## [31] -1.41045526 -1.60907951 -1.21640857  1.13866144 -0.63762250  0.25631992
## [37]  0.15967310 -1.50601028  0.76817190 -0.32170260  0.53950054  1.70388109
## [43] -1.07641905 -0.11182638 -0.41727181  2.40188510 -1.77141392  1.60238197
## [49] -0.21394137 -0.77777439
#NORMALIDAD SHAPIRO-WILK
shapiro.test(v2)
## 
##  Shapiro-Wilk normality test
## 
## data:  v2
## W = 0.98947, p-value = 0.9331
  1. Determine si entre los vectores hay o no diferencias significativas, t-student test
t.test(v2, v2)
## 
##  Welch Two Sample t-test
## 
## data:  v2 and v2
## t = 0, df = 98, p-value = 1
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.3915099  0.3915099
## sample estimates:
##   mean of x   mean of y 
## -0.08488206 -0.08488206

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

  1. Realiza una prueba de normalidad mediante Shapiro-Wilk de cada vector.
set.seed(0)
v3 = rnorm(50)

#VECTOR 3
v3
##  [1]  1.262954285 -0.326233361  1.329799263  1.272429321  0.414641434
##  [6] -1.539950042 -0.928567035 -0.294720447 -0.005767173  2.404653389
## [11]  0.763593461 -0.799009249 -1.147657009 -0.289461574 -0.299215118
## [16] -0.411510833  0.252223448 -0.891921127  0.435683299 -1.237538422
## [21] -0.224267885  0.377395646  0.133336361  0.804189510 -0.057106774
## [26]  0.503607972  1.085769362 -0.690953840 -1.284599354  0.046726172
## [31] -0.235706556 -0.542888255 -0.433310317 -0.649471647  0.726750747
## [36]  1.151911754  0.992160365 -0.429513109  1.238304101 -0.279346282
## [41]  1.757903090  0.560746091 -0.452783973 -0.832043296 -1.166570547
## [46] -1.065590580 -1.563782051  1.156536997  0.832047129 -0.227328691
#NORMALIDAD SHAPIRO-WILK
shapiro.test(v3)
## 
##  Shapiro-Wilk normality test
## 
## data:  v3
## W = 0.97356, p-value = 0.321
v4 = rbinom(n = 50, size = 30, prob = 0.9)

#VECTOR 4
v4
##  [1] 27 26 28 28 22 27 28 29 27 25 27 23 26 28 27 29 30 26 29 27 27 23 27 27 29
## [26] 26 27 27 28 28 27 27 29 30 27 24 27 27 27 23 27 26 27 28 28 26 27 29 26 29
#NORMALIDAD SHAPIRO-WILK
shapiro.test(v4)
## 
##  Shapiro-Wilk normality test
## 
## data:  v4
## W = 0.88818, p-value = 0.0002001
  1. Determine si entre los vectores hay o no diferencias significativas, t-student test.
#TESTT-STUDENT
t.test(v3, v4)
## 
##  Welch Two Sample t-test
## 
## data:  v3 and v4
## t = -97.28, df = 74.438, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -27.50815 -26.40399
## sample estimates:
##   mean of x   mean of y 
##  0.02393097 26.98000000