Mauro, estranho pq aqui em meu computar esta função está rodando
normalmente. Segue o código desta função e também o output fornecido pela
rotina que passei...

 

> rMvdc
function (n, mvdc) 
{
    dim <- mvdc@copula@dimension
    u <- rCopula(n, mvdc@copula)
    x <- u
    for (i in 1:dim) {
        qdf.expr <- asCall(paste0("q", mvdc@margins[i]),
mvdc@paramMargins[[i]])
        x[, i] <- eval(qdf.expr, list(x = u[, i]))
    }
    x
}

 

 

 

> require(copula)

> 

> myCop.clayton <- archmCopula(family = "clayton", dim = 3, param = 2)

> 

> myMvd <- mvdc(copula = myCop.clayton, margins = c("exp", "norm",

+             "chisq"), paramMargins = list(list(rate= 2), list(mean = 0,

+             sd = 1), list(df=5)))

> 

> 

> myCop.t <- ellipCopula(family = "t", dim = 3, dispstr = "un",

+                        param = c(0.8, 0.5,0.2), df = 8)

> 

> myMvd <- mvdc(copula = myCop.t, margins = c("exp", "norm","chisq"),

+               paramMargins = list(list(rate= 2), list(mean = 0,sd = 1),
list(df=5)))

> 

> x.samp <- rMvdc(10000,myMvd)

> cor(x.samp)

          [,1]      [,2]      [,3]

[1,] 1.0000000 0.7194154 0.4536219

[2,] 0.7194154 1.0000000 0.1652259

[3,] 0.4536219 0.1652259 1.0000000

 

 

 

De: Mauro Sznelwar [mailto:sznel...@uol.com.br] 
Enviada em: quarta-feira, 21 de novembro de 2012 23:08
Para: gble...@usp.br
Assunto: Re: [R-br] Simulação de variáveis correlacionadas usando Cópulas

 

Tentei rodar o seu script e diz que este comando rMvdc não existe!

 

Boa noite a todos! Já tem algum tempo que estou tentando aprender um pouco
mais sobre cópulas... e confesso que não está sendo a coisa mais simples do
mundo.

 

Sinto falta de alguma aplicação (rotina no R) mais simples mostrando uma
utilização aplicada deste tipo de função (principalmente para casos acima de
2 dimensões). Utilizo-a no meu trabalho para precificar portfólios... mas em
um software caixa preta... 

 

Hoje consegui rodar um pequeno exemplo de uma das possíveis utilidades
destas cópulas. Gerar variáveis aleatórias correlacionadas... com as
marginais possuindo QUALQUER função de distribuição de probabilidade (não
ficando restrito ao caso da normal multivariada).

 

Parece que está funcionando legal... se alguém tiver mais alguns exemplos ou
possíveis correções na rotina abaixo será bem vinda!

 

Abs

 

require(copula)

 

## Primeiro define-se a cópula a ser utilizada – “t” neste caso. O comando
dispstr=”un” especifica que desejo informar 3 correlações diferentes na
matriz de correlações.

myCop.t <- ellipCopula(family = "t", dim = 3, dispstr = "un",

                       param = c(0.8, 0.5,0.2), df = 8)

 

## Definida a cópula, especifico quais marginais desejo que minha função
possua. Neste caso defini exponencial, normal e qui-quadrado.

myMvd <- mvdc(copula = myCop.t, margins = c("exp", "norm","chisq"),

              paramMargins = list(list(rate= 2), list(mean = 0,sd = 1),
list(df=5)))

 

x.samp <- rMvdc(10000,myMvd)

cor(x.samp)

 

par(mfrow=c(1,3))

hist(x.samp[,1])

hist(x.samp[,2])

hist(x.samp[,3])

 

 

 

Gabriel Bruno de Lemos

Mestrando em Estatística e Experimentação Agronômica

Esalq / Usp

 

skype: gb_lemos

msn: gb_le...@hotmail.com

 

(19) 8212-6999

 

 

 

.

_______________________________________________
R-br mailing list
R-br@listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código 
mínimo reproduzível.

Responder a