[R] Hyperbolic code in R studio ?
Aissata Kagnassi
t@t|k@gn@@@| @end|ng |rom gm@||@com
Sat Dec 21 10:33:16 CET 2019
Good morning everyone,
I don't want to bother you. I'm new at using R. :)
1. I was wondering if someone could help me figure out why I can't generate
the code to get a hyperbolic function.
2. My second question is, I generated the code. I don't have any problem
with other distributions but I still can't get the graphics displayed.
Here are the instructions for my exercise and here is the code I used:
**Instructions**
Project: hereafter the series of financial returns will be refered to as yt
and the series of fundamentals as xt. Here are the questions you need to
raise and answer:
Part 1: maximum likelihood estimation, student test and goodness of fit.
1. Consider the following model:
yt =μ+σεt, with εt a disturbance such that E[εt] = 0 and V[εt] = 1.
*Estimate the parameters of the following distributions by maximum
likelihood using the Yt:*
• Gaussian distribution N(0,1)
• Student-t distribution with parameter ν
• A mixture of Gaussian distribution MN(φ, μ1, σ1, μ2, σ2)
• A generalized hyperbolic distribution GH(λ, α, β, δ, μ).
2. *Test the parameters for their significance using a Student test. Are
all the parameters statistically significant?*
**My code:**
For the first three distributions, I answered well for questions one and
two which are in italics. But I have a problem with the last one.
library(readxl)
Data <- read_excel("Data_project.xlsx", sheet = 2, skip = 5, col_names =
FALSE)
#y variable to explain, Nikkei 225 index
y <- Data[16]
# x variable explanatory variable, Australian Dollar vs. US Dollar
x <- Data[30]
returns_y = diff(as.matrix(log(y)),1)
returns_x = diff(as.matrix(log(x)),1)
returnsy_std = scale(returns_y)
#1. Estimate the parameters by maximum likelihood
#Gaussian distribution N(0, 1)
mu=0
sigma=0.1
para0 = c(mu,sigma)
loglikG<-function(para,returns_y)
{
mu = para[1]
sigma = para[2]
print(para)
logl=sum(log(dnorm((returns_y-mu)/sigma, 0, 1)/sigma))
return(-logl)
}
loglikG(para0,returns_y)
fit <- optim(para0, loglikG, gr=NULL, returns_y, method="BFGS",hessian=T)
paraopt<- fit[["par"]]
Hessian = fit$hessian
invh = solve(Hessian)
t1= sqrt(invh[1,1])
t2=sqrt(invh[2,2])
testzmu = paraopt[1]/t1
testzvar = paraopt[2]/t2
print(testzmu)
print(testzvar)
#T-student
para_t=c(0,0.012,5)
loglikt <- function(para,returns_y){
mut=para[1]
sigmat=para[2]
nu=para[3]
m=-sum(log(dt((returns_y-mut)/sigmat, df=nu)/sigmat))
return(m)
}
loglikt(para_t,returns_y)
output_t= optim(para_t, loglikt, gr=NULL, returns_y, method="BFGS",
hessian=TRUE)
paraopt_t <- output_t[["par"]]
Hessian_t = output_t$hessian
invh_t = solve(Hessian_t)
t1_t= sqrt(invh_t[1,1])
t2_t=sqrt(invh_t[2,2])
t3_t= sqrt(invh_t[3,3])
testzmu_t = paraopt_t[1]/t1_t
testzvar_t = paraopt_t[2]/t2_t
testznu_t = paraopt_t[3]/t3_t
print(testzmu_t)
print(testzvar_t)
print(testznu_t)
#Mixture of Gaussian finding initial values
library(LaplacesDemon)
eps = 0.001
tolerance = 0.95
paraMG = c(-0.02,0.03,0.6,0.8,0.7)
likehoodMG <- function(para,returnsy_std)
{
muM12 = para[1:2]
sigmaM12 = para[3:4]
phi = para[5]
p = c(phi,1-phi)
LM=sum(log(dnormm(returnsy_std,muM12,sigmaM12,p=p)))
mean_w = p[1]*muM12[1] + p[2]*muM12[2]
var_w = p[1]*sqrt(sigmaM12[1]) + p[2]*sqrt(sigmaM12[2])
if((abs(mean_w)>tolerance) || (abs(var_w-1)>tolerance)){
return(NaN)
}
return(-LM)
}
likehoodMG(paraMG,returnsy_std)
outputMG = optim(paraMG, likehoodMG, gr=NULL, returnsy_std, method =
"L-BFGS-B", hessian=TRUE,
lower = c(eps,eps,-Inf,-Inf,eps), upper =
c(Inf,Inf,Inf,Inf,1-eps))
paraoptMG = outputMG[["par"]]
#Mixture of Gaussian
#(0.000345,0.023306)
paraM
=c(0.000345,0.023306,0.0253514,0.0010000,0.8715856,2.7857329,0.9659020)
likehoodM <- function(para,returns_y)
{
muM1 = para[1]
sigmaM = para[2]
muM12 = para[3:4]
sigmaM12 = para[5:6]
phi = para[7]
p = c(phi,1-phi)
LM=sum(log(dnormm((returns_y-muM1)/sigmaM,muM12,sigmaM12,p=p)/sigmaM))
return(-LM)
}
likehoodM(paraM,returns_y)
outputM = optim(paraM, likehoodM, gr=NULL, returns_y, method = "L-BFGS-B",
hessian=TRUE,
lower = c(-Inf,eps,eps,eps,-Inf,-Inf,eps), upper =
c(Inf,Inf,Inf,Inf,Inf,Inf,1-eps))
paraoptM = outputM[["par"]]
HM = outputM[["hessian"]]
invHM = solve(HM)
tm1 = sqrt(invHM[1,1])
tm2 = sqrt(invHM[2,2])
tm3 = sqrt(invHM[3,3])
tm4 = sqrt(invHM[4,4])
tm5 = sqrt(invHM[5,5])
tm6 = sqrt(invHM[6,6])
tm7 = sqrt(invHM[7,7])
testtmum = (paraoptM[1]-0)/tm1
testtsigmam = paraoptM[2]/tm2
testtmum1 = (paraoptM[3])/tm3
testtmum2 = paraoptM[4]/tm4
testtvarm1 = paraoptM[5]/tm5
testtvarm2 = paraoptM[6]/tm6
testtphi = paraoptM[7]/tm7
print(testtmum)
print(testtsigmam)
print(testtmum1)
print(testtmum2)
print(testtvarm1)
print(testtvarm2)
print(testtphi)
#A generalized hyperbolic distribution GH(??, ??, ??, ??, ?).
library(readxl)
Data <- read_excel("Data_project.xlsx", sheet = 2, skip = 5, col_names =
FALSE)
#y variable to explain, Nikkei 225 index
y <- Data[16]
# x variable explanatory variable, Australian Dollar vs. US Dollar
x <- Data[30]
returns_y = diff(as.matrix(log(y)),1)
returns_x = diff(as.matrix(log(x)),1)
returnsy_std = scale(returns_y)
#A generalized hyperbolic distribution GH(??, ??, ??, ??, ?).
library(ghyp)
para_gh= c(-0.00002,0.005,1,0,1,0.1,0.1) # mu,delta,alpha,beta,lambda
loglikGH <- function(para,returns_y){
mugh=para[1]
sigmagh=para[2]
alpha=para[3]
beta = para[4]
delta=para[5]
chi=para[6]
lamda=para[7]
if(delta < abs(chi)){
return(10000)
}else{
return(-sum(log(dghyp(((returns_y-mugh)/sigmagh),object =
ghyp(alpha,beta,delta,chi,lamda))/sigmagh)))
}
}
loglikGH(para_gh,returns_y)
eps = 0.001
outputGH= optim(para_gh, loglikGH, gr=NULL, returns_y, method = "L-BFGS-B",
hessian=TRUE,
lower = c(-Inf,eps,eps,eps,-Inf,-Inf,eps), upper =
c(Inf,Inf,Inf,Inf,Inf,Inf,Inf))
paraoptGH = outputGH[["par"]]
HGH = outputGH[["hessian"]]
invHGM = solve(HGH)
tm1_H = sqrt(invHGM[1,1])
tm2_H = sqrt(invHGM[2,2])
tm3_H = sqrt(invHGM[3,3])
tm4_H = sqrt(invHGM[4,4])
tm5_H = sqrt(invHGM[5,5])
tm6_H = sqrt(invHGM[6,6])
tm7_H = sqrt(invHGM[7,7])
testtmuH = (paraoptGH[1]-0)/tm1_H
testtsigmaH = paraoptGH[2]/tm2_H
testtalpha = (paraoptGH[3])/tm3_H
testtbetha = paraoptGH[4]/tm4_H
testtdelta = paraoptGH[5]/tm5_H
testtvchi = paraoptGH[6]/tm6_H
testtlambda = paraoptGH[7]/tm7
print(testtmuH)
print(testtsigmaH)
testtalpha
testtbetha
testtdelta
testtvchi
testtlambda
[[alternative HTML version deleted]]
More information about the R-help
mailing list