Podemos desenvolver famílias paramétricas ricas a partir da solução trivial com cópula , o caso de correlação perfeita (positiva) e sua contrapartida para uma correlação negativa perfeita. Concentrar a probabilidade ao longo do segmento de linha que liga a com fornece a cópulaF(x,y)=min(x,y)(0,α)(1,β)β>α
F(x,y;α,β)=⎧⎩⎨⎪⎪xy,βx,αx+y−α0≤y<α or β<y≤1x(β−α)≤y−αotherwise.
Uma cópula semelhante surge quando , que também designarei .β<αF(x,y;α,β)
Pense nisto como misturas: quando , existem componentes uniformes nos retângulos horizontais , , e no retângulo central existe uma correlação perfeita (cuja distribuição é a de para uma variável uniformemente distribuída ) Essa concepção de facilita o cálculo da regressão: é uma soma ponderada das três médias condicionais,β>α[0,1]×[0,α][0,1]×[β,1][0,1]×[α,β](U,α+(β−α)U)UF
E(Y∣X)=α(α2)+(β−α)(α+(β−α)X)+(1−β)(1+β2).
Evidentemente, isso é linear em : a interceptação é igual a e a inclinação é vezes o sinal de . Além disso, foi construído para ter marginais uniformes.X(1+(β−α)2)/2(β−α)2β−α
Para criar uma família paramétrica, escolha qualquer distribuição paramétrica para com o parâmetro . Seja a função de distribuição. Descreve uma mistura de via integração:(α,β)θG(α,β;θ)F(;α,β)
F~(x,y;θ)=∬F(x,y;α,β)dG(α,β;θ)
é a função de distribuição (cópula). Como cada possui marginais uniformes, o mesmo acontece com . Além disso, sua regressão é linear porqueF(;α,β)F~(;θ)
EF~(;θ)(Y∣X)=∬EF(;α,β)(Y∣X)dG(α,β;θ)=∬((1+(β−α)2)/2+sgn(β−α)(β−α)2X)dG(α,β;θ)=∬(1+(β−α)2)/2dG(α,β;θ)+∬sgn(β−α)(β−α)2dG(α,β;θ)X=EG(;θ)((1+(β−α)2)/2)+EG(;θ)(sgn(β−α)(β−α)2)X.
Isso mostra como o intercepto e a inclinação são as expectativas da interceptação e da inclinação (em relação a ), fornecendo informações úteis para selecionar as famílias apropriadas .GG(;θ)
Esses gráficos documentam uma simulação de uma dessas famílias. Aqui, foi extraído de uma distribuição Beta e foi extraído independentemente de uma distribuição Beta . A primeira coluna mostra histogramas das realizações desses parâmetros. A segunda coluna mostra histogramas das distribuições marginais de e : elas são satisfatoriamente próximas de uniformes. A coluna mais à direita mostra um subconjunto aleatório dos 100.000 valores simulados, juntamente com uma estimativa de sua regressão (linha vermelha) e uma aproximação à regressão teórica (linha pontilhada preta): eles concordam estreitamente. A regressão estimada foi obtida calculando-se as médias deα(5,1)β(3,10)XYXe dentro das janelas do , depois suavizando o traço com Loess.YX
(A linha de regressão "teórica" é apenas uma aproximação obtida substituindo e nas fórmulas de expectativa por suas expectativas. As fórmulas exatas são fáceis de resolver nesse caso, mas são longas e complicadas de codificar.)αβ
O R
código que produziu essa figura pode ser facilmente usado para estudar outras famílias .G(;θ)
#
# Draw `n` variates from the mixture copula.
# `alpha` and `beta` are intended to be realizations of G(;theta).
#
runif.xy <- function(n, alpha=0, beta=1) {
a <- pmin(alpha, beta)
b <- pmax(alpha, beta)
xy <- matrix(runif(2*n), nrow=2) # Start with a uniform distribution
i <- xy[2,] > a & xy[2,] < b # Select the middle rectangle
xy[2, i] <- (xy[1,]*(beta - alpha) + alpha)[i]# Create perfect correlation
return(xy)
}
#
# Specify the parameters ("theta").
#
a.alpha <- 5
b.alpha <- 1
a.beta <- 3
b.beta <- 10
#
# Draw the slope `beta` and intercept `alpha` from G(;theta).
#
n.sim <- 1e5
alpha <- rbeta(n.sim, a.alpha, b.alpha)
beta <- rbeta(n.sim, a.beta, b.beta)
#
# Draw (X,Y) from the mixture.
#
sim <- runif.xy(n.sim, alpha, beta)
#
# Plot histograms of alpha, beta, X, Y.
#
par(mfcol=c(2,3))
hist(alpha); abline(v=a.alpha/(a.alpha+b.alpha), col="Red", lwd=2)
hist(beta); abline(v=a.beta/(a.beta+b.beta), col="Red", lwd=2)
hist(sim[1,], main="X Marginal", xlab="X")
hist(sim[2,], main="Y Marginal", xlab="Y")
#
# Plot the simulation and its regression curve.
#
i <- sample.int(n.sim, min(5e3, n.sim)) # Limit how many points are shown
plot(t(sim[, i]), asp=1, pch=19, col="#00000002", main="Simulation",
xlab="X", ylab="Y")
library(zoo)
i <- order(sim[1,])
x <- as.vector(rollapply(ts(sim[1, i]), ceiling(n.sim/100), mean))
y <- as.vector(rollapply(ts(sim[2, i]), ceiling(n.sim/100), mean))
lines(lowess(y ~ x), col="Red", lwd=2)
#
# Overplot the theoretical regression curve.
#
a <- a.alpha / (a.alpha + b.alpha) # Expectation of `alpha`
b <- a.beta / (a.beta + b.beta) # Expectation of `beta`
intercept <- (1 + (b-a)^2)/2
slope <- (b - a)^2 * sign(b-a)
abline(c(intercept, slope), lty=3, lwd=3)