library(pdfetch) library(tidyverse) library(yuima)

Obtener los datos desde el sitio de Yahoo

NVCRdata <- pdfetch_YAHOO(“F”, from = c(“2019-01-01”), to = c(“2020-01-01”), interval = ‘1d’)

Obtener la columna que es de nuestro interés

Novocure <- NVCRdata[, 4]

Convertir en una serie temporal

tsNovoCure <- ts(Novocure, start = c(2019, 1), frequency = 365)

Graficar

plot(tsNovoCure)

Ver si es estacionaria

. - . . . .

Calcular las diferencias de la serie de datos con logaritmo

l_NovoCure <- diff(log(tsNovoCure)) plot(l_NovoCure)

Calcular parámetros iniciales

Delta <- 1/365 alpha <- mean(l_NovoCure) / Delta sigma <- sqrt(var(l_NovoCure) / Delta) mu <- alpha + 0.5 * sigma^2 x0 <- tsNovoCure[1]

Configurar el modelo

x <- tsNovoCure gBm <- setModel(drift = “mu * x”, diffusion = “sigma * x”, xinit = x0) mod <- setYuima(model = gBm, data = setData(tsNovoCure, delta = Delta))

Estimación de parámetros

set.seed(123) fit <- qmle(mod, start = list(mu = 0, sigma = 1), lower = list(mu = 0.1, sigma = 0.1), upper = list(mu = 100, sigma = 10)) summary(fit)

Comparación de parámetros estimados

coef(fit) sigma mu

Función para simular el modelo GBM

gbm_vec <- function(nsim = 10000, t = 25, mu = 0, sigma = 0.1, S0 = 100, dt = 1./365) { # Matrix de números aleatorios para cada día y cada simulación epsilon <- matrix(rnorm(tnsim), ncol = nsim, nrow = t)
# Obtener GBM y convertirlo en series de precios gbm <- exp((mu - sigma
sigma / 2) * dt + sigma * epsilon * sqrt(dt)) gbm <- apply(rbind(rep(S0, nsim), gbm), 2, cumprod) return(gbm) }

Simular GBM y graficar

nsim <- 1000 t <- 366 mu <- 1.517177 sigma <- 0.531907 S0 <- 32.72 dt = 1/365 gbm <- gbm_vec(nsim, t, mu, sigma, S0, dt)

gbm_df <- as.data.frame(gbm) %>% mutate(ix = 1:nrow(gbm)) %>% pivot_longer(-ix, names_to = ‘sim’, values_to = ‘price’) gbm_df %>% ggplot(aes(x=ix, y=price, color=sim)) + geom_line() + theme(legend.position = ‘none’)

data.frame(price = gbm[, t]) %>% ggplot(aes(x = price)) + geom_histogram(aes(y = ..density..), binwidth = 0.1) + geom_density() + ggtitle(‘terminal price distribution’)