Soumen Banerjee
2018-Apr-21 09:22 UTC
[R] Error : 'start' contains NA values when fitting frank copula
Hello! I am trying to fit a copula to some data in R and I get the error mentioned above. This is the code for a reproducible example - library(copula) data = matrix(data=runif(600),nrow=200,ncol=3) data[,2] = 2*data[,1] data[,3] = 3*data[,1] fr_cop = frankCopula(dim=3) fit_fr_cop = fitCopula(fr_cop,pobs(data),method = "mpl") #Error Here The error says : Error in fitCopula.ml(copula, u = data, method = method, start = start, : 'start' contains NA values What could be going wrong? [[alternative HTML version deleted]]
Martin Maechler
2018-Apr-21 17:46 UTC
[R] Error : 'start' contains NA values when fitting frank copula
>>>>> Soumen Banerjee <soumen08 at gmail.com> >>>>> on Sat, 21 Apr 2018 17:22:56 +0800 writes:> Hello! I am trying to fit a copula to some data in R and > I get the error mentioned above. This is the code for a > reproducible example - (not really reproducible: You did not set the random seed, so the data is different every time; OTOH, yes, the following always gives an error) > library(copula) Slightly clearer showing what you are doing: x <- runif(200) data <- cbind(x, 2*x, 3*x) > fr_cop = frankCopula(dim=3) > fit_fr_cop = fitCopula(fr_cop, pobs(data), method = "mpl") #Error Here > The error says : Error in fitCopula.ml(copula, u = data, method = method, > start = start, : 'start' contains NA values > What could be going wrong? Is this a homework question? [probably not, but ..] The homework question & answer would be Q: What is the best fitting 3D copula if you have perfectly correlated ("rank 1") data? A: The complete-dependence copula ... which is indeed a boundary case, hard to imagine you'd encounter for non-artifical data. Another hint:> fitCopula(normalCopula(,3), pobs(data))Call: fitCopula(copula, data = data) Fit based on "maximum pseudo-likelihood" and 200 3-dimensional observations. Copula: normalCopula rho.1 1 The maximized loglikelihood is 3686 Optimization converged>----------- Yes, one could adapt the fitCopula() code to work better for this extreme boundary case, and for the Frank copula, it would return> fitCopula(frankCopula(,3), pobs(data))Call: fitCopula(copula, data = data) Fit based on "maximum pseudo-likelihood" and 200 3-dimensional observations. Copula: frankCopula alpha 7.21e+16 The maximized loglikelihood is 1.798e+308 Optimization converged but it would need even more tweaking to also give such "alpha ~= +Inf" results for other cases such as Gumbel or Joe. I may add the possibility for frank*() as shown above for the next release of the copula package... but am a bit hesitant to complicate (and slowdown) the current code by adding an extra check for this situation. Martin Maechler ETH Zurich
Soumen Banerjee
2018-Apr-21 23:51 UTC
[R] Error : 'start' contains NA values when fitting frank copula
Hi Martin, Thanks for the reply. I tried to make a toy example so that I could get the same error. I have attached the data file for which the error occurs in my program. The code after loading this file is - fr_cop = frankCopula(dim=6) fit_fr_cop = fitCopula(fr_cop,pobs(data),method="mpl") This is about looking for the degree of monetary independence between a country and large economies. In this data, the "this" country is UK, so that there are two columns which are exactly equal, but there are 4 other columns which aren't. Is this a valid case? Soumen On Sun, Apr 22, 2018 at 1:46 AM, Martin Maechler <maechler at stat.math.ethz.ch> wrote:> >>>>> Soumen Banerjee <soumen08 at gmail.com> > >>>>> on Sat, 21 Apr 2018 17:22:56 +0800 writes: > > > Hello! I am trying to fit a copula to some data in R and > > I get the error mentioned above. This is the code for a > > reproducible example - > > (not really reproducible: You did not set the random seed, so > the data is different every time; > OTOH, yes, the following always gives an error) > > > library(copula) > > Slightly clearer showing what you are doing: > > x <- runif(200) > data <- cbind(x, 2*x, 3*x) > > > fr_cop = frankCopula(dim=3) > > fit_fr_cop = fitCopula(fr_cop, pobs(data), method = "mpl") #Error > Here > > > The error says : Error in fitCopula.ml(copula, u = data, method > method, > > start = start, : 'start' contains NA values > > > What could be going wrong? > > Is this a homework question? [probably not, but ..] > > The homework question & answer would be > > Q: What is the best fitting 3D copula if you have perfectly > correlated ("rank 1") data? > > A: The complete-dependence copula ... which is indeed a boundary case, > hard to imagine you'd encounter for non-artifical data. > > Another hint: > > > fitCopula(normalCopula(,3), pobs(data)) > Call: fitCopula(copula, data = data) > Fit based on "maximum pseudo-likelihood" and 200 3-dimensional > observations. > Copula: normalCopula > rho.1 > 1 > The maximized loglikelihood is 3686 > Optimization converged > > > ----------- > > Yes, one could adapt the fitCopula() code to work better for > this extreme boundary case, > and for the Frank copula, it would return > > > fitCopula(frankCopula(,3), pobs(data)) > Call: fitCopula(copula, data = data) > Fit based on "maximum pseudo-likelihood" and 200 3-dimensional > observations. > Copula: frankCopula > alpha > 7.21e+16 > The maximized loglikelihood is 1.798e+308 > Optimization converged > > > but it would need even more tweaking to also give such > "alpha ~= +Inf" > results for other cases such as Gumbel or Joe. > > I may add the possibility for frank*() as shown above for the > next release of the copula package... > but am a bit hesitant to complicate (and slowdown) the current > code by adding an extra check for this situation. > > Martin Maechler > ETH Zurich >