1. Usted tiene un algoritmo que estima, dado un instante de tiempo \(\Delta t_1\), la variación de precio que tendrá una acción en la bolsa en los instantes \(\Delta 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?

Para este ejercicio, basta con sumar todos los elementos de la lista de variaciones para obtener el precio final

r1<-sum(lista)

El resultado es 439.

  1. Usted recuerda que un supuesto fuerte del análisis técnico de acciones es, palabras más palabras menos, que la historia 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 el primer precio que ocurre dos veces dada la lista de variaciones?
historico<-function(info){
  a<-c(info[1])
  b<-TRUE
  i<-1
  k<-1
  while (b==TRUE){
    a[i+1]<-a[i]+lista[k+1]
    if(sum(a==a[i+1])==2){b=FALSE}
    b
    i<-i+1
    k<-k+1
    if(k==length(lista)){k=0}
  }
  return(a[length(a)])
}

r2<-historico(lista)

Se crea una función llamada historico() que sumará el vector de variaciones hasta que en el vector de precios se repitan dos valores.

El primer precio repetido es 124645.

  1. Si hacemos una lista de los números naturales menores a 10 que son múltiplosde 3 o 5, obtendremos \((3,5,6,9)\), la suma de esos múltiplos es 23. Encuentre la suma de todos los múltiplos de 3 o 5 menores a 1000.
n<-1000
a<-c()
k<-1
for(i in 1:(n-1)){
  if(i%%3==0 | i%%5==0){
    a[k]<-i
    k<-k+1
  }
}
r3<-sum(a)

El resultado es 233168.

  1. 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=\frac{x}{y}\).

Creamos una función fibo que encuentre todos los números menores a \(n\).

fibo <- function(n){ #Esta es una funcion que regresa todos los numeros de la serie de Fibonacci
  #que sean menores a n
  a<-c()
  a[1:2]<-1
  b<-TRUE
  i<-3
  while (b==TRUE) {
    r<-a[i-2]+a[i-1]
    if(r<n){
      a[i]<-r
      i<-i+1}
    else{b<-FALSE}
    b
  }
  return(a)
}

Ahora, usamos la función, la evaluamos en \(1000000000\) y aplicamos un for para poder ver cuantos pares y cuantos impares hay y poder hacer la proporción

fiboF<-fibo(1000000000)
x<-c()
y<-c()
x_i<-1
y_i<-1
for (i in 1:length(fiboF)) {
  if(fiboF[i]%%2==1){
    x[x_i]<-fiboF[i]
    x_i<-x_i+1
  }
  else{
    y[y_i]<-fiboF[i]
    y_i<-y_i+1
  }
}

r4<-sum(x)/sum(y)

Lo que nos da como resultado 4.236068.

  1. 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\in(1:100)\).
primos <- function(n) {
  if (n >= 2) {
    x = seq(2, n)
    prime_nums = c()
    for (i in seq(2, n)) {
      if (any(x == i)) {
        prime_nums = c(prime_nums, i)
        x = c(x[(x %% i) != 0], i)
      }
    }
    return(prime_nums)
  }
}

z<-c()
for (i in 1:100){
  z[i]<-length(primos(10*i))/(10*i)
}

ggplot(data.frame(x=seq(10,1000,10),y=z),aes(x, y))+
  geom_line(aes(color = x))+scale_color_viridis(option = "magma")+ 
  geom_point()+transition_reveal(x)

  1. Es bien sabido que \(\rho_{X,Y}=0\) entonces \(X\) es independiente de \(Y\) es falso. Simule un contraejemplo.
x<-rnorm(1000)
y<-x^2
p<-round(cor(x,y))


ggplot(data.frame(x=x,y=y), aes(x,y))+geom_point()

Viendo la gráfica podemos notar que los datos no son independientes y \(\rho_{X,Y}=\) 0, por lo que acabamos de dar un contraejemplo para este caso.

  1. 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, es decir, ganancia menos costo. Calcule la media y la varianza al simular 100, 1000, y 10000 juegos. Explique sus hallazgos al dueño del casino. 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:

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.

juego3dados<-function(n){
  g<-c()
  g_a<-0
  for (i in 1:(n-1)) {
    d<-sample(6,3,replace = TRUE) 
    s<-sum(d==6) #cuantos seis salieron
    g[i]<-(s*20)-10 #ganancia
    g_a[i+1]<-g_a[i]+g[i]
  }
  results<-data.frame(tiempo=1:n,ganancia=g_a)
  return(results)
}

Esta función es para el juego descrito arriba: con un costo del juego de 10 pesos, ganancia de 20 pesos y se lanzan 3 dados. El único parámetro que la función te pide es cuantas veces vas a jugar. Como dinero inicial estamos considerando cero, esto para ver cual sería la ganancia o pérdida final. Usando esta función podemos obtener la media y la varianza para diferentes \(n\) y así poder poder analizar si se gana o se pierde.

Acontinuación podemos ver una tabla con las medias y varianzas de jugar 100, 1000 y 10000 veces.

##   juegos    media  varianza
## 1    100 -115.400  3685.697
## 2   1000   67.140 33629.850
## 3  10000 -393.058 82234.592
juego<-function(n,d_i,c,a){
  g<-c()
  g_a<-d_i
  for (i in 1:(n-1)) {
    d<-sample(6,3,replace = TRUE) 
    s<-sum(d==6) #cuantos seis salieron
    g[i]<-(s*a)-c #ganancia
    g_a[i+1]<-g_a[i]+g[i]
  }
  r<-data.frame(tiempo=1:n,ganancia=g_a)
  graf<-ggplot(r,aes(tiempo,ganancia))+geom_line(aes(color = tiempo))+
  geom_point()+scale_color_viridis(option = "magma")
  
  results<-list(ganancia=data.frame(tiempo=1:n,ganancia=g_a),graficos=graf)
  return(results)
}

r8_2.1<-juego(100,10,10,10)
r8_2.2<-juego(100,10,2,5)
r8_2.3<-juego(100,100,10,20)
r8_2.4<-juego(100,1000,5,10)

Primero vamos a analizar el caso de \((10,10,10)\). Viendo la gráfica acontinuación, la pérdida obtenida en esta simulación es de -500, esto se debe a que la ganancia por un 6 es la misma que el costo del juego, por lo que las ganancias son reducidas, por juego a lo mas podrías ganar 30 pesos, y tendrías que restarle los 10 que te costó jugar, y esto con una probabilidad muy baja, por lo que se espera la ruina del jugador.

En el caso de \((10,2,5)\), el juego va a favor del jugador, que en este caso fue de 47, ya que la ganancia por cada 6 es bastante mayor al costo del juego, por lo que, si sale al menos un 6, el jugador ya recuperó el costo del juego y además tiene una pequeña ganancia.

En el caso de \((100,10,20)\), la cosa está más pareja, la ganancia por cada 6 es el doble del costo del juego y la posiblidad de bancarrota o de victoria esta equilibrada.

Por último, el caso \((1000,5,10)\), es muy parecido al caso anterior, la ventaja aquí es que el dinero inicial es mucho mayor que el costo y la ganancia, por lo que, aunque al final termine perdiendo, no se espera que su pérdida sea muy elevada en comparación con su presupuesto.