Uma opção é explorar o fato de que, para qualquer variável aleatória contínua , é uniforme (retangular) em [0, 1]. Então, uma segunda transformação usando um CDF inverso pode produzir uma variável aleatória contínua com a distribuição desejada - nada de especial no qui ao quadrado aqui. @Glen_b tem mais detalhes em sua resposta.F X ( X )XFX( X)
Se você quiser fazer algo estranho e maravilhoso, entre essas duas transformações, você poderá aplicar uma terceira transformação que mapeia variáveis uniformes em [0, 1] para outras variáveis uniformes em [0, 1]. Por exemplo, , ou para qualquer , ou mesmo para e para .u ↦ u + ku ↦ 1 - uk ∈ R u ↦ u + 0,5 u ∈ [ 0 , 0,5 ] u ↦ 1 - u u ∈ ( 0,5 , 1 ]u ↦ u + kmod1k ∈ Ru ↦ u + 0,5u ∈ [ 0 , 0,5 ]u ↦ 1 - uu ∈ ( 0,5 , 1 ]
Mas se queremos uma transformação monótona de para , precisamos que os quantis correspondentes sejam mapeados um para o outro. Os gráficos a seguir com decis sombreados ilustram o ponto; note que tive que interromper a exibição da densidade perto de zero. Y ∼ N ( 0 , 1 ) χ 2 1X∼ χ21Y∼ N( 0 , 1 )χ21
Para a transformação monotonicamente crescente, que mapeia vermelho escuro para vermelho escuro e assim por diante, você usaria . Para a transformação monotonicamente decrescente, que mapeia vermelho escuro para azul escuro e assim por diante, você pode usar o mapeamento antes de aplicar o CDF inverso, então . Aqui está como é a relação entre e para a crescente transformação, o que também dá uma pista de como os quantis agrupados para a distribuição qui-quadrado estavam na extrema esquerda!u ↦ 1 - u Y = Φ - 1 ( 1 - F χ 2 1 ( X ) ) X YY= Φ- 1( Fχ21(X) ))u ↦ 1 - uY= Φ- 1( 1 - Fχ21(X) ))XY
Se você deseja recuperar a transformação de raiz quadrada em , uma opção é usar uma variável aleatória Rademacher . A distribuição do Rademacher é discreta, com W P ( W = - 1 ) = P ( W = 1 ) = 1X∼ χ21W
P ( W= - 1 ) = P ( W= 1 ) = 12
É essencialmente um Bernoulli com que foi transformado esticando por um fator de escala de dois e subtraindo um. Agora é o padrão normal - efetivamente, estamos decidindo aleatoriamente se devemos buscar a raiz positiva ou negativa! W√p = 12WX--√
Está enganando um pouco, já que é realmente uma transformação de não de sozinho. Mas achei que vale a pena mencionar, uma vez que parece no espírito da pergunta, e um fluxo de variáveis Rademacher é fácil de gerar. Aliás, e seriam outro exemplo de variáveis normais não correlacionadas, mas dependentes. Aqui está um gráfico mostrando para onde os deciles do original são mapeados; lembre-se de que qualquer coisa no lado direito de zero é onde e o lado esquerdo é . Observe como os valores em torno de zero são mapeados a partir dos baixos valores de e as caudas (extremos esquerdo e direito) são mapeadas a partir dos grandes valores deX Z W Z χ 2 1 W = 1 W = - 1 X X( W, X)XZWZχ21W= 1W= - 1XX .
Código para plotagens ( veja também este post Stack Overflow ):
require(ggplot2)
delta <- 0.0001 #smaller for smoother curves but longer plot times
quantiles <- 10 #10 for deciles, 4 for quartiles, do play and have fun!
chisq.df <- data.frame(x = seq(from=0.01, to=5, by=delta)) #avoid near 0 due to spike in pdf
chisq.df$pdf <- dchisq(chisq.df$x, df=1)
chisq.df$qt <- cut(pchisq(chisq.df$x, df=1), breaks=quantiles, labels=F)
ggplot(chisq.df, aes(x=x, y=pdf)) +
geom_area(aes(group=qt, fill=qt), color="black", size = 0.5) +
scale_fill_gradient2(midpoint=median(unique(chisq.df$qt)), guide="none") +
theme_bw() + xlab("x")
z.df <- data.frame(x = seq(from=-3, to=3, by=delta))
z.df$pdf <- dnorm(z.df$x)
z.df$qt <- cut(pnorm(z.df$x),breaks=quantiles,labels=F)
ggplot(z.df, aes(x=x,y=pdf)) +
geom_area(aes(group=qt, fill=qt), color="black", size = 0.5) +
scale_fill_gradient2(midpoint=median(unique(z.df$qt)), guide="none") +
theme_bw() + xlab("y")
#y as function of x
data.df <- data.frame(x=c(seq(from=0, to=6, by=delta)))
data.df$y <- qnorm(pchisq(data.df$x, df=1))
ggplot(data.df, aes(x,y)) + theme_bw() + geom_line()
#because a chi-squared quartile maps to both left and right areas, take care with plotting order
z.df$qt2 <- cut(pchisq(z.df$x^2, df=1), breaks=quantiles, labels=F)
z.df$w <- as.factor(ifelse(z.df$x >= 0, 1, -1))
ggplot(z.df, aes(x=x,y=pdf)) +
geom_area(data=z.df[z.df$x > 0 | z.df$qt2 == 1,], aes(group=qt2, fill=qt2), color="black", size = 0.5) +
geom_area(data=z.df[z.df$x <0 & z.df$qt2 > 1,], aes(group=qt2, fill=qt2), color="black", size = 0.5) +
scale_fill_gradient2(midpoint=median(unique(z.df$qt)), guide="none") +
theme_bw() + xlab("y")