Estadística Computacional

Ejercicio No 1. Franquicia de Star Wars

Analizarás las cifras de taquilla de Star Wars. En el editor se definen tres vectores de las tres primeras peliculas de Star Wars, las componentes indica el ingreso de las taquillas de EEUU y por fuera de EEUU.

new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475,247.900)
return_jedi <- c(309.306, 165.8)

Responda:

  1. Construye una matriz llamada star_wars_matrix de 2x3 que combine los 3 vectores.
star_wars_matrix <- matrix(c(new_hope,empire_strikes,return_jedi), nrow=2, ncol = 3)
  1. Renombra las filas (“US”, “non-US”) y columnas (“A New Hope”, “The empire Strikes Back”, “Retuns of the Jedi” ). Use rownames y colnames.
library(knitr)
colnames(star_wars_matrix) <- c("A New Hope", "The empire Strikes Back", "Retuns of the Jedi" )
rownames(star_wars_matrix) <- c("US", "non-US")
kable(star_wars_matrix)
A New Hope The empire Strikes Back Retuns of the Jedi
US 460.998 290.475 309.306
non-US 314.400 247.900 165.800
  1. Calcule las cifras de la taquilla mundial de las tres películas y póngalas en el vector llamado woldwide_vector.
worldwide_vector <- colSums(star_wars_matrix) 
print(worldwide_vector)
##              A New Hope The empire Strikes Back      Retuns of the Jedi 
##                 775.398                 538.375                 475.106

4 . Añade worldwide_vector como una nueva fila a a la matriz star_wars_matrix y al resultado le asignas el nombre all_wars_matrix.

all_wars_matrix <- rbind(star_wars_matrix, worldwide_vector)
rownames(all_wars_matrix) <- c("US", "non-US", "World Wide Box") # Renombra las filas
kable(all_wars_matrix)
A New Hope The empire Strikes Back Retuns of the Jedi
US 460.998 290.475 309.306
non-US 314.400 247.900 165.800
World Wide Box 775.398 538.375 475.106
  1. Selecciona los ingresos no estadosunidenses de las peliculas y almacenalas como non_us_all. Ademas, calcule el promedio.
non_us_all <- c(all_wars_matrix[2,1],all_wars_matrix[2,2],all_wars_matrix[2,3])
print(non_us_all)
## [1] 314.4 247.9 165.8
mean(non_us_all)  
## [1] 242.7

Ejercicio No 2. Sistema Solar

name <- c("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
type <- c("Terrestrial planet","Terrestrial planet", "Terrestrial planet","Terrestrial planet","Gas gigant","Gas gigant","Gas gigant","Gas gigant" )
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotation <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
rings <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
  1. Crea el marco de datos (data.frame), asignelo a planets df y usa str() para ver la estructura.
planets_df <- data.frame(cbind(name,type,diameter,rotation,rings)) 
kable(planets_df)
name type diameter rotation rings
Mercury Terrestrial planet 0.382 58.64 FALSE
Venus Terrestrial planet 0.949 -243.02 FALSE
Earth Terrestrial planet 1 1 FALSE
Mars Terrestrial planet 0.532 1.03 FALSE
Jupiter Gas gigant 11.209 0.41 TRUE
Saturn Gas gigant 9.449 0.43 TRUE
Uranus Gas gigant 4.007 -0.72 TRUE
Neptune Gas gigant 3.883 0.67 TRUE
  1. Selecciona el diámetro del planeta Mercurio y todos los datos del planeta Marte.
planets_df[1,3]
## [1] "0.382"
kable(planets_df[4,1:5])
name type diameter rotation rings
4 Mars Terrestrial planet 0.532 1.03 FALSE
  1. Seleccione e imprima los 5 primeros valores del ”diámetro” de planets_df.
planets_df[1:5,3]
## [1] "0.382"  "0.949"  "1"      "0.532"  "11.209"
  1. Escriba 3 formas de seleccionar la variable rings de planets_df y asignelo a rings_vector.
planets_df[1:8,5] # seleccione los datos de la fila 1 a la 8 de la columna 5 (rings)
## [1] "FALSE" "FALSE" "FALSE" "FALSE" "TRUE"  "TRUE"  "TRUE"  "TRUE"
planets_df[c(1,2,3,4,5,6,7,8),5] # seleccione los datos de la fila 1,2,3,4,5,6,7 y 8 de la columna 5 (rings)
## [1] "FALSE" "FALSE" "FALSE" "FALSE" "TRUE"  "TRUE"  "TRUE"  "TRUE"
planets_df$rings # seleccione los datos de la columna rings de la tabla planets_df
## [1] "FALSE" "FALSE" "FALSE" "FALSE" "TRUE"  "TRUE"  "TRUE"  "TRUE"
rings_vector <- planets_df$rings # Se asignan los datos de la variable rings al vector rings_vector
print(rings_vector)
## [1] "FALSE" "FALSE" "FALSE" "FALSE" "TRUE"  "TRUE"  "TRUE"  "TRUE"
  1. Selecciona todos los planetas que tienen anillos. Use rings_vector.
rings_vector[c(5:8)]
## [1] "TRUE" "TRUE" "TRUE" "TRUE"
  1. Utilice subset() en planets_df para seleccionar los planetas que tienen un diámetro menor que la Tierra. Como la variable diámetro es una medida relativa del diámetro del planeta con respecto al de la Tierra, su condición es diámetro < 1.
kable(subset(planets_df, planets_df$diameter < 1))
name type diameter rotation rings
1 Mercury Terrestrial planet 0.382 58.64 FALSE
2 Venus Terrestrial planet 0.949 -243.02 FALSE
4 Mars Terrestrial planet 0.532 1.03 FALSE
  1. Ordena de menor a mayor todos los planetas por el diámetro.
planets_df$diameter <- as.numeric(planets_df$diameter) # cambia el tipo de dato de caracter a númerico
planets_df2 <- planets_df[order(planets_df$diameter),]
planets_df2
##      name               type diameter rotation rings
## 1 Mercury Terrestrial planet    0.382    58.64 FALSE
## 4    Mars Terrestrial planet    0.532     1.03 FALSE
## 2   Venus Terrestrial planet    0.949  -243.02 FALSE
## 3   Earth Terrestrial planet    1.000        1 FALSE
## 8 Neptune         Gas gigant    3.883     0.67  TRUE
## 7  Uranus         Gas gigant    4.007    -0.72  TRUE
## 6  Saturn         Gas gigant    9.449     0.43  TRUE
## 5 Jupiter         Gas gigant   11.209     0.41  TRUE

Ejercicio No 3. Cine

Siendo un gran aficionado al cine, decides empezar almacenar información sobre buenas películas, con la ayuda de listas.

Crea el código en el editor y asignala a sp_man_no_way_home_list; contiene tres elementos.

  1. moviename: una cadena de caracteres con el título de la pelcuíla (almacenada en mov).
mov <- c("Harry Potter y la piedra filosofal")
print(mov)
## [1] "Harry Potter y la piedra filosofal"
  1. actors: un vector con los nombres de los actores principales (almacenado en act). Solo 5 actores.
act <- c("Daniel Radcliffe", "Emma Watson", "Rupert Grint", "Robbie Coltrane", "Ian Hart")
print(act)
## [1] "Daniel Radcliffe" "Emma Watson"      "Rupert Grint"     "Robbie Coltrane" 
## [5] "Ian Hart"
  1. reviews: un marco de datos que contiene algunas críticas (almacenado en rev). Solo 3 columnas (scores, sources, comments) y 3 filas.
scores <- c(7.6, 9.0, 6.8 )
sources <- c("IMDB", "SENSACINE ", "FILMAFFINITY") 
comments <- c(" La introducción a los personajes, la inmersión en el mundo ficticio, la primera vez que ríes, lloras, te preocupas y temes por la seguridad de alguien nunca podrá repetirse. No importa cuántas películas de Harry Potter hagan, o si alguna vez las rehacen en el futuro, ninguna se acercará a la maravillosa primera película, Harry Potter y la piedra filosofal.", "Resalta su diseño de producción y materialización visual y narrativa. La admirable coherencia alcanzada entre forma y fondo. El partido de quidditch sobresale en una ya de por sí espectacular propuesta.", "Aunque algunas de las escenas del libro han sido eliminadas, los fanáticos probablemente no podrían esperar una mejor adaptación. Es un buen augurio para el resto de la serie, cuando las historias fuertes comiencen a tener prioridad sobre la configuración")

kable(rev <- data.frame(cbind(scores, sources, comments)))
scores sources comments
7.6 IMDB La introducción a los personajes, la inmersión en el mundo ficticio, la primera vez que ríes, lloras, te preocupas y temes por la seguridad de alguien nunca podrá repetirse. No importa cuántas películas de Harry Potter hagan, o si alguna vez las rehacen en el futuro, ninguna se acercará a la maravillosa primera película, Harry Potter y la piedra filosofal.
9 SENSACINE Resalta su diseño de producción y materialización visual y narrativa. La admirable coherencia alcanzada entre forma y fondo. El partido de quidditch sobresale en una ya de por sí espectacular propuesta.
6.8 FILMAFFINITY Aunque algunas de las escenas del libro han sido eliminadas, los fanáticos probablemente no podrían esperar una mejor adaptación. Es un buen augurio para el resto de la serie, cuando las historias fuertes comiencen a tener prioridad sobre la configuración

No olvides nombrar los componentes de la lista como corresponde (los nombres son moviename, actors y reviews).

sp_man_no_way_home_list<- list(moviename = mov,  actors = act, reviews = rev)
print(sp_man_no_way_home_list)
## $moviename
## [1] "Harry Potter y la piedra filosofal"
## 
## $actors
## [1] "Daniel Radcliffe" "Emma Watson"      "Rupert Grint"     "Robbie Coltrane" 
## [5] "Ian Hart"        
## 
## $reviews
##   scores      sources
## 1    7.6         IMDB
## 2      9   SENSACINE 
## 3    6.8 FILMAFFINITY
##                                                                                                                                                                                                                                                                                                                                                                  comments
## 1  La introducción a los personajes, la inmersión en el mundo ficticio, la primera vez que ríes, lloras, te preocupas y temes por la seguridad de alguien nunca podrá repetirse. No importa cuántas películas de Harry Potter hagan, o si alguna vez las rehacen en el futuro, ninguna se acercará a la maravillosa primera película, Harry Potter y la piedra filosofal.
## 2                                                                                                                                                              Resalta su diseño de producción y materialización visual y narrativa. La admirable coherencia alcanzada entre forma y fondo. El partido de quidditch sobresale en una ya de por sí espectacular propuesta.
## 3                                                                                                         Aunque algunas de las escenas del libro han sido eliminadas, los fanáticos probablemente no podrían esperar una mejor adaptación. Es un buen augurio para el resto de la serie, cuando las historias fuertes comiencen a tener prioridad sobre la configuración
  1. Seleccione de sp_man_no_way_home_list el vector que representa a los actores. Simplemente imprime este vector.
print(sp_man_no_way_home_list$actors)
## [1] "Daniel Radcliffe" "Emma Watson"      "Rupert Grint"     "Robbie Coltrane" 
## [5] "Ian Hart"
  1. Selecciona de sp_man_no_way_home_list el segundo elemento del vector que representa a los actores. Haz una impresión como la anterior.
print(sp_man_no_way_home_list$actors[2])
## [1] "Emma Watson"

Ejercicio No 4. Lanzamiento de una moneda

Realice 1000 simulaciones del lanzamiento de una moneda equilibrada y compruebe experimentalmente que el número de veces que aparece una cara entre el total de lanzamientos se aproxima a 1/2 conforme el número de lanzamientos crece.

vectorLanzamiento <- NULL # vector vacio que almacena el número de lanzamientos
vectorResultados <- c("Cara","Sello") #total de posibles resultados
vectorProb <- NULL #vector vacío que almacena la probabilidad de que obtener una cara por lanzamiento i veces. 
conteoCara<-0 # contador, inicia en cero

for (i in 1:1000) {
  vectorLanzamiento[i]<-i # Almacena el número de lanzamientos
  lanzamiento <-  sample(vectorResultados,1,TRUE) #genera un valor aleatorío de 1000 posibles resultados 
  if (lanzamiento == "Cara"){
    conteoCara <- conteoCara + 1
  }  # condición: Si se obtiene una cara en el lanzamiento sumelo a la variable conteoCara
 
  vectorProb[i] <- conteoCara / vectorLanzamiento[i] # calcula la probabilidad de obtener una cara por lanzamiento
}
tabla.resultados <- data.frame(cbind(vectorLanzamiento, vectorProb)) # Crea un marco de datos 

library(ggplot2)
ggplot(tabla.resultados, aes(x=vectorLanzamiento, y=vectorProb))+ 
    geom_point(size = 0.3,color="purple")+labs(title= "Gráfico de probabilidad", x="Número de Lanzamientos",y="Número de Caras")+      theme(legend.position='none') #Gráfica la información contenida en el marco de datos

Nota: Cada vez que se ejecute el código la función sample generará valores aleatorios diferentes.

Ejercicio No 5. Lanzamiento de un dado

Realice 1000 simulaciones del lanzamiento de un dado equilibrada y compruebe experimentalmente que el número de veces que aparece una cara entre el total de lanzamientos se aproxima a 1/6 conforme el número de lanzamientos crece.

vectorLanzamientod <- NULL # vector vacio que almacena el número de lanzamientos
vectorResultadosd <- c("Uno","Dos", "Tres", "Cuatro", "Cinco", "Seis") #total de posibles resultados
vectorProbd <- NULL #vector vacío que almacena la probabilidad de que obtener una cara por lanzamiento i veces
conteoCarad<-0 #Contador, inicia en cero
for (i in 1:1000) {
  vectorLanzamientod[i]<-i # Almacena el número de lanzamientos
  lanzamientod <-  sample(vectorResultadosd,1,TRUE) #genera un valor aleatorío de 1000 posibles resultados
  
  if (lanzamientod == "Uno"){
    conteoCarad <- conteoCarad + 1
  }    # condición: Si se obtiene una cara en el lanzamiento sumelo a la variable conteoCarad
    vectorProbd[i] <- conteoCarad / vectorLanzamientod[i]
}  # calcula la probabilidad de obtener una cara del dado por lanzamiento
tabla.resultadosd <- data.frame(cbind(vectorLanzamientod, vectorProbd))  # Crea un marco de datos

library(ggplot2)
ggplot(tabla.resultadosd, aes(x=vectorLanzamientod, y=vectorProbd))+
    geom_point(size = 0.3,color="darkgreen")+labs(title= "Gráfico de probabilidad", x="Número de Lanzamientos",y="Número de Uno")+      theme(legend.position='none') #Gráfica la información contenida en el marco de datos 

Nota: Cada vez que se ejecute el código la función sample generará valores aleatorios diferentes.