library(dygraphs)
library(ggplot2)
library(dplyr)
library(gganimate)
library(gapminder)
library(gifski)
library(extrafont)
library(png)
library(plotly)
Usted tiene un algoritmo que estima, dado un instante de tiempo \(\bigtriangleup\) \(t1\), la variación de precio que tendrá una acción en la bolsa en los instantes \(\bigtriangleup\) \(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?
input <- read.table("C:/Users/Bebesitos/Downloads/input.txt", quote="\"", comment.char="")
x<-read.delim("C:/Users/Bebesitos/Downloads/input.txt", header = FALSE)
y<-sum(x)+0
y
## [1] 439
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.
Por ejemplo si las variaciones fueran \(c(+1,-2,+3,+1)\), se tendría:
Precio actual: \(0\); variación de \(+1\); precio resultante: \(1\) Precio actual: \(1\); variación de \(-2\); precio resultante: \(-1\) Precio actual: \(-1\); variación de \(+3\); precio resultante: \(2\) Precio actual: \(2\); variación de \(+1\); precio resultante: \(3\) aquí se vuelve a iniciar con la lista de variaciones (la historia siempre se repite) Precio actual: \(3\); variación de \(+1\); precio resultante: \(4\) Precio actual: \(4\); variación de \(-2\); precio resultante: \(2\) aquí se detiene el algoritmo pues el precio resultante igual a \(2\) ya fue observado.
¿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.
x <- c()
x[1] <- 0
i <- 1
b <- TRUE
while (b == TRUE) {
for(j in 2:nrow(input)){
z<-x[i]+input$V1[j]
i <- i+1
if (z %in% x){
print(z)
b <<- FALSE
break;
}else{x[i]<-z}
}
}
El primer precio que ocurre dos veces es 124645
Si hacemos una lista de los números naturales menores a \(10\) que son multiplos de \(3\) ó \(5\) obtendremos \(c(3, 5, 6, 9)\), la suma de esos multiplos es \(23\).
Encuentre la suma de todos los multiplos de \(3\) ó \(5\) menores a \(1000\).
n<- 1:1000
n %% 5 == 0
n %% 3 == 0
sum(n[n %% 5 == 0 | n %% 3 == 0])
La suma es 234168
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}\)
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])
}
}
}
t <- fibo(1000000000)
t_pares <- t[t%%2 == 0]
t_impares <- t[t%%2 != 0]
sum(t_impares)/sum(t_pares)
## [1] 4.236068
Ahora considere los primeros \(10n\) elementos de la sucesión de Fibonacci con \(n \in 1,200\), sean \(x\) el número de elementos impares, \(y\) el número de elementos pares y \(z= \frac{x}{y}\). Haga un gráfico interactivo del vector de \(z's\). Explique un par de insights interesantes sobre el ejercicio.
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)
}
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)
}
library(gganimate)
library(ggplot2)
tabla5 <- data.frame(dato = z)
gif1 <- ggplot(tabla5, aes(x = 1:200, y = z)) +
geom_line(color = "red") + labs(x = "", y = "IMPARES / PARES") + theme_classic()
x1 = 1:200
gif1 + transition_reveal(along = x1)
Animacion ejercicio 5
Debido a la lonogitud que nos pide el ejercicio, no se pueden mostrar como tal todos los elementos requeridos, es por ello que “se cortan”.
Ahora, entre más elementos se tengan igualmente se tendrán mayor cantidad de números pares, es lo que nos diría la gráfica, pero esto no tendría mucho sentido si se comienza a observar la secuencia que arroja, hay más impares que pares.
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)\)
require(primes)
Primos=0
for(i in 1:100){
z<-generate_primes(min=2,10*i)
Primos[i]<-length(z)/(10*i)
}
Primos1<-as.data.frame(P)
gif2 <- ggplot(Primos1, aes(x = 1:100, y = Primos)) +
geom_line(color = "orange") + labs(x = "10k naturales", y = "Proporcion numeros primos") + theme_classic()
gif2 + transition_reveal(1:100)
Animacion ejercicio 6
Es bien sabido que \(\rho(X,Y) = 0\) \(\Rightarrow\) \(X \perp Y\) es falso. Simule un contraejemplo.
x<-rnorm(1000)
y <- x^2
round(cor(x,y))
## [1] 0
plot(x,y)
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. 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:
Un data frame que tenga como columnas: la ganancia del i-ésimo juego y la ganancia acumulada hasta el juego i.
Un gráfico de la ganancia acumulada.
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.
juego <- function(){
money <- 0
for(j in 1:3){
if(sample(1:6,1) == 6){
money <- money+20
}
}
money_total <- money-10
return(money_total)
}
Para \(100\) juegos se tiene lo siguiente:
juegos100 <- c()
for(i in 1:100){
juegos100[i] <- juego()
}
Media de \(100\) juegos
mean(juegos100)
## [1] 1.6
Varianza de \(100\) juegos
var(juegos100)
## [1] 219.6364
Para \(1000\) juegos se obtuvo lo siguiente:
juegos1000 <- c()
for(i in 1:1000){
juegos1000[i] <- juego()
}
Media de \(1000\) juegos
mean(juegos1000)
## [1] 0.48
Varianza de \(1000\) juegos
var(juegos1000)
## [1] 175.1447
Para \(10000\) juegos se obtuvieron los resultados…
juegos10000 <- c()
for(i in 1:10000){
juegos10000[i] <- juego()
}
Media de \(10000\) juegos
mean(juegos10000)
## [1] -0.01
Varianza de \(10000\) juegos
var(juegos10000)
## [1] 165.5365
juego2 <- function(n,dinero_inicial,costo_juego,apuesta_juego){
juegoi <- c(0)
ganancia_acumulada <- c(dinero_inicial)
for(i in 1:n){
money <- 0
for(j in 1:3){
if(sample(1:6,1) == 6){
money <- money + apuesta_juego
}
}
juegoi[i+1] <- money
dinero_inicial <- dinero_inicial+money-costo_juego
ganancia_acumulada[i+1] <- dinero_inicial
}
df <- data.frame(juegoi,ganancia_acumulada)
names(df) <- c("Ganancia juego i","Ganancia acumulada juego i")
par(bg = "coral")
par(col.axis = "gold")
par(col.lab = "black")
par(font.axis = 4)
par(font.lab = 4)
p <- plot(0:n,ganancia_acumulada,type = "l",xlab = "i-æ¼ã¸¹simo juego", ylab = "Ganancia acumulada", col="blue")
obtenido <- list(df,p)
return(obtenido)
}
combinacion1 <- juego2(200,10,10,10)
Se vuelve complicado ganar en este juego, el dinero inicial, costo del juego y apuesta del juego es el mismo, esto afecta pues al momento de que se intenta generar una ganancia los resultados a obtener tienen una probabilidad bastante baja de que ocurran y en consecuencia se obtiene pérdidad de dinero.
combinacion2 <- juego2(200,10,2,5)
Aquí ya se observa claramente una ganancia por parte del jugador, a pesar de que el costo del juego es menor que la apuesta a realizar.
combinacion3 <- juego2(200,100,10,20)
Nuevamente se observa ganancia del jugador.
combinacion4 <-juego2(200,1000,5,10)
Por último en esta gráfica se puede decir que no se obtienen ni pérdidas ni ganancias.