O (1) güncelleme verimliliği ile sağlam ortalama tahmini


9

Belirli bir özelliğe sahip ortalamanın sağlam bir tahminini arıyorum. Bu istatistiği hesaplamak istediğim bir dizi unsurum var. Sonra, her seferinde bir tane yeni eleman ekliyorum ve her ek eleman için istatistiği (çevrimiçi algoritma olarak da bilinir) yeniden hesaplamak istiyorum. Bu güncelleme hesaplamasının hızlı olmasını, tercihen O (1), yani listenin boyutuna bağlı olmamasını istiyorum.

Her zamanki ortalama, verimli bir şekilde güncellenebilen ancak aykırı değerlere karşı sağlam olmayan bu özelliğe sahiptir. Çeyrekler arası ortalama ve kesilmiş ortalama gibi ortalamanın tipik sağlam tahmin edicileri verimli bir şekilde güncellenemez (çünkü sıralı bir listenin bakımını gerektirirler).

Verimli bir şekilde hesaplanabilen / güncellenebilen sağlam istatistikler için herhangi bir öneriyi takdir ediyorum.


Neden aykırı değerlerin taranması için "çitler" kurmak için verilerin ilk segmentini (örneğin ilk 100 veya ilk 1000 veya her neyse) kullanmıyorsunuz? Bunları tekrar güncellemenize gerek yoktur, bu nedenle ek veri yapılarını korumaya gerek yoktur.
whuber

@whuber İlk örneğin verilerin geri kalanını temsil edeceğini garanti edemiyorum. Örneğin, bana veri verildiği sıra rastgele değildir (ilk önce daha yüksek değerler ve sonra daha düşük değerler verildiğim bir senaryo hayal edin).
Bitwise

1
Bu çok önemli bir gözlem. Her zamankinden daha fazla dikkat etmeniz gerektiğini ima eder, çünkü başlangıçta ortalama yüksek aykırı değerlerin "sağlam" bir tahminini elde edersiniz. Bu tahmini güncellemeye devam ederek, daha düşük tüm değerleri dışarı atabilirsiniz. Böylece, tüm veri dağıtımının önemli bölümlerinin kaydedildiği ve periyodik olarak güncellendiği bir veri yapısına ihtiyacınız olacaktır. Fikirler için "online" ve "quantile" anahtar kelimelerini içeren konularımıza göz atın. Böyle umut verici iki kişi stats.stackexchange.com/questions/3372 ve stats.stackexchange.com/q/3377 adresindedir .
whuber

Bir lütuf teklif ederdim ama yeterli itibarım yok
Jason S

1
@ Whuber'ın ilk yorumundaki fikre devam etmek için, şimdiye kadar görülen tüm verilerden veya büyüklüğünde düzgün örneklenmiş rastgele bir altküme koruyabilirsiniz . Bu set ve ilişkili "çitler" O (1) zamanda güncellenebilir. 1001000
Innuo

Yanıtlar:


4

Bu çözüm, @Innuo tarafından soruna bir yorumda yapılan bir öneri uygular:

Şimdiye kadar görülen tüm verilerden 100 veya 1000 büyüklüğünde düzgün örneklenmiş rastgele bir altküme tutabilirsiniz. Bu set ve ilişkili "çitler" zamanda güncellenebilir .O(1)

Bu altkümeyi nasıl koruyacağımızı öğrendikten sonra , böyle bir örnekten popülasyon ortalamasını tahmin etmek istediğimiz herhangi bir yöntemi seçebiliriz . Bu, herhangi bir giriş akışı ile standart istatistik örnekleme formülleri kullanılarak tahmin edilebilecek bir doğrulukta çalışacak varsayımlarda bulunmayan evrensel bir yöntemdir . (Doğruluk, numune boyutunun kare kökü ile ters orantılıdır.)


Bu algoritma, girdi olarak bir veri akışı kabul bir numune boyutu ve numunelerin bir akım üretir her biri popülasyonu temsil etmektedir . Özellikle, , den boyutunda basit bir rastgele örnektir (değiştirmeden).x(t), t=1,2,,ms(t)X(t)=(x(1),x(2),,x(t))1its(i)mX(t)

Bunun gerçekleşmesi için, bu her yeterli -eleman alt kümesi, bir indekslerini olma şansı eşit de . Bu, cinsinden olma olasılığının, sağlanan eşit olduğu anlamına gelir .m{1,2,,t}xs(t)x(i), 1i<t,s(t)m/ttm

Başlangıçta sadece öğeleri saklanana kadar akışı topluyoruz . Bu noktada sadece bir olası örnek vardır, bu nedenle olasılık koşulu önemsiz bir şekilde karşılanır.m

olduğunda algoritma devreye girer . Endüktif olarak, nin için basit bir rastgele örneği olduğunu varsayalım . Geçici olarak . Let (oluşturmak için kullanılan herhangi bir önceki değişkenlerin bağımsız tek tip bir rastgele değişken olarak ). Eğer daha sonra bir rastgele seçilmiş elemanının yerine göre . Tüm prosedür bu!t=m+1s(t)X(t)t>ms(t+1)=s(t)U(t+1)s(t)U(t+1)m/(t+1)sx(t+1)

Açıkça , cinsinden olma ihtimaline sahiptir . Ayrıca, indüksiyon hipotezi ile, olasılığı vardı olma . Olasılığı ile = bu kaldırılmış olur , geriye kalan eşittir nereden olasılıkx(t+1)m/(t+1)s(t+1)x(i)m/ts(t)itm/(t+1)×1/m1/(t+1)s(t+1)

mt(11t+1)=mt+1,

tam olarak gerektiği gibi. İndüksiyonla, o zaman, tüm dahil olma olasılıklarıx(i) içinde s(t)doğrudur ve bu inklüzyonlar arasında özel bir korelasyon olmadığı açıktır. Bu algoritmanın doğru olduğunu kanıtlar.

Algoritma verimliliği O(1) çünkü her aşamada en fazla iki rasgele sayı hesaplanır ve mdeğerleri değiştirilir. Depolama gereksinimiO(m).

Bu algoritmanın veri yapısı örnekten oluşur s endeks ile birlikte t nüfusun X(t)örnekler. Başlangıçtas=X(m) ve şu algoritma ile devam edin: t=m+1,m+2,. İşte Rgüncellenecek bir uygulama(s,t) değeri olan x üretmek için (s,t+1). (Argüman nşu rolü oynar:tve sample.sizeolduğum. İçerikt arayan tarafından korunur.)

update <- function(s, x, n, sample.size) {
  if (length(s) < sample.size) {
    s <- c(s, x)
  } else if (runif(1) <= sample.size / n) {
    i <- sample.int(length(s), 1)
    s[i] <- x
  }
  return (s)
}

Bunu göstermek ve test etmek için, ortalamanın olağan (sağlam olmayan) tahmincisini kullanacağım ve ortalamayı s(t) gerçek anlamıyla X(t)(her adımda görülen toplam veri kümesi). Oldukça düzgün değişen ancak periyodik olarak dramatik sıçramalara giren biraz zor bir giriş akışı seçtim. Örnek boyutum=50 bu arazilerdeki örnekleme dalgalanmalarını görmemizi sağlayan oldukça küçüktür.

n <- 10^3
x <- sapply(1:(7*n), function(t) cos(pi*t/n) + 2*floor((1+t)/n))
n.sample <- 50
s <- x[1:(n.sample-1)]
online <- sapply(n.sample:length(x), function(i) {
  s <<- update(s, x[i], i, n.sample)
  summary(s)})
actual <- sapply(n.sample:length(x), function(i) summary(x[1:i]))

Bu noktada online, bu çalışan numuneyi koruyarak üretilen ortalama tahminlerin sırasıdır.50değerleri her an mevcut olan tüm verilerden actualüretilen ortalama tahmin dizisidir . Grafik, bu örnekleme prosedürünün ( gri renkte) verilerini (gri), (siyah) ve iki bağımsız uygulamasını gösterir. Anlaşma beklenen örnekleme hatası dahilinde:actual

plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")

şekil


Ortalamanın sağlam tahmincileri için lütfen sitemizde arama yapın ve ilgili terimler. Dikkate değer olasılıklar arasında Winsorized araçları ve M-tahmin ediciler bulunmaktadır.


bu yaklaşımda ret eşiğinin nasıl göründüğü net değil (örn. gözlemlerin ötesinde aykırı olarak reddedildiği eşik). Onları arsaya ekleyebilir misin?
user603

@ user603 "Reddetme eşiği" veya ortalamayı tahmin etmek için kullanılan sağlam yöntem ne olursa olsun, önemsizdir: ortalamayı tahmin etmek istediğiniz yöntemi seçin. (Tüm sağlam yöntemler eşikler kurarak ve verileri reddederek işe yaramaz, BTW.) Bu, yanıtımın kodunda summarysağlam bir varyant ile değiştirilerek yapılacaktı .
whuber

Bu örnekte benim için bir şey net değil. Gri veriler "iyi" veya "aykırı değerlerdir". Önceden, uyum önyargılı görünüyorsa (durum daha iyi uymalıdır çünkü durum @ Bitwise'ın takip etmek istediğimiz aşağı yönlü trendine benzer olacaktır). Daha yüksek indeks değerlerindeki gri veriler aykırı ise, uyum yukarı doğru meyillidir. Buraya sığdırmak istediğiniz hedef nedir? Mevcut uyum, bu iki senaryo arasında parçalanmış gibi görünüyor.
Deathkill14

@Death Şeklin hemen önündeki metinde açıklandığı gibi, gri veriler orijinal veri akışıdır. Akan ortalaması siyah eğridir. Renkli eğriler algoritmaya dayanmaktadır. Renkli eğrilerin siyah eğriye göre dikey sapmaları, örneklemedeki rastgelelikten kaynaklanmaktadır. Herhangi bir indekste beklenen sapma miktarı, o indeksten önceki gri değerlerin standart sapması ile orantılıdır ve örnek büyüklüğünün kare kökü ile ters orantılıdır (bu örnekte 50 olarak alınmıştır).
whuber

3

Sorununuzu özyinelemeli kontrol çizelgesiyle ilişkilendirmeyi düşünebilirsiniz. Böyle bir kontrol çizelgesi yeni bir gözlemin kontrol altında olup olmadığını değerlendirecektir. Öyleyse, bu gözlem, ortalama ve varyansın yeni tahminine dahil edilir (kontrol sınırlarını belirlemek için gereklidir).

Sağlam, özyinelemeli, tek değişkenli kontrol grafikleriyle ilgili bazı bilgiler burada bulunabilir . Kalite kontrol ve kontrol grafiklerine ilişkin klasik metinlerden birinin burada çevrimiçi olduğu görülmektedir .

Sezgisel olarak, bir ortalama kullanarak, μt1 ve bir varyans σt12 girdi olarak, yeni bir gözlemin zamanında olup olmadığını belirleyebilirsiniz. tbir takım yaklaşımlarla aykırıdır. Biri beyan etmek olurduxt belirli sayıda standart sapmaların dışındaysa bir aykırı değer μt1 (verilen σt12), ancak veriler belirli dağıtım varsayımlarına uymuyorsa bu sorunla karşılaşabilir. Bu yola gitmek istiyorsanız, yeni bir noktanın aykırı olup olmadığını belirlediğinizi varsayalım ve özel bir unutma oranı olmadan ortalama tahmininize dahil etmek istediğinizi varsayalım. O zaman bundan daha iyisini yapamazsınız:

μt=t1tμt1+1txt

Benzer şekilde, varyansı tekrar tekrar güncellemeniz gerekir:

σt2=t1tσt12+1t1(xtμt)2

Bununla birlikte, bazı geleneksel kontrol grafiklerini denemek isteyebilirsiniz. Verilerin dağıtımına daha dayanıklı olan ve hala durağan olmayanları işleyebilen diğer kontrol çizelgeleri (μEWMA veya CUSUM önerilir (çizelgeler ve kontrol limitleri hakkında daha fazla bilgi için yukarıdaki bağlantılı ders kitabına bakın). Bu yöntemler tipik olarak sağlam olandan daha az hesaplama açısından daha az yoğun olacaktır, çünkü tek bir yeni gözlemin, aykırı olmayan gözlemlerden elde edilen bilgilerle karşılaştırılması gerekliliğine sahiptirler. Uzun vadeli süreçle ilgili tahminlerinizi hassaslaştırabilirsinizμ ve σ2 İsterseniz yukarıda verilen güncelleme formülleri ile bu yöntemlerin kontrol limiti hesaplamalarında kullanılır.

Eski gözlemleri unutup yenilerine daha fazla ağırlık veren EWMA gibi bir grafikle ilgili olarak, verilerinizin durağan olduğunu düşünüyorsanız (üretim dağılımı parametrelerinin değişmediği), eski gözlemleri katlanarak unutmanıza gerek yoktur. Unutma faktörünü buna göre ayarlayabilirsiniz. Bununla birlikte, bunun durağanlık olmadığını düşünüyorsanız, unutma faktörü için iyi bir değer seçmeniz gerekecektir (bunu yapmanın bir yolu için yine ders kitabına bakın).

Ayrıca, çevrimiçi olarak yeni gözlemler izlemeye ve eklemeye başlamadan önce, μ0 ve σ02(egzersiz veri kümesine dayalı başlangıç ​​parametre değerleri) aykırı değerlerden etkilenmez. Egzersiz verilerinizde aykırı değerlerden şüpheleniyorsanız, bunları tahmin etmek için tek seferlik sağlam bir yöntem kullanmanın maliyetini ödeyebilirsiniz.

Bu çizgiler boyunca bir yaklaşım sorununuzu en hızlı şekilde güncelleyeceğini düşünüyorum.


1
Kontrol tablolarını kullanmak ilginç bir fikirdir. Bununla birlikte, soruya yapılan yorumlarda özetlenen zorlukların üstesinden gelmek zor görünebilir. Durağan olmayan durumda, daha eski değerleri "unutuyorsanız" tahminler yüksek oranda önyargılı olabilir. Örneğin, önerileriniz tarafından verilen bir veri akışı üzerinde nasıl çalışır?xt=cos(πt/106)+2t/106? (Bu çok yavaş yavaş düşer, aniden atlar ve çok yavaş yükselir, aniden tekrar atlar, vb.)
Whuber

@Bitwise, ilk örneğin gelecekteki verileri temsil etmeyebileceğini söylüyor. Verilerin geri kalanının ne kadar farklı olacağı hakkında bilgi olmadan, aslında hiçbir şey yapamazsınız. Bununla birlikte, ilk veriler durağan olmayan bir süreç hakkında bilgi içeriyorsa (düşüş eğilimi söyleyin), daha düşük olmalarını beklediğimizi hesaba katarak yeni gözlemlere izin verilebilir. Ancak, durağan olmama hakkında bazı bilgilere ihtiyaç vardır. Durağan olmayan bir patolojik tip öneriyorsunuz. Bazı yöntemler, örneğin EWMA, belirli bir işlem için en uygun yöntemdir, ancak genellikle oldukça iyidir. İşleminiz daha özel bir iş gerektirecektir.
Deathkill14

(İçinde bir matematikçi tespit ediyorum, çünkü başa çıkamayacağın bir şey "patolojik" olarak reddetmek çok matematiksel bir harekettir :-). Ama sizin prognozunuzla farklı olmaya yalvarıyorum: @Innuo tarafından önerilenler gibi yöntemler gerçekten de bu tür “patolojilere” karşı koruma sağlayabilir ve gerçek dünya size atabileceği diğer her şey, özellikle de örnekleme içine randomizasyon dahil edildiğinde.
whuber

Aslında, kişinin karşılaştığı bir sorunu reddetmemesi gerektiğine katılıyorum. Beni @Innuo tartışılan yöntemlere bağlar mısınız? (Onları bu yazıdan bulamıyorum - yukarıda verdiğiniz bağlantılarda onlar vardı ve onları özledim?). Teşekkür ederim.
Deathkill14

@Innuo, stats.stackexchange.com/questions/56494/… ' a kısa bir yorum gönderdi ve daha önce gözlemlenen tüm verilerin tek tip rastgele bir örneğininO(1)saati. Bunun nasıl yapılacağı tam olarak açık olmasa da, ortalamanın sağlam bir tahmincisi ile birleştirilmesi, herhangi bir veri akışı için geçerli olan evrensel bir çözüm oluşturacaktır.
whuber
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.