Büyük numuneler için Rousseeuw ve Croux '(1993) Qn ölçeği tahmincisi nasıl hesaplanır?


13

Bırakın böylece gibi çok kısa bir örnek için hesaplanabilir ikili farklılıkların sırası statikini bulmaktan : { 1 , 3 , 6 , 2 , 7 , 5 } kQn=Cn.{|XiXj|;i<j}(k){1,3,6,2,7,5}k

    7 6 5 3 2 1
1   6 5 4 2 1
2   5 4 3 1
3   4 3 2
5   2 1
6   1
7

h = [n / 2] + 1 = 4

k = h (h-1) / 2 = 8

BöyleceQn=Cn.2

Açıkçası 80.000 kayıttan oluşan büyük örnekler için çok büyük bir belleğe ihtiyacımız var.

2D yerine 1B alanda hesaplamak için yine de var mı ?Qn

Tam olarak anlayamama rağmen ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf cevabına bir bağlantı .


1
Tamam, bunu daha sonra okuyacak olan çocuklar için cevap: sadece bir veri parçası için sağlam bir ölçek tahmincisi hesaplamak istiyorsanız, R 2'nin en son sürümünü yükleyin - sağlam temel paketini 3 hazır kurun! ancak bu ortamın dışında bir kod geliştiriyorsanız, Sn veya Qn için gerekli hesaplamaları en aza indirmek için ağırlıklı yüksek medyan kullanmanız gerekir.
K-1

1
Bildiri bağlantısı çalışmıyor. Uygun bir referans (daha iyi, en alakalı bilgilerin bir alıntısıyla) bilgileri bulmamıza yardımcı olurdu; durduğunda bağlantı koptuğunda işe yaramaz (sık sık olduğu gibi).
Glen_b

2
k = h olmamalı 2 = h (h-1) / 2 = 6 mı? Yine de son sonucu değiştirmez.
bir kaplan

neden Qn = Cn * 2, neden 2? nasıl hesaplandı?
lidox

Yanıtlar:


15

Güncelleme: Sorunun temel noktası, zaman karmaşıklığını elde etmek için depolama sırasına ihtiyaç duyulmasıdır.O(nlog(n))O(n)


Hayır, , tüm arasında öğesini seçmenin zaman karmaşıklığı için alt teorik sınırdır (bakınız (1)) mümkün .O(nlog(n))kthn(n1)2|xixj|:1i<jn

alanı elde edebilirsiniz , ancak sadece zamanında tüm kombinasyonlarını saf bir şekilde kontrol ederek .O(1)xixjO(n2)

İyi haber şu ki , paketteki işlevde uygulanan ölçeklendirmenin ölçeklendiricisini (gelişmiş bir sürüm ve bazı zamanlama karşılaştırmaları için bkz. (2) ve (3)) kullanabilirsiniz . Tek değişkenli tahmincisi iki aşamalı (yani yeniden ağırlıklı) bir ölçek tahmincisidir. Yüzde 95 Gauss verimliliği, yüzde 50 kırılma noktası ve zaman ve alanının karmaşıklığı vardır (ayrıca tekrarlanan kullanımda hesaplama maliyetlerinin yarısını tıraş ederek - kolayca çevrimiçi olarak yapılabilir) Bu seçeneği uygulamak için kodu kazmak zorunda kalacak , bunu yapmak oldukça basittir).ττ O ( n ) O ( 1 )scaleTau2()RrobustbaseτO(n)O(1)R

  1. X + Y'deki seçim ve sıralamanın karmaşıklığı ve sıralı sütunlarla matrisler GN Frederickson ve DB Johnson, Bilgisayar ve Sistem Bilimleri Dergisi Cilt 24, Sayı 2, Nisan 1982, Sayfa 197-208.
  2. Yohai, V. ve Zamar, R. (1988). Etkili ölçeğin minimize edilmesi yoluyla yüksek kırılma noktası regresyon tahminleri. Amerikan İstatistik Derneği Dergisi 4040-413.
  3. Maronna, R. ve Zamar, R. (2002). Yüksek boyutlu veri kümeleri için sağlam konum ve dağılım tahminleri. Teknometri 44307–317

Düzenle Bunu kullanmak için

  1. Çalıştır R(ücretsiz ve indirilebilir burada )
  2. Paketi yazarak yükleyin:
install.packages("robustbase")
  1. Paketi yazarak yükleyin:
library("robustbase")
  1. Veri dosyanızı yükleyin ve işlevi çalıştırın:
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)

2
@ user603: bahsettiğiniz tau. Btw, bu kadar iyi istatistiksel ve hesaplamalı verimliliklere ve arıza noktasına sahipse neden yaygın değil?
Quartz

2
a) online deli ve medyan hesaplayabilirsiniz . Oradan Tau'yu hesaplamak önemsizdir. b) arıza sağlamlık değildir ve Tau, aykırı değerlerin varlığında korkunç bir önyargıya sahiptir. Buna karşı daha fazla argümanı Qn belgesinin
user603

1
@ user603 bu yazıyı mı demek istediniz? wis.kuleuven.be/stat/robust/papers/publications-1994/…
Alman Demidov

1
@ user603, makaleye göre, yanlılık eğrisi, belirli bir kontaminasyon fraksiyonu nedeniyle ne kadar tahmin edicinin değişebileceğini anlatmaktadır. ve , simüle edilmiş örneklerim için önyargılıydı (normal dağılım + aşırı yüksek / düşük değerlerin% 20'si) ve önyargı seviyesi karşılaştırılabilirdi. Bir şeyin yanlış var, ancak her iki olabilir ve aynı sorundan acıları görünüyor. QnSnSnQn
Alman Demidov

1
@ user603 özür dileriz, etki 100 ebatlı numuneler için görülemedi. Sorunu büyük boyutlu numuneler kullanarak açıkça görüyorum. Hepsinin korkunç önyargıları var, ama en sahip. τ
Alman Demidov

0

(Çok kısa cevap) Yorum metni şöyle diyor

yorumlarda soruları yanıtlamaktan kaçının.

işte burada: Görünüşe göre oldukça iyi çalışan bir çevrimiçi algoritma hakkında bir makale var: Tahmincisi Online'ı uygulamaQn .

DÜZENLE

(kullanıcı603 kullanıcısı tarafından). Bu makalede bağlı algoritma hareketli bir pencere sürümü sürümüdür .Qn

Büyük bir örnek verilen genişliği zaman penceresi ayrılır , biz uygulayabilir için değerlerini veren her zaman penceresi . Bu değerleri belirtin{xi}i=1Nn<N{xi}i=tn+1tQnNn+1Qn{Qni}i=1Nn+1

Burada belirtilen algoritma ' sıfırdan hesaplamak için gereken en kötü maliyetinden daha düşük bir ortalama maliyetle elde sağlar . O ( n günlüğü ( n ) ) Q i nQni|Qni1 O(nlog(n))Qni

Qn{xi}i=1NO(n2)


Yorumlarda cevap vermemelisiniz, ancak cevap olarak yorum göndermemelisiniz ve cevabınız sadece bir linkse, bu bir cevap değildir (ancak bir yorum olabilir). Bunun bir yorumdan ziyade bir cevap olmasını istiyorsanız, cevabınız, uygun şekilde referans verilen bir bağlantıdan alıntı veya önemli ayrıntıları kendi açıklaması gibi ilgili bilgileri içermelidir . Yapabiliyorsanız, lütfen gerekli ayrıntıları sağlayın; alternatif olarak bunu sizin için bir yoruma dönüştürebilirim.
Glen_b -Monica

@ Glen_b: Devam edin ve dönüştürün. Açıklama için teşekkürler.
serv-inc

1
@ user603 Belki de (yorumumdaki bağlantılarda olduğu gibi) temel bilgileri yukarıdaki cevaba düzenleyebilirsiniz - şu anda durduğu için cevaplar için SE ağları kuralları dahilinde değildir.
Glen_b -Monica

Sorun değil, yapacağım! (ama burada gerçekten geç,)
user603 16:16

@ user603 Teşekkürler; Şimdilik burada bırakacağım
Glen_b -Marica Monica

0

Bu benim Qn uygulamak olduğunu ...

Bu C programlama ve sonuç şu:

void bubbleSort(double *datos, int N)
{
 for (int j=0; j<N-1 ;j++)     
  for (int i=j+1; i<N; i++)    
   if (datos[i]<datos[j])      
   {
    double tmp=datos[i];
    datos[i]=datos[j];
    datos[j]=tmp;
   }
}

double  fFactorial(long N)    
{
 double factorial=1.0;

 for (long i=1; i<=N; ++i)
  factorial*=(double)i;

 return factorial;  
}

double fQ_n(double *datos, int N)  // Rousseeuw's and Croux (1993) Qn scale estimator
{
 bubbleSort(datos, N);

 int m=(int)((fFactorial((long)N))/(fFactorial(2)*fFactorial((long)N-2)));

 double D[m];
 //double Cn=2.2219;      //not used now :) constant value https://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/qn_scale.htm

 int k=(int)((fFactorial((long)N/2+1))/(fFactorial(2)*fFactorial((long)N/2+1-2)));

 int y=0;

 for (int i=0; i<N; i++)
  for (int j=N-1; j>=0; j--)
   if (i<j)
   {
    D[y]=abs(datos[i]-datos[j]);
    y++;
   }

 bubbleSort(D, m);

 return D[k-1];
}

int main(int argc, char **argv)    
{
 double datos[6]={1,2,3,5,6,7};
 int N=6;

 // Priting in terminal the final solution
 printf("\n==[Results] ========================================\n\n");

 printf(" Q_n=%0.3f\n",fQ_n(datos,N));

 return 0;
}

1
Uygulama genellikle sorulardaki önemli içerikle karıştırılsa da, kod değil istatistik, makine öğrenimi vb. Hakkında bilgi sağlamak için bir site olmamız gerekir. Kod sağlamak da iyi olabilir, ancak lütfen bu dili koddan cevabı tanıyacak ve çıkaracak kadar iyi okuyan insanlar için metindeki önemli cevabınızı hazırlayın.
gung - Monica'yı eski

Bu saf O (n ** 2) algoritması ~
user603
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.