Dieses Problem kann schnell auf das Finden des Quantils einer Trapezverteilung reduziert werden .
Schreiben wir den Prozess neu als
Wobei U 1 und U 2 sind iid U ( - 1 , 1 ) Zufallsvariablen; und durch Symmetrie, dies hat die gleicheRandverteilungwie der Prozess
¯ P ( x ) = U 1 ⋅ | 1
P(x)=U1⋅12sinx+U2⋅12cosx+12(sinx+cosx),
U1U2U( - 1 , 1 )
Die ersten beiden Terme bestimmen eine symmetrische
Trapezdichte,da dies die Summe zweier gleichförmiger Zufallsvariablen mit dem Mittelwert Null ist (mit im Allgemeinen unterschiedlichen Halbwertsbreiten). Der letzte Term führt nur zu einer Verschiebung dieser Dichte, und das Quantil ist in Bezug auf diese Verschiebung äquivariant (dh das Quantil der verschobenen Verteilung ist das verschobene Quantil der zentrierten Verteilung).
P¯¯¯¯(x)=U1⋅∣∣∣12sinx∣∣∣+U2⋅∣∣∣12cosx∣∣∣+12(sinx + cosx ).
Quantile einer Trapezverteilung
Sei wobei X 1 und X 2 unabhängige Verteilungen von U ( - a , a ) und U ( - b , b ) sind . Man nehme ohne Einschränkung der Allgemeinheit an, dass a ≥ b ist . Dann wird die Dichte von Y durch Falten der Dichten von X 1 und X 2 gebildet . Dies ist ohne weiteres ein Trapez mit Eckpunkten ( - aY.= X1+ X2X1X2U( - a , a )U( - b , b )a ≥ bY.X1X2 , ( - a + b , 1 / 2 a ) , ( a - b , 1 / 2 a ) und ( a + b , 0 ) .( - a - b , 0 )( - a + b , 1 / 2 a )( A - b , 1 / 2 a )( a + b , 0 )
Die Quantil der Verteilung von , für jeden p < 1 / 2 ist, also
q ( p ) : = q ( pY.p < 1 / 2
DurchSymmetrie fürp>1/2, haben wirq(p)=-q(1-p).
q( p ) : = q( p; a , b ) = { 8 a b p----√- ( a + b ),( 2 p - 1 ) a,p < b / 2 ab / 2 a ≤ p ≤ 1 / 2.
p > 1 / 2q( p ) = - q( 1 - p )
Zurück zum vorliegenden Fall
| Sündex | ≥ | cosx || Sündex | < | cosx |2 a2 bP¯¯¯¯( x )
p < 1 / 2| Sündex | ≥ | cosx |a = | Sündex | / 2b = | cosx | / 2
qx( p ) = q( p; a , b ) + 12( Sündex + cosx ),
| Sündex | < | cosx |p ≥ 1 / 2
qx( p ) = - q( 1 - p; a , b ) + 12( Sündex + cosx ),
Die Quantile
P( x )x02 πypP( x )
p = 1 / 2p = 0p = 1p = 1 / 4p = 3 / 4
Einige R
Beispielcode
qproc
P( x )xqtrap
# Pointwise quantiles of a random process:
# P(x) = a_1 sin(x) + a_2 cos(x)
# Trapezoidal distribution quantile
# Assumes X = U + V where U~Uni(-a,a), V~Uni(-b,b) and a >= b
qtrap <- function(p, a, b)
{
if( a < b) stop("I need a >= b.")
s <- 2*(p<=1/2) - 1
p <- ifelse(p<= 1/2, p, 1-p)
s * ifelse( p < b/2/a, sqrt(8*a*b*p)-a-b, (2*p-1)*a )
}
# Now, here is the process's quantile function.
qproc <- function(p, x)
{
s <- abs(sin(x))
c <- abs(cos(x))
a <- ifelse(s>c, s, c)
b <- ifelse(s<c, s, c)
qtrap(p,a/2, b/2) + 0.5*(sin(x)+cos(x))
}
Unten ist ein Test mit der entsprechenden Ausgabe.
# Test case
set.seed(17)
n <- 1e4
x <- -pi/8
r <- runif(n) * sin(x) + runif(n) * cos(x)
# Sample quantiles, then actual.
> round(quantile(r,(0:10)/10),3)
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
-0.380 -0.111 -0.002 0.093 0.186 0.275 0.365 0.453 0.550 0.659 0.917
> round(qproc((0:10)/10, x),3)
[1] -0.383 -0.117 -0.007 0.086 0.178 0.271 0.363 0.455 0.548
[10] 0.658 0.924