İstatistiksel yazılımı test etme


10

İstatistiksel yazılımın testinde hangi teknikler / yaklaşımlar yararlıdır? Özellikle maksimum olasılık kullanarak parametrik tahmin yapan programlarla ilgileniyorum.

Başka programlardan veya yayınlanmış kaynaklardan elde edilen sonuçları karşılaştırmak her zaman mümkün değildir, çünkü çoğu zaman kendi başıma bir program yazarken ihtiyacım olan hesaplama zaten mevcut bir sistemde uygulanmamıştır.

Doğruluğu garanti edebilecek yöntemlerde ısrar etmiyorum. Hataların bir kısmını yakalayabilen tekniklerden memnun olurum.

Yanıtlar:


8

Yararlı bir teknik monte carlo testidir. Aynı şeyi yapan iki algoritma varsa, her ikisini de uygulayın, rastgele verileri besleyin ve (sayısal bulanıklığa küçük bir tolerans dahilinde) aynı cevabı ürettiklerini kontrol edin. Bunu daha önce birkaç kez yaptım:

  • Kendall'ın Tau B'sinin uygulamasını etkili ama uygulamak zor yazdım . Bunu test etmek için de çalışan 50 satırlık basit bir uygulama yazdım . Ö(N- lÖg N-)Ö(N-2)

  • Sırt gerilemesi yapmak için bazı kodlar yazdım. Bunu yapmak için en iyi algoritma veya durumunda olup olmadığınıza bağlıdır , bu yüzden nasıl olsa iki algoritmaya ihtiyacım vardı. n>pp>n

Her iki durumda da D programlama dilinde nispeten iyi bilinen teknikler uyguluyordum (hiçbir uygulama yoktu), bu yüzden R'ye karşı da birkaç sonuç kontrol ettim. Bununla birlikte, monte carlo testi asla başka türlü yakalayamayacağım hataları yakaladı. .

Bir başka iyi test de varsayımlardır . Hesaplamanızın doğru sonuçlarının tam olarak ne olması gerektiğini bilmiyor olabilirsiniz, ancak bu, hesaplamanın çeşitli aşamalarında akıl sağlığı kontrolleri gerçekleştiremeyeceğiniz anlamına gelmez. Uygulamada, kodunuzda bunlardan bir sürü varsa ve hepsi geçerse, kod genellikle doğrudur.

Düzenleme: Üçüncü bir yöntem, tam olarak bilmiyor olsanız bile, en azından yaklaşık olarak doğru cevabın ne olduğunu bildiğiniz algoritma verilerini (sentetik veya gerçek) beslemek ve cevabın makul olup olmadığını denetleyerek görmektir. Örneğin, parametrelerinizin tahminlerinin tam olarak ne olduğunu bilmiyor olabilirsiniz, ancak hangilerinin "büyük" ve hangilerinin "küçük" olması gerektiğini biliyor olabilirsiniz.


5

Bunun gerçekten sorunuza bir cevap olup olmadığından emin değilim, ama en azından teğetsel olarak ilişkili.

Ben korumak İstatistik paketi Akçaağaç . Test edilmesi zor kodun ilginç bir örneği, farklı dağılımlara göre rastgele örnek oluşturmadır; hiçbir hatanın oluşturulmadığını test etmek kolaydır, ancak üretilen numunelerin istenen dağıtıma "yeterince iyi" uyup uymadığını belirlemek daha zordur. Maple hem sembolik hem de sayısal özelliklere sahip olduğundan, (tamamen sayısal) örnek üretimini test etmek için bazı sembolik özellikleri kullanabilirsiniz:

  1. Birkaç tip istatistiksel hipotez testi uyguladık, bunlardan biri ki kare uygun model testi - verilen olasılık dağılımının ters CDF'sinden belirlenen kutulardaki örnek sayısının ki kare testi. Örneğin, Cauchy dağıtım örneği oluşturmayı test etmek için,

    with(Statistics):
    infolevel[Statistics] := 1:
    distribution := CauchyDistribution(2, 3):
    sample := Sample(distribution, 10^6):
    ChiSquareSuitableModelTest(sample, distribution, 'bins' = 100, 'level' = 0.001);
    

    İstediğim kadar büyük bir örnek oluşturabildiğim için, oldukça küçük yapabilirim.α

  2. Sonlu momentli dağılımlar için, bir yandan birkaç örnek moment hesaplarken, diğer yandan, karşılık gelen dağılım momentlerini ve standart hatalarını sembolik olarak hesaplıyorum. Örneğin, beta dağıtımı için:

    with(Statistics):
    distribution := BetaDistribution(2, 3):
    distributionMoments := Moment~(distribution, [seq(1 .. 10)]);
    standardErrors := StandardError[10^6]~(Moment, distribution, [seq(1..10)]);
    evalf(distributionMoments /~ standardErrors);
    

    Bu, sonuncusu 255.1085766 olan sayıların azalan bir listesini gösterir. Bu nedenle, 10. an için bile, anın değeri, boyutundaki bir numune için numune momentinin standart hata değerinin 250 katından fazladır . Bu, aşağıdaki gibi daha fazla veya daha az çalışan bir test uygulayabileceğim anlamına gelir:106

    with(Statistics):
    sample := Sample(BetaDistribution(2, 3), 10^6):
    sampleMoments := map2(Moment, sample, [seq(1 .. 10)]);
    distributionMoments := [2/5, 1/5, 4/35, 1/14, 1/21, 1/30, 4/165, 1/55, 2/143, 1/91];
    standardErrors := 
      [1/5000, 1/70000*154^(1/2), 1/210000*894^(1/2), 1/770000*7755^(1/2), 
       1/54600*26^(1/2), 1/210000*266^(1/2), 7/5610000*2771^(1/2), 
       1/1567500*7809^(1/2), 3/5005000*6685^(1/2), 1/9209200*157366^(1/2)];
    deviations := abs~(sampleMoments - distributionMoments) /~ standardErrors;
    

    Sayılar distributionMomentsve standardErrorsyukarıdaki ilk çalıştırmadan gelir. Şimdi örnek üretimi doğruysa, sapma sayıları nispeten küçük olmalıdır. Yaklaşık normal olarak dağıldıklarını varsayıyorum (ki gerçekten değiller, ama yeterince yakın geliyorlar - bunların örneklerin kendilerinin değil, örnek anların ölçekli versiyonları olduğunu hatırlayın) ve böylece, örneğin, bir sapmanın olduğu bir durumu işaretleyebilirim 4'ten büyük - dağıtım momentinden standart hatanın dört katından fazla sapan bir örnek momentine karşılık gelir. Eğer numune üretimi iyi ise, rastgele meydana gelmesi pek olası değildir. Öte yandan, ilk 10 örnek an, dağılım momentlerini yüzde yarımdan daha az bir sürede eşleştiriyorsa, dağılımın oldukça iyi bir yaklaşımına sahibiz.

Bu yöntemlerin her ikisinin de çalışmasının anahtarı, örnek oluşturma kodunun ve sembolik kodun neredeyse tamamen ayrık olmasıdır. İkisi arasında çakışma olursa, bu çakışmadaki bir hata hem örnek oluşturmada hem de doğrulamasında kendini gösterebilir ve bu nedenle yakalanamaz.


Cevabınız için teşekkürler. Sadece bir tane seçmeme izin verildiği için bu diğer cevabı "kabul ediyorum" ve bu durum mevcut durumuma biraz daha iyi uyuyor gibiydi. Ama cevabınız da çok yardımcı oldu.
Jyotirmoy Bhattacharya

2

Bruce McCullough, istatistiksel yazılımı değerlendirmede bir yazlık endüstrisine sahipti (en geniş anlamda; Microsoft Excel'i de test etti. Yaklaşımının bir bölümünü gösteren iki makale burada ve burada.


2

Bu Stata Journal makalesinde StataCorp Başkanı William Gould tarafından çok fazla ayrıntı verilmiştir. 1 İstatistiksel yazılımın kalite kontrolü hakkında çok ilginç bir makale.

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.