Presque toutes les copules bivariées produiront une paire de variables aléatoires normales avec une corrélation non nulle (certaines donneront zéro mais ce sont des cas spéciaux). La plupart (presque tous) d'entre eux produiront une somme non normale.
Dans certaines familles de copules, toute corrélation de Spearman (population) souhaitée peut être produite; la difficulté est seulement de trouver la corrélation de Pearson pour les marges normales; c'est faisable en principe, mais l'algèbre peut être assez compliquée en général. [Cependant, si vous avez la corrélation de la population de Spearman, la corrélation de Pearson - au moins pour les marges à queue claire comme la gaussienne - peut ne pas être trop loin d'elle dans de nombreux cas.]
Tous les exemples, sauf les deux premiers du complot de cardinal, devraient donner des sommes non normales.
Quelques exemples - les deux premiers sont tous deux de la même famille de copules que le cinquième des exemples de distributions bivariées du cardinal, le troisième est dégénéré.
Exemple 1:
Copule de Clayton ( )θ=−0.7
Ici, la somme est très distinctement culminée et assez fortement asymétrique à droite
Exemple 2:
Copule de Clayton ( )θ=2
Ici, la somme est légèrement asymétrique. Juste au cas où ce ne serait pas tout à fait évident pour tout le monde, ici j'ai inversé la distribution (c'est-à-dire que nous avons un histogramme de en violet pâle) et je l'ai superposé pour que nous puissions voir l'asymétrie plus clairement:−(x+y)
Nous pourrions facilement échanger la direction d'asymétrie de la somme de sorte que la corrélation négative soit assortie à l'inclinaison gauche et la corrélation positive avec l'inclinaison droite (par exemple, en prenant et dans chacun des les cas ci-dessus - la corrélation des nouvelles variables serait la même qu'auparavant, mais la distribution de la somme serait inversée autour de 0, inversant l'asymétrie).X∗=−XY∗=−Y
D'un autre côté, si nous nions simplement l'un d'eux, nous changerions l'association entre la force de l'asymétrie et le signe de la corrélation (mais pas la direction de celle-ci).
Cela vaut également la peine de jouer avec quelques copules différentes pour avoir une idée de ce qui peut arriver avec la distribution bivariée et les marges normales.
Les marges gaussiennes avec une t-copule peuvent être expérimentées, sans se soucier beaucoup des détails des copules (générer à partir de t bivarié corrélé, ce qui est facile, puis transformer en marges uniformes via la transformation intégrale de probabilité, puis transformer des marges uniformes en gaussiennes via le cdf normal inverse). Il aura une somme non normale mais symétrique. Donc, même si vous n'avez pas de bons packages de copules, vous pouvez toujours faire certaines choses assez facilement (par exemple, si j'essayais de montrer un exemple rapidement dans Excel, je commencerais probablement par la t-copule).
-
Exemple 3 : (cela ressemble plus à ce que j'aurais dû commencer au départ)
Considérons une copule basée sur un uniforme standard , et laissant pour et pour . Le résultat présente des marges uniformes pour et , mais la distribution bivariée est dégénérée. En transformant les deux marges en , nous obtenons une distribution pour qui ressemble à ceci:UV=U0≤U<12V=32−U12≤U≤1UVX=Φ−1(U),Y=Φ−1(V)X+Y
Dans ce cas, la corrélation entre eux est d'environ 0,66.
Encore une fois, et sont des normales corrélées avec une somme (dans ce cas, distinctement) non normale - car elles ne sont pas normales bivariées.XY
[On pourrait générer une gamme de corrélations en inversant le centre de (dans , pour dans ), pour obtenir . Ceux-ci auraient un pic à 0 puis un écart de chaque côté, avec des queues normales.]( 1Uc[0,1(12−c,12+c)cV[0,12]V
Du code:
library("copula")
par(mfrow=c(2,2))
# Example 1
U <- rCopula(100000, claytonCopula(-.7))
x <- qnorm(U[,1])
y <- qnorm(U[,2])
cor(x,y)
hist(x,n=100)
hist(y,n=100)
xysum <- rowSums(qnorm(U))
hist(xysum,n=100,main="Histogram of x+y")
plot(x,y,cex=.6,
col=rgb(0,100,0,70,maxColorValue=255),
main="Bivariate distribution")
text(-3,-1.2,"cor = -0.68")
text(-2.5,-2.8,expression(paste("Clayton: ",theta," = -0.7")))
Le deuxième exemple:
#--
# Example 2:
U <- rCopula(100000, claytonCopula(2))
x <- qnorm(U[,1])
y <- qnorm(U[,2])
cor(x,y)
hist(x,n=100)
hist(y,n=100)
xysum <- rowSums(qnorm(U))
hist(xysum,n=100,main="Histogram of x+y")
plot(x,y,cex=.6,
col=rgb(0,100,0,70,maxColorValue=255),
main="Bivariate distribution")
text(3,-2.5,"cor = 0.68")
text(2.5,-3.6,expression(paste("Clayton: ",theta," = 2")))
#
par(mfrow=c(1,1))
Code pour le troisième exemple:
#--
# Example 3:
u <- runif(10000)
v <- ifelse(u<.5,u,1.5-u)
x <- qnorm(u)
y <- qnorm(v)
hist(x+y,n=100)