Load the data;
yahoo_data <- read.csv(file.choose(), header = T, sep = ",")
head(yahoo_data)
## Date Open High Low Close Adj.Close Volume
## 1 1/1/2010 1116.56 1150.45 1071.59 1073.87 1073.87 90947580000
## 2 2/1/2010 1073.89 1112.42 1044.50 1104.49 1104.49 84561340000
## 3 3/1/2010 1105.36 1180.69 1105.36 1169.43 1169.43 103684000000
## 4 4/1/2010 1171.23 1219.80 1170.69 1186.69 1186.69 116742000000
## 5 5/1/2010 1188.58 1205.13 1040.78 1089.41 1089.41 127663000000
## 6 6/1/2010 1087.30 1131.23 1028.33 1030.71 1030.71 110107000000
data <- yahoo_data$Close
Calculate the log returns;
logReturn = diff(log(data))
head(logReturn)
## [1] 0.02811474 0.05713282 0.01465137 -0.08553157 -0.05538845 0.06651580
Plot the log returns;
plot(logReturn, type = "l", lwd = 2.5, xlab = "Time", ylab = "Log Returns", col = 1, main = "Log Returns for Yahoo Data")
Estimate parameters from the log returns;
Return <- function(mu, sigma){
R = dnorm(logReturn, mu, sigma, log = TRUE)
-sum(R)
}
library(bbmle)
## Warning: package 'bbmle' was built under R version 3.6.3
fit_norm <- mle2(Return, start = list(mu = 0, sigma = 1), data=list(size=108))
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
## Warning in dnorm(logReturn, mu, sigma, log = TRUE): NaNs produced
summary(fit_norm)
## Maximum likelihood estimation
##
## Call:
## mle2(minuslogl = Return, start = list(mu = 0, sigma = 1), data = list(size = 108))
##
## Coefficients:
## Estimate Std. Error z value Pr(z)
## mu 0.0079227 0.0034278 2.3113 0.02082 *
## sigma 0.0354574 0.0024242 14.6267 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## -2 log L: -411.0039