library(pdfetch) library(tidyverse) library(yuima)
NVCRdata <- pdfetch_YAHOO(“F”, from = c(“2019-01-01”), to = c(“2020-01-01”), interval = ‘1d’)
Novocure <- NVCRdata[, 4]
tsNovoCure <- ts(Novocure, start = c(2019, 1), frequency = 365)
plot(tsNovoCure)
l_NovoCure <- diff(log(tsNovoCure)) plot(l_NovoCure)
Delta <- 1/365 alpha <- mean(l_NovoCure) / Delta sigma <- sqrt(var(l_NovoCure) / Delta) mu <- alpha + 0.5 * sigma^2 x0 <- tsNovoCure[1]
x <- tsNovoCure gBm <- setModel(drift = “mu * x”, diffusion = “sigma * x”, xinit = x0) mod <- setYuima(model = gBm, data = setData(tsNovoCure, delta = Delta))
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)
coef(fit) sigma mu
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) }
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’)