KL แตกต่างกันคือความแตกต่างของอินทิกรัลของแบบฟอร์ม
$$ \ eqalign {I (a, b, c, d) & = \ int_0 ^ {\ infty} \ log \ left (\ frac {erac {e ^ {- x / a} x ^ {b-1}} {a ^ b \ Gamma (b)} \ right) \ frac {e ^ {- x / c} x ^ {d-1}} {c ^ d \ Gamma (d)} dx \
& = - \ frac {1} {a} \ int_0 ^ \ infty \ frac {x ^ de ^ {- x / c}} {c ^ d \ Gamma (d)} \, dx - \ log (a ^ b \ Gamma (b)) \ int_0 ^ \ infty \ frac {e ^ {- x / c} x ^ {d-1}} {c ^ d \ Gamma (d)} \, dx \ & \ quad + (b- 1) \ int_0 ^ \ infty \ log (x) \ frac {e ^ {- x / c} x ^ {d-1}} {c ^ d \ Gamma (d)} \, dx \
& = - \ frac {cd} {a} - \ log (a ^ b \ Gamma (b)) + (b-1) \ int_0 ^ \ infty \ log (x) \ frac {e ^ {- x / c } x ^ {d-1}} {c ^ d \ Gamma (d)} \, dx} $$
เราแค่ต้องจัดการกับอินทิกรัลขวามือซึ่งได้มาจากการสังเกต
∂∂dΓ (d) ====∂∂d∫∞0อี- x / cxd- 1คddx∂∂d∫∞0อี- x / c( x / c )d- 1คdx∫∞0อี- x / cxd- 1คdเข้าสู่ระบบxคdx∫∞0เข้าสู่ระบบ( x ) e- x / cxd- 1คddx -บันทึก( c ) Γ ( d) .
จากไหน
b - 1Γ ( d)∫∞0เข้าสู่ระบบ( x ) e- x / c( x / c )d- 1dx = ( b - 1 ) Γ'( d)Γ ( d)+ ( b - 1 ) บันทึก( ค)
เสียบเข้ากับอัตราผลตอบแทนก่อนหน้า
ผม( a , b , c , d) = - c da- บันทึก(abΓ(b))+(b−1)Γ′(d)Γ(d)+(b−1)log(c).
KL แตกต่างกันระหว่างและΓ ( a , b )เท่ากับI ( c , d , c , d ) - ฉัน( a , b , c , d )ซึ่งตรงไปตรงมาเพื่อประกอบΓ(c,d)Γ(a,b)I(c,d,c,d)−I(a,b,c,d)
รายละเอียดการใช้งาน
ฟังก์ชันแกมมาเติบโตอย่างรวดเร็วดังนั้นเพื่อหลีกเลี่ยงการโอเวอร์โฟลว์อย่าคำนวณ Gamma และใช้ลอการิทึมของมัน: แทนที่จะใช้ฟังก์ชั่น log-Gamma ที่จะพบในแพลตฟอร์มการคำนวณทางสถิติใด ๆ (รวมถึง Excel สำหรับเรื่องนั้น)
อัตราส่วนเป็นอนุพันธ์ของลอการิทึมΓ ,โดยทั่วไปเรียกว่าψ ,Γ′(d)/Γ(d)Γ,ψ, digammaฟังก์ชั่น หากยังไม่ได้มีให้คุณมีวิธีที่ค่อนข้างง่ายที่จะใกล้เคียงกับมันตามที่อธิบายไว้ในบทความวิกิพีเดีย
ที่นี่เพื่อแสดงให้เห็นเป็นโดยตรงR
การดำเนินงานของสูตรในแง่ของฉันสิ่งนี้ไม่ใช้โอกาสในการทำให้ผลลัพธ์เชิงพีชคณิตง่ายขึ้นซึ่งจะทำให้มีประสิทธิภาพมากขึ้นเล็กน้อย (โดยกำจัดการคำนวณซ้ำซ้อนของψ )Iψ
#
# `b` and `d` are Gamma shape parameters and
# `a` and `c` are scale parameters.
# (All, therefore, must be positive.)
#
KL.gamma <- function(a,b,c,d) {
i <- function(a,b,c,d)
- c * d / a - b * log(a) - lgamma(b) + (b-1)*(psigamma(d) + log(c))
i(c,d,c,d) - i(a,b,c,d)
}
print(KL.gamma(1/114186.3, 202, 1/119237.3, 195), digits=12)