Eine Möglichkeit ist , die Tatsache auszunutzen , daß für jede kontinuierliche Zufallsvariable X dann FX(X) ist gleichförmig (rechteckig) auf [0, 1]. Dann kann eine zweite Transformation unter Verwendung einer inversen CDF eine kontinuierliche Zufallsvariable mit der gewünschten Verteilung erzeugen - nichts Besonderes an Chi, das hier normal ist. @Glen_b hat mehr Details in seiner Antwort.
Wenn Sie etwas Seltsames und Wundervolles tun möchten, können Sie zwischen diesen beiden Transformationen eine dritte Transformation anwenden, die einheitliche Variablen auf [0, 1] auf andere einheitliche Variablen auf [0, 1] abbildet. Zum Beispiel oder für jedes oder sogar für und für .u↦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]
Wenn wir jedoch eine monotone Transformation von nach wünschen, müssen die entsprechenden Quantile aufeinander abgebildet werden. Die folgenden Grafiken mit schattierten Dezilen veranschaulichen den Punkt. Beachten Sie, dass ich die Anzeige der Dichte nahe Null . Y ~ N ( 0 , 1 ) & khgr; 2 1X∼χ21Y∼N(0,1)χ21
Für die monoton zunehmende Transformation, die Dunkelrot auf Dunkelrot usw. abbildet, würden Sie . Für die monoton abnehmende Transformation, die Dunkelrot auf Dunkelblau usw. abbildet, können Sie das Mapping bevor Sie die inverse CDF anwenden, also . So sieht die Beziehung zwischen und für die zunehmende Transformation aus, die auch einen Hinweis darauf gibt, wie gebündelt die Quantile für die Chi-Quadrat-Verteilung ganz links waren!u ↦ 1 - u Y = Φ - 1 ( 1 - F χ 2 1 ( X ) ) X Y.Y=Φ−1(Fχ21(X))u↦1−uY=Φ−1(1−Fχ21(X))XY
Wenn Sie die Quadratwurzeltransformation auf , können Sie eine Rademacher-Zufallsvariable . Die Rademacher-Verteilung ist diskret mit W P ( W = - 1 ) = P ( W = 1 ) = 1X∼χ21W
P(W=−1)=P(W=1)=12
Es ist im Wesentlichen ein Bernoulli mit , das durch Strecken um einen Skalierungsfaktor von zwei und anschließendes Subtrahieren von eins transformiert wurde. Jetzt ist Standard normal - effektiv entscheiden wir zufällig, ob wir die positive oder negative Wurzel ziehen wollen! W√p=12WX−−√
Es betrügt ein wenig, da es wirklich eine Transformation von nicht allein. Aber ich fand es erwähnenswert, da es im Geiste der Frage zu sein scheint und ein Strom von Rademacher-Variablen leicht zu generieren ist. Übrigens wären und ein weiteres Beispiel für unkorrelierte, aber abhängige Normalvariablen. Hier ist eine Grafik, die zeigt, wo die Dezile des ursprünglichen abgebildet werden. Denken Sie daran, dass auf der rechten Seite von Null und auf der linken Seite . Beachten Sie, wie Werte um Null aus niedrigen Werten von und die Schwänze (sowohl das linke als auch das rechte Extrem) aus den großen Werten von werdenX Z W Z χ 2 1 W = 1 W = - 1 X X.(W,X)XZWZχ21W=1W=−1XX .
Code für Diagramme ( siehe auch diesen Beitrag zum Stapelüberlauf ):
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")