Salah satu opsi adalah untuk mengeksploitasi fakta bahwa untuk setiap variabel acak kontinu maka seragam (persegi panjang) pada [0, 1]. Kemudian transformasi kedua menggunakan CDF terbalik dapat menghasilkan variabel acak kontinu dengan distribusi yang diinginkan - tidak ada yang istimewa tentang chi kuadrat ke normal di sini. @ Glen_b memiliki lebih detail dalam jawabannya.XFX( X)
Jika Anda ingin melakukan sesuatu yang aneh dan luar biasa, di antara kedua transformasi tersebut Anda bisa menerapkan transformasi ketiga yang memetakan variabel seragam pada [0, 1] ke variabel seragam lainnya pada [0, 1]. Misalnya, , atau untuk setiap , atau bahkan untuk dan for .u ↦ 1 - uu ↦ u + kmod1k ∈ Ru ↦ u + 0,5u ∈ [ 0 , 0,5 ]u ↦ 1 - uu ∈ ( 0,5 , 1 ]
Tetapi jika kita ingin transformasi monoton dari ke maka kita perlu kuantil yang sesuai untuk dipetakan satu sama lain. Grafik berikut dengan desil berbayang menggambarkan titik; perhatikan bahwa saya harus memotong tampilan kerapatan mendekati nol.X∼χ21Y∼ N( 0 , 1 )χ21
Untuk transformasi yang meningkat secara monoton, yang memetakan merah gelap menjadi merah gelap dan seterusnya, Anda akan menggunakan . Untuk transformasi yang menurun secara monoton, yang memetakan merah gelap menjadi biru tua dan seterusnya, Anda dapat menggunakan pemetaan sebelum menerapkan CDF terbalik, jadi . Inilah hubungan antara dan untuk transformasi yang semakin meningkat, yang juga memberikan petunjuk bagaimana mengelompokkan kuantil untuk distribusi chi-kuadrat berada di paling kiri!Y=Φ- 1(Fχ21( X) )u ↦ 1 - uY=Φ- 1( 1 -Fχ21( X) )XY
Jika Anda ingin menyelamatkan akar kuadrat transformasi pada , salah satu pilihan adalah dengan menggunakan Rademacher variabel acak . Distribusi Rademacher adalah diskrit, denganX∼χ21W
P (W= - 1 ) = P ( W= 1 ) =12
Ini pada dasarnya adalah Bernoulli dengan yang telah diubah oleh peregangan dengan faktor skala dua kemudian mengurangi satu. Sekarang adalah standar normal - secara efektif kami memutuskan secara acak apakah akan mengambil root positif atau negatif!p =12WX--√
Ini sedikit curang karena ini benar-benar merupakan transformasi dari bukan saja. Tapi saya pikir itu layak disebutkan karena tampaknya dalam semangat pertanyaan, dan aliran variabel Rademacher cukup mudah untuk dihasilkan. Kebetulan, dan akan menjadi contoh lain dari variabel normal tidak berkorelasi tetapi tergantung. Berikut adalah grafik yang menunjukkan di mana decile dari dokumen asli dipetakan ke; ingat bahwa apa pun di sisi kanan nol adalah di mana dan sisi kiri adalah . Perhatikan bagaimana nilai di sekitar nol dipetakan dari nilai rendah dan ekor (ekstrem kiri dan kanan) dipetakan dari nilai besar( W, X)XZWZχ21W= 1W= - 1XX .
Kode untuk plot ( lihat juga pos Stack Overflow ini ):
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")