Sıfır içeren giriş verilerine bir Weibull dağılımı nasıl eklenir?


14

Emekli bir araştırmacı tarafından teslim edilen mevcut bir tahmin algoritmasını yeniden oluşturmaya çalışıyorum. İlk adım, gelecekteki değerleri tahmin etmek için kullanılacak bir şekil ve ölçek elde etmek için gözlemlenen bazı verileri bir Weibull dağılımına sığdırmaktır. Bunu yapmak için R kullanıyorum. İşte benim kod bir örnek:

x<-c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,51,77,78,144,34,29,45,16,15,37,218,170,44,121)
f<-fitdistr(x, 'weibull')

Giriş dizisinde sıfır yoksa, bu durumun tamamen başarısız olmasına neden olursa, bu iyi çalışır. Aynı şey SAS'ta da olur. Anladığım kadarıyla, bunun nedeni, Weibull dağılımını hesaplama adımlarından birinin, 0 için tanımlanmamış doğal günlüğü almasıdır. Bu soruna geçici bir çözüm bulmak için makul bir yol var mı?

Şimdiye kadar bulduğum en iyi şey, tüm giriş değerlerime 1 eklemek, eğriye uymak ve sonra tahmin edilen değerlerden birini çıkarmak (eğriyi "kaydır" ve sonra 1 aşağı). Bu, önceden tahmin edilen verilere oldukça iyi uyuyor, ancak bunu yapmanın yanlış bir yolu gibi görünüyor.

edit: giriş dizisindeki değerler gözlemlenir, bir dizi yıl için gerçek dünya verileri (bir şeylerin sayısı). Yani bazı yıllarda olay sayısı sıfırdı. En iyi yol olsun ya da olmasın (olmayabileceğini kabul ediyorum), orijinal algoritma yazarı Weibull dağıtımını kullandığını iddia ediyor ve süreçlerini çoğaltmaya çalışmalıyım.


5
Weibull sürekli bir dağılımdır, böylece tam olarak sıfır elde etme olasılığı sıfır olasılığına sahiptir. Verilerinizde çok sayıda sıfır varsa, bu Weibull'un uygunsuz olduğu konusunda hemen bir ipucu. Her halükarda, verileriniz sayım verisine (veya en azından ayrıktır) benzemektedir ve bu nedenle bir Weibull muhtemelen en iyi seçim değildir.
kardinal

Verilerin nereden geldiğine dair bir bağlam eklemek, muazzam bir şekilde cevap vermeye çalışan herkese yardımcı olacaktır.
kardinal

Yanıtlar:


8

(Diğerlerinin de işaret ettiği gibi, bir Weibull dağılımının veriler yalnızca tamsayılar olduğunda uygun bir tahmin olması muhtemel değildir. Aşağıdakiler sadece önceki araştırmacının doğru ya da yanlış ne yaptığını belirlemenize yardımcı olmak için tasarlanmıştır.)

Verilerdeki sıfırlardan etkilenmeyen, çeşitli moment tahmin yöntemlerinin kullanılması gibi çeşitli alternatif yöntemler vardır. Bunlar tipik olarak gama fonksiyonunu içeren denklemlerin sayısal çözümünü gerektirir, çünkü Weibull dağılımının momentleri bu fonksiyon açısından verilmiştir. R'ye aşina değilim, ama burada daha basit yöntemlerden birini gösteren bir Adaçayı programı - belki R'ye uyarlanabilir? (Bu ve bunun gibi diğer yöntemler hakkında Horst Rinne tarafından yazılan "Weibull dağılımı: bir el kitabı" , s. 455ff'yi okuyabilirsiniz - ancak, eq.12.4b'de '-1' gibi bir yazım hatası vardır gereksizdir).

"""
Blischke-Scheuer method-of-moments estimation of (a,b)
for the Weibull distribution F(t) = 1 - exp(-(t/a)^b)
""" 

x = [23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,16,15,37,218,170,44,121]
xbar = mean(x)
varx = variance(x)
var("b"); f(b) = gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2
bhat = find_root(f, 0.01, 100)
ahat = xbar/gamma(1+1/bhat)
print "Estimates: (ahat, bhat) = ", (ahat, bhat)

Bu çıktı üretti

Estimates: (ahat, bhat) =  (81.316784310814455, 1.3811394719075942)


Yukarıdaki veriler en küçük üç değeri ile değiştirerek (yalnızca gösterim amacıyla) değiştirilirse , yani0

x = [23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,0,0,37,218,170,44,121]

aynı prosedür çıktı üretir

Estimates: (ahat, bhat) =  (78.479354097488923, 1.2938352346035282)


EDIT: Ben sadece denemek için R yükledim. Bu cevabı uzun süre verme riski altında, ilgilenen herkes için Blischke-Scheuer yöntemi için R kodum:

fit_weibull <- function(x)
{
    xbar <- mean(x)
    varx <- var(x)
    f <- function(b){return(gamma(1+2/b)/gamma(1+1/b)^2 - 1 - varx/xbar^2)}
    bhat <- uniroot(f,c(0.02,50))$root
    ahat <- xbar/gamma(1+1/bhat)
    return(c(ahat,bhat))
}

Bu, yukarıdaki iki Sage örneğini (beş önemli basamağa) çoğaltır:

x <- c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,
     51,77,78,144,34,29,45,16,15,37,218,170,44,121)
fit_weibull(x)
[1] 81.316840  1.381145

x <- c(23,0,37,38,40,36,172,48,113,90,54,104,90,54,157,
      51,77,78,144,34,29,45,0,0,37,218,170,44,121)
fit_weibull(x)
[1] 78.479180  1.293821

4

Üçüncü parametrenin bir konum parametresi olduğu üç parametreli bir Weibull takmayı da deneyebilirsiniz, diyelim . Bu, Weibull'a en iyi uyumu sağlamak için verilere eklemeniz gereken sabiti tahmin etmek anlamına gelir. Etrafına bir "sarmalayıcı" koyarak , sarmalayıcı ve veri değerini alır , verilere ekler , işlevi çağırır ve ilişkili mantıksallığı döndürür bir profil olabilirlik yaklaşımı kullanarak bunu yapabilirsiniz :θ θθfitdistrθθfitdistr

foo <- function(theta, x)
{
  if (theta <= -min(x)) return(Inf);
  f <- fitdistr(x+theta, 'weibull')
  -2*f$loglik
}

Ardından, tek boyutlu optimizasyon kullanarak bu işlevi en aza indirin:

bar <- optimize(foo, lower=-min(x)+0.001, upper=-min(x)+10, x=x)

"+10" u hiç bir şeye dayanmadan oluşturdum.

Sıfır ile değiştirilen en küçük üç değere sahip veriler için şunu elde ederiz:

> bar
$minimum
[1] 2.878442

$objective
[1] 306.2792

> fitdistr(x+bar$minimum, 'weibull')
     shape        scale   
   1.2836432   81.1678283 
 ( 0.1918654) (12.3101211)
> 

bar$minimummaksimum olabilirlik tahmininin ise ve çıkışlar ortaklaşa sahip Weibull parametrelerinin Mles olan olduğunu. Gördüğünüz gibi, yukarıda gösterilen momentler tahmincisi @resine oldukça yakınlar.θθfitdistrθ


2

Başarısız olmalı, başarısız olduğuna minnettar olmalısınız.

Gözlemleriniz başarısızlıkları gözlemlemeye başladığınız anda meydana geldiğini gösterdi. Bu gerçek bir süreçse, gerçek verilerden (ve simüle edilmemiş verilerden) geliyorsa, sıfırları almanızın nedenini bir şekilde hesaba katmanız gerekir. Birkaç şeyden birinin sonucu olarak 0 kez ortaya çıkan hayatta kalma çalışmaları gördüm:

  1. Veriler aslında kesiliyor: nesneler risk altındaydı ve çalışma başlamadan önce başarısız oldu ve bunları baştan beri gözlemlediğinizi iddia etmek istiyorsunuz.
  2. Aletler iyi kalibre edilmemiştir: çalışma için yeterli ölçüm hassasiyetine sahip değilsiniz ve bu nedenle başlangıç ​​zamanı yakınında meydana gelen arızalar tam olarak sıfır olarak kodlanmıştır.
  3. Sıfır olarak kodlanan şey sıfır değildir. Bunlar bir şekilde analizden hariç tutulan insanlar veya nesnelerdir. Sıfır, verilerde eksik değerlerin birleştirilmesi, sıralanması veya başka bir şekilde yeniden kodlanmasının bir sonucu olarak görünür.

Dolayısıyla durum 1 için: geriye dönük olarak kayıt çekmek anlamına gelse bile, uygun sansür yöntemleri kullanmanız gerekir. Durum 2, hassas bir sorununuz olduğu için EM algoritmasını kullanabileceğiniz anlamına gelir. Bayes yöntemleri de burada benzer şekilde çalışır. Durum 3, eksik olması gereken değerleri hariç tutmanız gerektiği anlamına gelir.


OP, veriler gerçek dünya sayımları olmasına rağmen, önceki bir araştırmacının Weibull dağılımına uymayı seçtiğini açıkladı - bir şeyin oluşum sayısının negatif olmayan tamsayı sayımı. Üç vakanızın böyle bir durumla nasıl bir ilişkisi olduğu belli değil.
res

Oh, iyi not! Weibull dağıtımına uymak son derece yanlıştır. Sürekli desteğe sahiptir ve sayımları modellemek için değil, hayatta kalma sürelerini modellemek için kullanılmaz. Negatif binom dağılımları, modelleme sayıları için, elbette veri oluşturma sürecinin doğasına bağlı olan (sorunun belirtildiği gibi 0 bilgisine sahip olduğumuz) bir tür eşdeğer iki parametre dağılımı olacaktır. Bunu bana gösterdiğin için teşekkürler.
AdamO

1

Yukarıdaki kardinalin cevabına katılıyorum. Bununla birlikte, sıfırlardan kaçınmak için bir sabit eklemek de oldukça yaygındır. Yaygın olarak kullanılan bir başka değer 0.5'tir, ancak herhangi bir pozitif sabit kullanılmış olabilir. Önceki araştırmacı tarafından kullanılan kesin değeri belirleyip belirleyemediğinizi görmek için bir dizi değer deneyebilirsiniz. O zaman, daha iyi bir dağıtım arayışına girmeden önce sonuçlarını yeniden oluşturabileceğinizden emin olabilirsiniz.


0

Johnson Kotz ve Balakrishnan'ın kitabında Weibull parametrelerini tahmin etmenin birçok yolu var. Bunlardan bazıları sıfır içermeyen verilere bağlı değildir (örneğin, ortalama ve standart sapmayı kullanma veya belirli yüzdelikleri kullanma).

Johnson, NL, Kotz, S. ve Balakrishnan, N. (1994). Sürekli Tek Değişkenli Dağılımlar. New York: Wiley, kabaca sayfa 632'de.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.