วิธีการคำนวณ Rousseeuw's และ Croux '(1993) Qn scale estimator สำหรับตัวอย่างขนาดใหญ่


13

Let ดังนั้นสำหรับตัวอย่างสั้น ๆ เช่น{ 1 , 3 , 6 , 2 , 7 , 5 }มันสามารถคำนวณได้จากการค้นหาลำดับที่kที่มีความแตกต่างกันแบบคู่: Qn=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

ดังนั้นQn=Cn.2

เห็นได้ชัดว่ามีกลุ่มตัวอย่างจำนวน 80,000 รายการที่เราต้องการหน่วยความจำขนาดใหญ่มาก

อย่างไรก็ตามมีการคำนวณในพื้นที่ 1D แทนที่จะเป็น 2D หรือไม่?Qn

ลิงก์ไปยังคำตอบftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf ถึงแม้ว่าฉันจะไม่เข้าใจอย่างถ่องแท้


1
ตกลงคำตอบสำหรับคนที่จะอ่านสิ่งนี้ในภายหลัง: ถ้าคุณแค่ต้องการคำนวณเครื่องคำนวณขนาดที่แข็งแกร่งสำหรับชิ้นส่วนของข้อมูล 1 - ติดตั้งรุ่นล่าสุดของ R 2 - ติดตั้งแพคเกจฐานที่แข็งแกร่ง 3 พร้อมที่จะไป! แต่ถ้าคุณกำลังพัฒนารหัสที่อยู่นอกสภาพแวดล้อมนี้คุณต้องใช้ค่ามัธยฐานสูงถ่วงน้ำหนักเพื่อลดการคำนวณที่จำเป็นสำหรับ Sn หรือ Qn
K-1

1
ลิงก์ไปยังกระดาษไม่ทำงาน การอ้างอิงที่เหมาะสม (ดียิ่งขึ้นโดยอ้างอิงจากข้อมูลที่เกี่ยวข้องมากที่สุด) จะช่วยให้เราค้นหาข้อมูลได้ เนื่องจากมันไม่มีประโยชน์เมื่อลิงก์ตาย (เกิดขึ้นบ่อยครั้ง)
Glen_b

2
ไม่ควรจะเป็น k = h เลือก 2 = h (h-1) / 2 = 6 ? มันไม่ได้เปลี่ยนผลลัพธ์สุดท้าย
เสือ

ทำไม Qn = Cn * 2 ทำไม 2 มันคำนวณอย่างไร
lidox

คำตอบ:


15

อัปเดต: ปมของปัญหาคือเพื่อให้บรรลุความซับซ้อนของเวลาO(nlog(n))ความต้องการในการจัดเก็บO(n)


ไม่, O(nlog(n))เป็นขอบเขตทางทฤษฎีที่ต่ำกว่าสำหรับความซับซ้อนของเวลา (ดู (1)) การเลือกองค์ประกอบkthในบรรดาn(n1)2เป็นไปได้|xixj|:1i<jnn

คุณสามารถรับพื้นที่O(1)แต่โดยการตรวจสอบชุดค่าผสมทั้งหมดของxixjในเวลาO(n2)เท่านั้น

ข่าวดีก็คือว่าคุณสามารถใช้τประมาณการจากขนาด (ดู (2) และ (3) สำหรับรุ่นปรับปรุงและบางเปรียบเทียบเวลา) ดำเนินการในฟังก์ชั่น scaleTau2()ในแพคเกจR robustbaseunivariate τประมาณการเป็นประมาณสองขั้นตอน (เช่นเรื่องการถ่วงน้ำหนัก) ของขนาด มันมีประสิทธิภาพแบบเกาส์ 95 เปอร์เซ็นต์จุดแตกหัก 50 เปอร์เซ็นต์และความซับซ้อนของเวลาO(n)และพื้นที่O(1) (รวมทั้งสามารถทำ 'ออนไลน์' ได้ง่ายลดค่าใช้จ่ายในการคำนวณซ้ำครึ่งถึงแม้ว่าคุณจะ จะต้องขุดเข้าไปในRรหัสเพื่อใช้ตัวเลือกนี้มันค่อนข้างตรงไปตรงมาที่จะทำ)

  1. ความซับซ้อนของการเลือกและการจัดอันดับใน X + Y และเมทริกซ์ด้วยคอลัมน์ที่เรียงลำดับ GN Frederickson และ DB Johnson, วารสารคอมพิวเตอร์และวิทยาศาสตร์ระบบเล่มที่ 24, ฉบับที่ 2, เมษายน 1982, หน้า 197-208
  2. Yohai, V. และ Zamar, R. (1988) การประมาณจุดแยกย่อยสูงของการถดถอยโดยใช้การย่อขนาดที่มีประสิทธิภาพ วารสารสมาคมสถิติอเมริกัน 83 406–413
  3. Maronna, R. และ Zamar, R. (2002) การประมาณตำแหน่งและการกระจายที่แข็งแกร่งสำหรับชุดข้อมูลมิติสูง Technometrics 44 307–317

แก้ไขเพื่อใช้สิ่งนี้

  1. ไฟขึ้นR(ฟรีและสามารถดาวน์โหลดได้จากที่นี่ )
  2. ติดตั้งแพ็คเกจโดยพิมพ์:
install.packages("robustbase")
  1. โหลดแพ็คเกจโดยการพิมพ์:
library("robustbase")
  1. โหลดไฟล์ข้อมูลของคุณและเรียกใช้ฟังก์ชัน:
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)

2
@ user603: เอกภาพที่คุณอ้างถึง แต่ทำไมมันไม่แพร่หลายหากมีสถิติและการคำนวณที่ดีและจุดแตกหัก
ควอตซ์

2
ก) คุณสามารถคำนวณบ้าและค่ามัธยฐานออนไลน์ จากนั้นมันเป็นเรื่องเล็กน้อยที่จะคำนวณเอกภาพ b) การแบ่งไม่แข็งแรงและเอกภาพมีอคติที่น่ากลัวในการปรากฏตัวของค่าผิดปกติ คุณสามารถหาข้อโต้แย้งเพิ่มเติมได้ในหัวข้อ 5 ของเอกสาร Qn
user603

1
@ user603 คุณหมายถึงเอกสารนี้? wis.kuleuven.be/stat/robust/papers/publications-1994/…
German Demidov

1
QnSnSnQn

1
τ

0

(คำตอบที่สั้นมาก) ข้อความที่แสดงความคิดเห็นพูดว่า

หลีกเลี่ยงการตอบคำถามในความคิดเห็น

Qn

แก้ไข

Qn

{xi}i=1Nn<N{xi}i=tn+1tQnNn+1Qn{Qni}i=1Nn+1

Qni|Qni1 O(nlog(n))Qni

Qn{xi}i=1NO(n2)


แม้ว่าคุณไม่ควรตอบในความคิดเห็น แต่คุณไม่ควรโพสต์ความคิดเห็นเป็นคำตอบและหากคำตอบของคุณเป็นลิงก์เพียงอย่างเดียวนั่นไม่ใช่คำตอบ (แต่อาจเป็นความคิดเห็น) หากคุณต้องการให้มันเป็นคำตอบมากกว่าความคิดเห็นคำตอบของคุณควรมีข้อมูลที่เกี่ยวข้องในบางลักษณะเช่นคำพูดจากลิงค์อ้างอิงที่ถูกต้องหรือคำอธิบายรายละเอียดที่สำคัญของคุณเอง หากทำได้โปรดระบุรายละเอียดที่จำเป็น อีกทางหนึ่งฉันสามารถแปลงเป็นความคิดเห็นสำหรับคุณ
Glen_b

@Glen_b: ไปข้างหน้าและแปลง ขอบคุณสำหรับการชี้แจง
serv-inc

1
@ user603 บางทีคุณอาจจะ (เช่นในลิงค์ในความคิดเห็นของฉัน) แก้ไขข้อมูลที่จำเป็นลงในคำตอบข้างต้น - ตามที่เป็นอยู่ในปัจจุบันมันไม่ได้อยู่ในแนวทางเครือข่าย SE สำหรับคำตอบ
Glen_b

ไม่มีปัญหาฉันจะ! (แต่ที่นี่สายจริงๆ)
user603

@ user603 ขอบคุณ; ฉันจะทิ้งไว้ที่นี่ตอนนี้แล้ว
Glen_b

0

นี่คือการใช้ Qn ของฉัน ...

ฉันเขียนโปรแกรมนี้ใน C และผลลัพธ์คือ:

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
แม้ว่าการใช้งานมักจะถูกผสมกับเนื้อหาสาระในคำถาม แต่เราควรจะเป็นเว็บไซต์สำหรับให้ข้อมูลเกี่ยวกับสถิติการเรียนรู้ของเครื่อง ฯลฯ ไม่ใช่รหัส มันอาจเป็นการดีที่จะให้รหัสเช่นกัน แต่โปรดอธิบายรายละเอียดที่สำคัญในข้อความสำหรับผู้ที่ไม่ได้อ่านภาษานี้ดีพอที่จะรับรู้และแยกคำตอบออกจากรหัส
gung - Reinstate Monica

นี่เป็นอัลกอริทึมที่ไร้เดียงสา O (n ** 2) ~
user603
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.