Ejercicio 1

Instrucciones

Usted tiene un algoritmo que estima, dado un instante de tiempo Δt1, la variación de precio que tendrá una acción en la bolsa en los instantes Δt siguientes. Una vez que corre el algoritmo recibe una sucesión de variaciones de precio. Un valor de +3 significa que el precio tendrá un incremento de 3 unidades monetarias, un valor de -5 significa que el precio decrece en 5 unidades monetarias. Empezando con un precio de $0, ¿Cuál será el precio resultante de la acción después de que ocurran todas las variaciones?

Solucion

sum(precios)

El resultado es 423

Ejercicio 2

Usted recuerda que un supuesto fuerte del análisis técnico de acciones es, palabras más palabras menos, que la historia siempre se repite. Por lo cual como parte de su estrategia, y esperando tener cierta ventaja sobre el resto del mercado, se ve interesado en encontrar el primer precio que ocurre dos veces si las variaciones que obtuvo se repiten todo el tiempo.

¿Cuál es primer precio que ocurre dos veces dada esta lista de variaciones?

Note que la lista de variaciones puede repetirse a si misma muchas veces antes de encontrar el precio duplicado; además, el precio duplicado debe ser encontrado en medio del proceso de búsqueda y detenerlo.

v <- read.delim("input.txt", header = FALSE)
x<-c()
x[1]<-0
i<-1
b<-TRUE

while(b==TRUE){
  for(j in 1:nrow(v)){
    z<-x[i]+v$V1[j]
    i<-i+1
    if(z%in%x){
      b<<-FALSE
      print(z)
      break
    }else{x[i]<-z}
    
  }
  
}

El resultado es 124645

Ejercicio 3

Si hacemos una lista de los números naturales menores a 10 que son multiplos de 3 o 5 obtendremos c(3, 5, 6, 9), la suma de esos multiplos es 23.

Encuentre la suma de todos los multiplos de 3 o 5 menores a 1000.

n<-1:1000
sum(n[n%%5==0 | n%%3==0])

El resultado es 234168

Ejercicio 4

Como bien sabe, cada término de la sucesión de Fibonacci se obtiene sumando los dos elementos anteriores.

Considere los elementos de la sucesión de Fibonacci menores a 1,000,000,000. Sea x la suma de los elementos impares, y la suma de los elementos pares. Encuentre z=xy

# Crearemos primero una funcion que nos devuelva los primeros n dígitos de la función de 
#fibonacci

fibo<- function(n)
{
  f<-c()
  f[c(1,2)]<-1
  b=TRUE
  i=3
  
  while(b==TRUE)  {
    if(f[i-1]<=n){
    f[i]<-f[i-1]+f[i-2]
    i<-i+1
    }
      
    else{
      b<-FALSE
      return(f[1:length(f)-1])
      }
  }
}


#Ahora hagamos lo que pide el ejercicio

a<-fibo(1000000000)
a_p<-a[a%%2==0]
a_i<-a[a%%2 !=0]

z<-sum(a_i)/sum(a_p)
z
## [1] 4.236068

El resultado es 4.236068

Ejercicio 5

Ahora considere los primeros 10n elementos de la sucesión de Fibonacci con n∈(1,200), sean x el número de elementos impares, y el número de elementos pares y z=xy.

fibo_2 <- function(n) {
  f <- c()
  f[c(1, 2)] <- 1
  for (i in 3:n) {
    f[i] <- f[i - 1] + f[i - 2]
  }
  return(f)
}

#Ahora creamos los primeros 10n elementos de la sucesión de Fibonacci con n∈(1,200),
z <- c()
pasos <- c(10 * c(1:200)) 


for(i in 1:200) {
  z[i] <- sum(fibo_2(pasos[i]) %% 2 != 0) / sum(fibo_2(pasos[i]) %% 2 == 0)
}

#Para realizar el grafico haremos uso de las siguientes paqueterias
library(gganimate)
library(ggplot2)
library(gifski)
library(png)

#generamos un fata frame que es lo que recibe el ggplot
data <- data.frame(z) 

p<-ggplot(data, aes(x = 1:1000, y = z)) +
  geom_line() + labs(x = "", y = "") 

p + transition_reveal(1:1000)

Explique un par de insights interesantes sobre el ejercicio.

Es interesante resaltar de la succesion de fibonnacci que empieza sumando numero pares y numeros impares, sin embargo despues de determinado numero observamos que hay mas numeros impares que pares, por ende la proporcion de impares es menor y eso deriva en una grafica decreciente.

Ejercicio 6

Escriba una función que encuentre los números primos entre 1 y n. Haga un gráfico animado de la proporción de números primos en los primeros 10k naturales con k∈(1:100)

#Funcion que encuentre los numeros primos entre 1 y m 


library(ggplot2)
library(gganimate)
library(gifski)
library(png)

#Utilizamos las paqueteria de R para generar numeros primos 

library(primes)

div<-c()
for( i in 1:100){
num_prim<-generate_primes(min=2, max=10*i)
div[i]<-length(num_prim) / (10*i) }

#generemos la grafica interactiva 

data<-data.frame(div)

p<-ggplot(data, aes(x = 1:100, y = div)) +geom_point() +  geom_line( ) +  theme_classic()

p + transition_reveal(1:100)

Ejercicio 7

Es bien sabido que ρX,Y=0→X⊥Y es falso. Simule un contraejemplo.

x<-rnorm(1000)
y=x^2

round(cor(x,y))
## [1] 0
plot(x,y)

Ejercicio 8

Usted trabaja en un casino donde existe el siguiente juego: un jugador lanza tres dados y gana 20 pesos por cada 6 que aparece, el costo de jugar es de 10 pesos.

Escriba una función que simule el juego y regrese la cantidad que se gana en cada juego i.e. ganancia - costo. Calcule la media y varianza al simular 100, 1000 y 10000 juegos.

#Funcion que simula el juego y regresa la cantidad que se gana en cada juego 

juego<- function(n){
  simul<- c()
  for(i in 1:n) {
    d<- sample(6,3,replace = T)
    s<- sum(d ==6)
    g<- (s*20)-10
    simul[i]=g
    i=i+1
    }
    return(simul)
  }


#cien simulaciones
juego_100<-juego(100)
mean(juego_100)
## [1] 0.6
var(juego_100)
## [1] 149.1313
# mil simulaciones
juego_1000<-juego(1000)
mean(juego_1000)
## [1] 1.04
var(juego_1000)
## [1] 187.1055
#diez mil simulaciones

juego_10000<-juego(10000)
mean(juego_10000)
## [1] -0.16
var(juego_10000)
## [1] 163.5108
##

Explique sus hallazgos al dueño del casino.

Observamos que la varianza que presentan las simulaciones es muy alta, lo cual nos dice que el riesgo para este juego es muy alto, en relacion a las ganancias presenta una media negativa en la mayoria de las veces, lo cual nos indica que nos dejara ganancias como casino.

b)

Adapte su función para que tome los argumentos: numero de juegos, dinero inicial, costo del juego, apuesta del juego y que devuelva una lista con:

Un data frame que tenga como columnas: la ganancia del i-ésimo juego y la ganancia acumulada hasta el juego i

Un grafico de la ganancia acumulada

casino<-function(n,c,a,d_i){
    g_a<-c()
    g_a[1]<-d_i
    
   for(i in 1:n) {
    d<- sample(6,3,replace = T)
    s<- sum(d ==6)
    g=(s*a)-c
    g_a[i+1]=g_a[i]+g
    }
    
    result<-list(ganancia = data.frame(tiempo=0:n,"ganancia juego i" = g_a),  plot(0:n,g_a)) 
 
           return(result)
  }

Explore y explique las siguientes combinaciones para dinero inicial, costo del juego, apuesta del juego: (10,10,10), (10,2,5), (100, 10, 20), (1000, 5, 10). Explique.

sim1<-casino(10,10,10,10) 

sim1
## $ganancia
##    tiempo ganancia.juego.i
## 1       0               10
## 2       1               10
## 3       2               10
## 4       3               10
## 5       4                0
## 6       5              -10
## 7       6                0
## 8       7               10
## 9       8               10
## 10      9                0
## 11     10              -10
## 
## [[2]]
## NULL
sim2<- casino(10,2,5,10)

sim2
## $ganancia
##    tiempo ganancia.juego.i
## 1       0               10
## 2       1               13
## 3       2               16
## 4       3               14
## 5       4               12
## 6       5               15
## 7       6               13
## 8       7               16
## 9       8               24
## 10      9               22
## 11     10               30
## 
## [[2]]
## NULL
sim3<- casino(10,10,20,100)

sim3
## $ganancia
##    tiempo ganancia.juego.i
## 1       0              100
## 2       1               90
## 3       2               80
## 4       3               70
## 5       4               60
## 6       5               50
## 7       6               60
## 8       7               50
## 9       8               40
## 10      9               50
## 11     10               40
## 
## [[2]]
## NULL
sim4<- casino(10,2,10,1000)

sim4
## $ganancia
##    tiempo ganancia.juego.i
## 1       0             1000
## 2       1             1008
## 3       2             1006
## 4       3             1014
## 5       4             1012
## 6       5             1020
## 7       6             1028
## 8       7             1026
## 9       8             1044
## 10      9             1042
## 11     10             1040
## 
## [[2]]
## NULL

Haciendo las simulaciones para 10 juegos con los diversas caracteristicas de cada juego podemos concluir que si el costo del juego es de 10 pesos y es igual a la apuesta se presentan mas escenarios desfaborables para el jugador por lo cual es faborable para el casino. Por otro lado si la apuesta es mayor al costo del juego esta presentando ganancias acumuladas faborables para el jugador y perdidas para el casino. Esto nos hace sentido pues con participar con poco dinero y si ganas estas creciendo tu apuesta o tu ganancia acumulada hasta 5 veces para el ultimo escenario. Por lo que para garantizar una ganancia para el casino el costo del juego deberia ser igual a la apuesta.