Skip to content

Error while fitting gumbel copula

6 messages · Isaudin Ismail, Martin Maechler

#
Dear R experts,

I have 5 time series of data (A, B, C, D and E) with all same lengths. All
series exhibit gamma distribution except for B which is lognormal
distribution. I am using copula package to model the joint-distribution of
these 5 times series.

I have selected Archimedean copula and successfully fitted  Frank and
Clayton copula. The problem is when trying to fit Gumbel copula.

The following are the codes I used to run in R.

# Data of 5 time series
A <- A
B <- B
C <- C
D <- D
E <- E

# Combined between A and C
A+C <- A + C

gumbel.copula <- gumbelCopula(dim = 5)
m <- pobs(as.matrix(cbind(A+C, B, D, E)))
fit.gumbel<- fitCopula(gumbel.copula, m, method = 'ml')

And the error while trying to fit gumbel copula:

Error in optim(start, loglikCopula, lower = lower, upper = upper, method =
method,  :
  non-finite finite-difference value [1]
In addition: Warning message:
In .local(copula, tau, ...) : tau is out of the range [0, 1]

Appreciate all help!

Many thanks,
Isaudin
1 day later
#
> Dear R experts,
    > I have 5 time series of data (A, B, C, D and E) with all same lengths. All
    > series exhibit gamma distribution except for B which is lognormal
    > distribution. I am using copula package to model the joint-distribution of
    > these 5 times series.

    > I have selected Archimedean copula and successfully fitted  Frank and
    > Clayton copula. The problem is when trying to fit Gumbel copula.

    > The following are the codes I used to run in R.

    > # Data of 5 time series

    > A <- A
    > B <- B
    > C <- C
    > D <- D
    > E <- E

well, the above is really an "interesting" block of R code ;-)

--

More seriously, please learn to use reproducible examples,
e.g., from here
  http://bit.ly/MRE_R (nice to remember: MRE = Minimal Reproducible Example)
or here
  http://adv-r.had.co.nz/Reproducibility.html

then we will be glad to help you,
notably I as maintainer of the package 'copula' which you are
using (without saying so).

With regards,
Martin Maechler


    > # Combined between A and C
    > A+C <- A + C

    > gumbel.copula <- gumbelCopula(dim = 5)
    > m <- pobs(as.matrix(cbind(A+C, B, D, E)))
    > fit.gumbel<- fitCopula(gumbel.copula, m, method = 'ml')

    > And the error while trying to fit gumbel copula:

    > Error in optim(start, loglikCopula, lower = lower, upper = upper, method =
    > method,  :
    > non-finite finite-difference value [1]
    > In addition: Warning message:
    > In .local(copula, tau, ...) : tau is out of the range [0, 1]

    > Appreciate all help!

    > Many thanks,
    > Isaudin

    > [[alternative HTML version deleted]]

    > ______________________________________________
    > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
    > https://stat.ethz.ch/mailman/listinfo/r-help
    > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
    > and provide commented, minimal, self-contained, reproducible code.
4 days later
#
Dear Dr. Martin,

I'm glad that you replied to my queries.

As advised, I have prepared the following:

library(copula)



# 5 series of data, A, B, C, D and E
A <- c(0.849420849, 0.900652985, 0.97144217, 0.817888428, 0.877901578,
       1.070040669, 0.889742431, 0.87588968, 0.853541938, 0.848664688,
       0.876830319, 0.749582638, 0.818515498, 0.890997174, 0.794766966,
       0.784794851, 0.814858959, 1.074396518, 0.83752495, 0.894341116,
       0.880375293, 0.900816803)

B <- c(0.479850746, 0.652111668, 1.880607815, 0.579902303, 0.50669344,
       0.747560182, 0.701754386, 0.48969697, 0.346751006, 0.379234973,
       0.862691466, 0.328280188, 0.317312661, 0.534438115, 0.487002653,
       0.335043612, 0.373346897, 0.627520161, 0.792114695, 0.938253012,
       0.444553967, 0.625972763)

C <- c(0.693491124, 0.866523143, 4.585714286, 1.512055109, 0.387755102,
       0.513435701, 0.76252505, -0.113113113, 0.338521401, 0.333951763,
       0.668755595, 0.401273885, 0.419868791, 0.272885789, 0.541541542,
       0.32751938, 0.386409736, 0.957446809, 0.861195542, 1.531632653,
       0.431610942, 1.226470588)

D <- c(0.807792208, 0.548547718, 0.738232865, 0.542247744, 1.088964927,
       0.862385321, 0.60720268, 1.000816993, 0.699289661, 0.41723356,
       0.604037267, 0.605003791, 0.698940998, 0.764792899, 0.647897898,
       0.825256975, 0.767476085, 0.941391941, 0.889547813, 0.324503311,
       0.942435424, 0.740686633)

E <- c(1.077598829, 0.318507891, 1.152616279, 0.930397727, 1.515994437,
       0.940689655, 0.880886427, 1.054274084, 1.067282322, 0.677419355,
       0.966233766, 0.761029412, 1.05734767, 0.615925059, 1.061988304,
       1.07184241, 1.058890147, 1.123873874, 1.304891923, -0.069584736,
       1.172757475, 0.501096491)

gumbel.copula <- gumbelCopula(dim = 2)
p <- pobs(as.matrix(cbind(D + E, A + B+ C )))

fit.gumbel <- fitCopula(gumbel.copula, p, method = "ml") #The error is here
when trying to fit the gumbel copula

# I got the following error:
Error in optim(start, loglikCopula, lower = lower, upper = upper, method =
method,  :
                 non-finite finite-difference value [1]
              In addition: Warning message:
              In .local(copula, tau, ...) : tau is out of the range [0, 1]

#Due to error in fitting the gumbel copula, this step can't be processed

coef(fit.gumbel)
gofCopula(gumbel.Copula, p, estim.method = "mpl", method = "Sn", simulation
= "mult")


Thanks in advance!

Best regards,
Isaudin

On Wed, Aug 10, 2016 at 5:08 PM, Martin Maechler <maechler at stat.math.ethz.ch

  
  
3 days later
#
Dear Martin,

Following my earlier question on "error while fitting gumbel copula", I
have also crated a new gist at https://gist.github.com/anonymous/
0bb8aba7adee550d40b840a47d8b7e25 for easy checking and copying codes.

I got no problem fitting other Archimedean copulas except gumbel copula as
per my code I used above.

Appreciate your kind help.

Many thanks,
Isaudin
On Mon, Aug 15, 2016 at 4:28 PM, Isaudin Ismail <isaudin at gmail.com> wrote:

            

  
  
4 days later
#
> Dear Martin, Following my earlier question on "error while
    > fitting gumbel copula", I have also crated a new gist at
    > https://gist.github.com/anonymous/0bb8aba7adee550d40b840a47d8b7e25 
    > for easy checking and copying codes.

    > I got no problem fitting other Archimedean copulas except
    > gumbel copula as per my code I used above.

    > Appreciate your kind help.

    > Many thanks, Isaudin


    > On Mon, Aug 15, 2016 at 4:28 PM, Isaudin Ismail
> <isaudin at gmail.com> wrote:
>> Dear Dr. Martin,
    >> 
    >> I'm glad that you replied to my queries.
    >> 
    >> As advised, I have prepared the following:

MM: I'm including (cut'n'pasting) my commented and augmented version here:

------------------------------------------------------------------

## From: Isaudin Ismail <isaudin at gmail.com>
## To: Martin Maechler <maechler at stat.math.ethz.ch>
## CC: <r-help at r-project.org>
## Subject: Re: [R] Error while fitting gumbel copula
## Date: Mon, 15 Aug 2016 16:28:14 +0100

## Dear Dr. Martin,

## I'm glad that you replied to my queries.
## As advised, I have prepared the following:

library(copula)

## 5 series of data, A, B, C, D and E
A <- c(0.849420849, 0.900652985, 0.97144217, 0.817888428, 0.877901578,
       1.070040669, 0.889742431, 0.87588968, 0.853541938, 0.848664688,
       0.876830319, 0.749582638, 0.818515498, 0.890997174, 0.794766966,
       0.784794851, 0.814858959, 1.074396518, 0.83752495, 0.894341116,
       0.880375293, 0.900816803)

B <- c(0.479850746, 0.652111668, 1.880607815, 0.579902303, 0.50669344,
       0.747560182, 0.701754386, 0.48969697, 0.346751006, 0.379234973,
       0.862691466, 0.328280188, 0.317312661, 0.534438115, 0.487002653,
       0.335043612, 0.373346897, 0.627520161, 0.792114695, 0.938253012,
       0.444553967, 0.625972763)

C <- c(0.693491124, 0.866523143, 4.585714286, 1.512055109, 0.387755102,
       0.513435701, 0.76252505, -0.113113113, 0.338521401, 0.333951763,
       0.668755595, 0.401273885, 0.419868791, 0.272885789, 0.541541542,
       0.32751938, 0.386409736, 0.957446809, 0.861195542, 1.531632653,
       0.431610942, 1.226470588)

D <- c(0.807792208, 0.548547718, 0.738232865, 0.542247744, 1.088964927,
       0.862385321, 0.60720268, 1.000816993, 0.699289661, 0.41723356,
       0.604037267, 0.605003791, 0.698940998, 0.764792899, 0.647897898,
       0.825256975, 0.767476085, 0.941391941, 0.889547813, 0.324503311,
       0.942435424, 0.740686633)

E <- c(1.077598829, 0.318507891, 1.152616279, 0.930397727, 1.515994437,
       0.940689655, 0.880886427, 1.054274084, 1.067282322, 0.677419355,
       0.966233766, 0.761029412, 1.05734767, 0.615925059, 1.061988304,
       1.07184241, 1.058890147, 1.123873874, 1.304891923, -0.069584736,
       1.172757475, 0.501096491)

require(copula)
gumbel.copula <- gumbelCopula(dim = 2)
p <- pobs(cbind(D + E, A + B+ C ))

fit.gumbel <- fitCopula(gumbel.copula, p, method = "ml")

## The error is here when trying to fit the gumbel copula

# I got the following error:
## Error in optim(start, loglikCopula, lower = lower, upper = upper, method =
## method,  :
##                  non-finite finite-difference value [1]
##               In addition: Warning message:
##               In .local(copula, tau, ...) : tau is out of the range [0, 1]

## MM:  my version of copula gives the error message  "some tau < 0"
## --                                                      ---------
## and indeed:
(tau.p <- cor(p[,1], p[,2], method="kendall"))
## [1] -0.1428571
##     ^---------  Kendall's tau is =  - 1/7  < 0  ... and that is not good for Gumbel!

plot(p)

##-----------------------------------------------------------------------------

So, you tried fitting to *negatively* correlated data, and if
you use the default instead of "ml" the copula is fit, and uses
param = 1 (which corresponds to the *independence* copula:
Because among all the (weakly) positively correlated gumbel
copulas, the boundary case, param = 1 (<==> tau = 0) is the best
fitting.

What you can do is to "rotate" the data (actually mirror it),
and fit a gumbel copula, which now works nice and easily :

p2 <- p; p2[,2] <- 1-p2[,2]
(tau.p2 <- cor(p2, method="kendall"))
## --> now positively correlated
## --->
gumb.ml.p2 <- fitCopula(gumbel.copula, p2, method = "ml")
summary(gumb.ml.p2) # looks fine now :

  Call: fitCopula(copula, data = data, method = "ml")
  Fit based on "maximum likelihood" and 22 2-dimensional observations.
  Gumbel copula, dim. d = 2 
	  Estimate Std. Error
  param    1.121      0.209
  The maximized loglikelihood is 0.1839 
  Optimization converged
  Number of loglikelihood evaluations:
  function gradient 
         6        6 


---

The next version of copula --- or the R-forge one, if you are
interested will support fitting "rotated" copulas,
so you fit a rotated gumbel copula, flipping, the 2nd coordinate
(but not the first):

rotGcop <- rotCopula(gumbelCopula(), flip=c(FALSE,TRUE))

f2 <- fitCopula(rotGcop, data = p) # default method: "mlp"
summary(f2)

  ## Call: fitCopula(copula, data = data)
  ## Fit based on "maximum pseudo-likelihood" and 22 2-dimensional observations.
  ## rotCopula copula:  Gumbel copula, dim. d = 2 
  ##       Estimate Std. Error
  ## param    1.121      0.225
  ## The maximized loglikelihood is 0.1839 
  ## Optimization converged
  ## Number of loglikelihood evaluations:
  ## function gradient 
  ##        6        6 

-------

Best regards,

Martin Maechler,
ETH Zurich
#
Dear Martin,

Thank you for the solutions.

I've tried as per your codes and my problem solved :)

Thanks a lot!

Best regards,
Isaudin



On Tue, Aug 23, 2016 at 9:06 AM, Martin Maechler <maechler at stat.math.ethz.ch