R Copula包装。用不同的copula系列定义MVDC时出现错误

时间:2019-12-12 09:20:56

标签: r

我在R中使用copula软件包。

我已经将几个copula拟合到一个双变量数据集,并希望将最好的copula组合在一起-事实证明是Plackett copula,具有估计的边际分布(称为Marg1和Marg2;它们似乎并不重要此处)在mvdc对象中。但是,当我尝试执行此操作时会收到一条错误消息(在示例中,为简单起见,我已替换了使用plackettCopula将copula拟合到数据而获得的fitCopula对象。显然,我想使用我适合的数据):

> mvdc(copula = plackettCopula(0.5), margins = c(Marg1$distname, Marg2$distname), paramMargins = list(as.list(Marg1$estimate), as.list(Marg2$estimate)), check = T)

    Multivariate Distribution Copula based ("mvdc")
     @ copula:
    Error: $ operator not defined for this S4 class

当我对普通鸡眼做同样的操作时,没有得到这样的错误消息:

> mvdc(copula = normalCopula(0.5), margins = c(Marg1$distname, Marg2$distname), paramMargins = list(as.list(Marg1$estimate), as.list(Marg2$estimate)), check = T)

    Multivariate Distribution Copula based ("mvdc")
     @ copula:
    Normal copula, dim. d = 2 
    Dimension:  2 
    Parameters:
      rho.1   = 0.5
     @ margins:
    [1] "gev"    "glogis"
       with 2 (not identical)  margins; with parameters (@ paramMargins) 
    List of 2
     $ :List of 3
      ..$ shape: num -0.2502235
      ..$ scale: num 0.1824798
      ..$ loc  : num 0.9315861
     $ :List of 3
      ..$ location: num 0.9918519
      ..$ scale   : num 0.05639447
      ..$ shape   : num 1.10499

任何人都可以告诉我此错误消息的含义,并且有办法解决此错误吗?看来我对许多其他copulas也得到了相同的错误消息,例如口香糖,克莱顿,弗兰克,乔,安赫等...

此外,即使出现此错误消息,mvdc对象似乎也可以,而且我似乎能够从拟合的mvdc对象进行模拟,如果我制作了三个mvdc基于具有不同参数的Plackett-copula的对象,我得到的结果非常不同。尽管出现错误消息,这是否表示该对象实际上运行良好?我根据具有不同plackett-copula参数值的mvdc对象获得了以下图表:

> mvdc1 = mvdc(copula = plackettCopula(1), margins = c(Marg1$distname, Marg2$distname), paramMargins = list(as.list(Marg1$estimate), as.list(Marg2$estimate)), check = T)
> mvdc2 = mvdc(copula = plackettCopula(10), margins = c(Marg1$distname, Marg2$distname), paramMargins = list(as.list(Marg1$estimate), as.list(Marg2$estimate)), check = T)
> mvdc3 = mvdc(copula = plackettCopula(60), margins = c(Marg1$distname, Marg2$distname), paramMargins = list(as.list(Marg1$estimate), as.list(Marg2$estimate)), check = T)
> par(mfrow=c(1,3))
> plot(rMvdc(1000, mvdc1))
> plot(rMvdc(1000, mvdc2))
> plot(rMvdc(1000, mvdc3))

enter image description here

对于如何解决或解决此问题的任何帮助,我们深表感谢。

0 个答案:

没有答案