Bu sorun hızlı bir şekilde yamuk dağılımının kuantilini bulan birime indirgenebilir .
Süreci P ( x ) = U 1 ⋅ 1 olarak yeniden
yazalım
Burada U 1 ve u 2 iid U ( - 1 , 1 ) ; rastgele değişkenler simetriyle, aynı sahipmarjinalbir süreç olarak dağıtım
¯ p ( x ) = u 1 ⋅ | 1
P(x)=U1⋅12sinx+U2⋅12cosx+12(sinx+cosx),
U1U2U(−1,1)
İlk iki terim simetrik bir
yamuk yoğunluğunubelirler,çünkü bu iki ortalama sıfır tekdüze rasgele değişkenin (genel olarak farklı yarım genişliklerle) toplamıdır. Son terim sadece bu yoğunluğun bir çevirisine yol açar ve kantil bu çeviriye göre eşdeğerdir (yani, kaydırılan dağılımın kantili ortalanmış dağılımın kaydırılmış kantilidir).
P¯¯¯¯(x)=U1⋅∣∣∣12sinx∣∣∣+U2⋅∣∣∣12cosx∣∣∣+12(sinx+cosx).
Trapezoidal dağılımın kantilleri
Let x 1 ve X, 2 bağımsız U ( - bir , bir ) ve U ( - b , b ) dağılımlar. O genelliği kaybetmeden varsayalım bir ≥ b . Daha sonra, yoğunluğu Y yoğunluklarını evriştirerek oluşturulur X 1 ve X 2 . Bu, köşeleri olan bir yamuk olarak kolayca görülür ( - aY=X1+X2X1X2U(−a,a)U(−b,b)a≥bYX1X2 , ( - bir + b , 1 / 2 a ) , ( a - b , 1 / 2 a ) ve ( a + b , 0 ) .(−a−b,0)(−a+b,1/2a)(a−b,1/2a)(a+b,0)
Dağılım miktarsal herhangi biri için, p < 1 / 2 , bu şekilde, bir
q ( p ) : = q ( sYp<1/2
Simetri tarafından içinp>1/2, elimizdekiq(p)=-q(1-p).
q(p):=q(p;a,b)={8abp−−−−√−(a+b),(2p−1)a,p<b/2ab/2a≤p≤1/2.
p>1/2q(p)=−q(1−p)
Eldeki davaya geri dön
Yukarıdakiler zaten kapalı formlu bir ifade vermek için yeterlidir. Tek ihtiyacımız olan iki davaya girmek ve | günah x | < | cos x | rolünü oynar belirlemek için 2 a ait bir rol oynar ve 2 b , yukarıda. (Buradaki 2 faktörü, ¯ P ( x ) tanımındaki ikiye bölünmeleri telafi etmektir .)|sinx|≥|cosx||sinx|<|cosx|2a2bP¯¯¯¯(x)
p<1/2|sinx|≥|cosx|a=|sinx|/2b=|cosx|/2
qx(p)=q(p;a,b)+12(sinx+cosx),
|sinx|<|cosx|p≥1/2
qx(p)=−q(1−p;a,b)+12(sinx+cosx),
Quantiles
P(x)x02πypP(x)
p=1/2p=0p=1p=1/4p=3/4
Bazı örnek R
kodlar
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))
}
Aşağıda ilgili çıktıya sahip bir test bulunmaktadır.
# 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