[R-br] RES: Simulação de variáveis correlacionadas usando Cópulas

Gabriel Bruno de Lemos gblemos em usp.br
Sexta Novembro 23 21:23:11 BRST 2012


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 em copula@dimension
    u <- rCopula(n, mvdc em copula)
    x <- u
    for (i in 1:dim) {
        qdf.expr <- asCall(paste0("q", mvdc em margins[i]),
mvdc em 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:sznelwar em uol.com.br] 
Enviada em: quarta-feira, 21 de novembro de 2012 23:08
Para: gblemos em 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_lemos em hotmail.com

 

(19) 8212-6999

 

 

 

.

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121124/eb43ae45/attachment-0001.html>


Mais detalhes sobre a lista de discussão R-br