Transformação Qui-quadrado para distribuição Normal

8

A relação entre as distribuições normal normal e as qui-quadrado é bem conhecida. Eu estava pensando, existe uma transformação que pode levar de um volta para uma distribuição normal padrão?χ2(1)

Pode-se ver facilmente que a transformação da raiz quadrada não funciona, pois seu intervalo é apenas números positivos. Eu acredito que a distribuição resultante é chamada normal dobrada . Existe um truque inteligente que funciona aqui?

JohnK
fonte

Respostas:

9

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 + ku1uk R u u + 0,5 u [ 0 , 0,5 ] u 1 - u u ( 0,5 , 1 ]uu+kmod1kRuu+0.5u[0,0.5]u1uu(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χ12YN(0,1)χ12

Distribuição ao quadrado do Chi com um grau de liberdade e deciles sombreados Distribuição normal padrão com decil sombreados

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χ12(X))u1uY=Φ1(1Fχ12(X))XY

Mapeamento do chi ao quadrado com 1 df ao normal padrão

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χ12W

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! Wp=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χ12W=1W=1XX .

Mapeando Qui-quadrado para Distribuição Normal

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")
Silverfish
fonte
1
Este é um truque muito inteligente, eu gosto :). Obrigado.
JohnK
5

[ Bem, não consegui localizar a duplicata que achava que havia; o mais próximo que cheguei foi a menção do fato no final desta resposta . (É possível que isso tenha sido discutido apenas nos comentários de alguma pergunta, mas talvez houvesse uma duplicata e eu apenas a perdi.) Vou dar uma resposta aqui, afinal. ]

XFΦ - 1 ( F ( X ) ) X Φ - 1 ( U )ΦΦ1(F(X))XΦ1(U)

O mesmo truque funciona com duas variáveis ​​contínuas.

Isso nos dá um contra-exemplo puro para as várias versões da pergunta "são normais normais Y não Z, bivariadas Z normais?" que surgem, pois se Z é normal padrão e , então são normais e não estão correlacionados, mas são definitivamente dependente (e tenha uma relação bastante bivariada)Z , YY=Φ1(Fχ12(Z2))Z,Y

T(z)=Φ1(Fχ12(z2))

insira a descrição da imagem aqui

Z+Y

insira a descrição da imagem aqui

Glen_b -Reinstate Monica
fonte
ZY
ZZYE(YZ)=0
Bem, precisamos mostrar um pouco mais para garantir que E (YZ) seja finito, por exemplo, mas isso não apresentaria nenhum problema.
Glen_b -Reinstala Monica 27/11
zT(z)