library(Matrix)
A <- read.table("/Users/YaseenAbdulridha/Downloads/3_06.csv")
x <- A$x
y <- A$y
z <- A$z


log_mvnpdf = function( v, mu, A){
  n<- length(v)
  u <- v-mu
  ss <- sum(solve(A,u)*u)
  det <- 2*sum( log( diag( chol( A )))) 
  logL <- .5*( ss + det + n*log(2*pi) )
}

AR(2)

xlogL = function( theta ) {
  n     <- length(x)
  mu    <- theta[1]
  phi1  <- theta[2]
  phi2  <- theta[3]
  sigma <- theta[4]
  ii <- 3:n
  logL <- -sum( dnorm( x[ii], mu + phi1*x[ii-1] + phi2*x[ii-2], sigma, log=TRUE) )
}
optim( c(0,0,0,1), xlogL, method="BFGS" )
## $par
## [1] -0.01628134  0.95735919 -0.22430406  0.97910072
## 
## $value
## [1] 1395.021
## 
## $counts
## function gradient 
##       62       17 
## 
## $convergence
## [1] 0
## 
## $message
## NULL
arima( x, order=c(2,0,0) )
## 
## Call:
## arima(x = x, order = c(2, 0, 0))
## 
## Coefficients:
##          ar1      ar2  intercept
##       0.9571  -0.2241    -0.0690
## s.e.  0.0308   0.0309     0.1157
## 
## sigma^2 estimated as 0.9578:  log likelihood = -1397.91,  aic = 2803.82

MA(2)

ylogL = function( theta) {
  n     <- length(y)
  mu    <- theta[1]
  1
  rho   <- ARMAacf( ma=theta[2:3] )
  gamma <- rho * theta[4]^2 * ( 1 + sum(theta[2:3]^2 ))
  A <- bandSparse( n,
                  n,
                  k=0:2,
                  diagonals=cbind( rep(gamma[1],n), rep(gamma[2],n), rep(gamma[3],n) ),
                  symmetric=TRUE)
  logL <- log_mvnpdf( y, mu, A )
}
optim( c(0,0,0,1), ylogL, method="BFGS" )
## $par
## [1] -0.02507634  0.71874704 -0.16294877  1.09991286
## 
## $value
## [1] 1514.871
## 
## $counts
## function gradient 
##       33       10 
## 
## $convergence
## [1] 0
## 
## $message
## NULL
arima( y, order=c(0,0,2) )
## 
## Call:
## arima(x = y, order = c(0, 0, 2))
## 
## Coefficients:
##          ma1      ma2  intercept
##       0.7187  -0.1629    -0.0252
## s.e.  0.0310   0.0310     0.0541
## 
## sigma^2 estimated as 1.21:  log likelihood = -1514.87,  aic = 3037.74

ARMA(1,1)

zLogL=function(theta){
  n<-length(z)-1
  mu<-theta[1]
  phi<-theta[2]
  rho<-ARMAacf(ma=theta[3])
  gamma<-rho*theta[4]^2 * (1+theta[3]^2)
  A<-bandSparse(n,
               n,
               k=0:1,
               diagonals = cbind(rep(gamma[1],n),rep(gamma[2],n)),
               symmetric=TRUE)
  ii <- (1:n)+1
  logL<-log_mvnpdf(z[ii],mu +phi*z[ii-1],A)
}

optim( c(0,0,0,1), zLogL, method="BFGS" )
## $par
## [1] -0.01265133  0.94917268 -0.19805777  0.97966523
## 
## $value
## [1] 1397.103
## 
## $counts
## function gradient 
##       84       28 
## 
## $convergence
## [1] 0
## 
## $message
## NULL
arima(z,order=c(1,0,1))
## 
## Call:
## arima(x = z, order = c(1, 0, 1))
## 
## Coefficients:
##          ar1      ma1  intercept
##       0.9497  -0.1974    -0.3693
## s.e.  0.0107   0.0335     0.4859
## 
## sigma^2 estimated as 0.9604:  log likelihood = -1399.69,  aic = 2807.38