Buradaki cevapların hiçbiri, keyfi olarak çok sayıda üretilen değerin reddedilmesini içermeyen kesik normal değişkenler oluşturmak için etkili bir yöntem vermez. Belirtilen alt ve üst sınırlarla kesilmiş bir normal dağılımdan değerler oluşturmak istiyorsanıza < b, bu - reddedilmeden ---, kesme işleminin izin verdiği kantil aralığında tekdüze nicelikler üreterek ve ters dönüşüm örneklemesi kullanarak yapılabilir karşılık gelen normal değerleri elde etmek için .
İzin Vermek Φ"Normal" dağılımın CDF'sini belirtir. Biz üretmek istiyoruzX1, . . . , XN- kesik normal dağılımdan (ortalama parametre ile) μ ve varyans parametresi σ2)† alt ve üst kesme sınırlarıyla a < b. Bu şöyle yapılabilir:
Xben= μ + σ⋅ Φ- 1( Uben)U1, . . . , UN-∼ IID U [ Φ ( a - μσ) ,Φ ( b - μσ) ] .
Kesik dağılımdan üretilen değerler için dahili bir işlev yoktur, ancak rastgele değişkenler oluşturmak için normal işlevleri kullanarak bu yöntemi programlamak önemsizdir. İşte bu yöntemi birkaç kod satırında uygulayan basit bir R
işlev rtruncnorm
.
rtruncnorm <- function(N, mean = 0, sd = 1, a = -Inf, b = Inf) {
if (a > b) stop('Error: Truncation range is empty');
U <- runif(N, pnorm(a, mean, sd), pnorm(b, mean, sd));
qnorm(U, mean, sd); }
Bu üretecek bir vektörlenmiş fonksiyonudur N
kesildi normal dağılımdan Rasgele değişkenlerin. Aynı yöntemle diğer kesik dağılımlar için fonksiyonları programlamak kolay olacaktır. Ayrıca, kesikli dağılım için ilişkili yoğunluk ve kuantil fonksiyonları programlamak çok zor olmayacaktır.
† Kesme işleminin dağılımın ortalamasını ve varyansını değiştirdiğini unutmayın. μ ve σ2Hangi değil ortalama ve kesilmiş dağılımının varyansı.