Làm cách nào để tính toán ước lượng tỷ lệ Qn của Rousseeuw và Croux '(1993) cho các mẫu lớn?


13

Đặt vì vậy đối với một mẫu rất ngắn như { 1 , 3 , 6 , 2 , 7 , 5 } có thể được tính từ việc tìm tĩnh thứ tự thứ k có sự khác biệt theo cặp: 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

Do đó Qn=Cn.2

Rõ ràng đối với các mẫu lớn nói bao gồm 80.000 hồ sơ, chúng ta cần bộ nhớ rất lớn.

Có cách nào để tính trong không gian 1D thay vì 2D không?Qn

Một liên kết đến câu trả lời ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf mặc dù tôi không thể hiểu hết về nó.


1
OK, câu trả lời cho những người sẽ đọc điều này sau: nếu bạn chỉ muốn tính toán một công cụ ước tính tỷ lệ mạnh mẽ cho một phần dữ liệu Phiên bản mới nhất của R 2 - cài đặt gói mạnh mẽ 3 sẵn sàng để đi! nhưng nếu bạn đang phát triển một mã bên ngoài môi trường này, bạn cần sử dụng các giá trị trung bình cao có trọng số để giảm thiểu các tính toán cần thiết cho Sn hoặc Qn.
K-1

1
Liên kết đến bài báo không hoạt động. Một tài liệu tham khảo thích hợp (thậm chí tốt hơn, với một trích dẫn về thông tin phù hợp nhất) sẽ giúp chúng tôi xác định vị trí thông tin; vì nó đứng vô dụng khi liên kết chết (như thường xảy ra).
Glen_b -Reinstate Monica

2
không nên là k = h chọn 2 = h (h - 1) / 2 = 6 ? Nó không thay đổi kết quả cuối cùng, mặc dù.
một con hổ

tại sao Qn = Cn * 2, tại sao 2? nó được tính như thế nào?
capox 15/2/18

Câu trả lời:


15

Cập nhật: Mấu chốt của vấn đề là để đạt được độ phức tạp thời gian O(nlog(n)) , người ta cần theo thứ tự lưu trữ O(n) .


Không, O(nlog(n)) là giới hạn lý thuyết thấp hơn cho độ phức tạp thời gian của (xem (1)) chọn phần tử kth trong số tất cả n(n1)2 có thể|xixj|:1i<jn.

Bạn có thể nhận được không gian O(1) , nhưng chỉ bằng cách kiểm tra ngây thơ tất cả các kết hợp của xixj trong thời gian O(n2) .

Tin vui là bạn có thể sử dụng τ cụ ước tính tỷ lệ (xem (2) và (3) cho phiên bản cải tiến và một số so sánh thời gian), được triển khai trong chức năng scaleTau2()trong Rgói robustbase. Các đơn biến τ ước lượng là một hai bước (tức là tái-weighted) ước lượng quy mô. Nó có hiệu suất Gaussian 95 phần trăm, điểm phân tích 50 phần trăm và độ phức tạp của thời gian O(n) và không gian O(1) (cộng với nó có thể dễ dàng thực hiện 'trực tuyến', loại bỏ một nửa chi phí tính toán khi sử dụng nhiều lần - mặc dù bạn sẽ phải đào sâu vào Rmã để thực hiện tùy chọn này, nó khá đơn giản để làm).

  1. Sự phức tạp của việc lựa chọn và xếp hạng trong X + Y và ma trận với các cột được sắp xếp GN Frederickson và DB Johnson, Tạp chí Khoa học Máy tính và Hệ thống Tập 24, Số 2, Tháng 4 năm 1982, Trang 197-208.
  2. Yohai, V. và Zamar, R. (1988). Ước tính điểm phân tích cao của hồi quy bằng phương pháp tối thiểu hóa thang đo hiệu quả. Tạp chí của Hiệp hội Thống kê Hoa Kỳ 83 406 Từ413.
  3. Maronna, R. và Zamar, R. (2002). Ước tính mạnh mẽ về vị trí và độ phân tán cho các tập dữ liệu chiều cao. Kỹ thuật 44 307 Điện317

Chỉnh sửa Để sử dụng

  1. Bật lên R(miễn phí và có thể tải xuống từ đây )
  2. Cài đặt gói bằng cách gõ:
install.packages("robustbase")
  1. Tải gói bằng cách gõ:
library("robustbase")
  1. Tải tệp dữ liệu của bạn và chạy chức năng:
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)

2
@ user603: tau bạn đang đề cập đến. Btw tại sao nó không phổ biến nếu nó có hiệu quả tính toán và thống kê tốt như vậy?
Thạch anh

2
a) bạn có thể tính toán điên và trung bình trực tuyến . Từ đó, việc tính toán Tàu là chuyện nhỏ. b) sự cố không phải là sự mạnh mẽ và Tau có sự thiên vị khủng khiếp khi có sự xuất hiện của những kẻ ngoại phạm. Bạn có thể tìm thấy nhiều đối số chống lại nó trong phần 5 của bài báo Qn
user603

1
@ user603 bạn có nghĩa là giấy này? Wis.kuleuven.be/stat/robust/ con / publications-994 /
Đức Demidov

1
@ user603 theo bài báo, đường cong thiên vị cho chúng ta biết mức độ ước tính có thể thay đổi do một phần nhiễm bẩn nhất định. S n được thiên vị cho các ví dụ mô phỏng của tôi (phân phối bình thường + 20% giá trị cực cao / thấp) và mức độ sai lệch là tương đương. Có thể tôi đã có một cái gì đó sai, nhưng cả S nQ n dường như bị cùng một vấn đề. QnSnSnQn
Đức Demidov

1
@ user603 xin lỗi, không thể nhìn thấy hiệu ứng đối với các mẫu có kích thước 100. Tôi thấy rõ vấn đề khi sử dụng các cỡ mẫu lớn. Tất cả đều có những thành kiến khủng khiếp, nhưng có một lớn nhất. τ
Đức Demidov

0

(Câu trả lời rất ngắn) Văn bản để bình luận nói

tránh trả lời các câu hỏi trong ý kiến.

Vì vậy, đây là: Có một bài viết về một thuật toán trực tuyến dường như chạy khá tốt: Áp dụng Công cụ Ước tính Trực tuyếnQn .

BIÊN TẬP

(bởi người dùng603). Thuật toán được liên kết trong bài viết này là phiên bản cửa sổ chuyển động của .Qn

Cho một mẫu lớn được chia thành các cửa sổ thời gian có chiều rộng n < N , { x i } t i = t - n + 1, chúng ta có thể áp dụng Q n cho mỗi cửa sổ thời gian mang lại N - n + 1 các giá trị của Q n . Suy ra các giá trị này { Q i n } N - n + 1{xi}i=1Nn<N{xi}i=tn+1tQnNn+1Qn{Qni}i=1Nn+1

Qni|Qni1 O(nlog(n))Qni

Qn{xi}i=1NO(n2) (mặc dù nó thường nhỏ hơn nhiều).


Mặc dù bạn không nên trả lời trong các bình luận, bạn cũng không nên đăng bình luận dưới dạng câu trả lời và nếu câu trả lời của bạn chỉ là một liên kết thì đó không phải là một câu trả lời (nhưng có thể là một bình luận). Nếu bạn muốn nó là một câu trả lời thay vì bình luận, câu trả lời của bạn nên chứa thông tin liên quan theo một cách nào đó, chẳng hạn như trích dẫn từ một liên kết được tham chiếu chính xác hoặc giải thích của bạn về các chi tiết quan trọng. Nếu bạn có thể, xin vui lòng cung cấp các chi tiết cần thiết; Ngoài ra, tôi có thể chuyển đổi nó thành một nhận xét cho bạn.
Glen_b -Reinstate Monica

@Glen_b: tiếp tục và chuyển đổi. Cảm ơn bạn đã làm rõ.
serv-inc

1
@ user603 Có lẽ bạn có thể (như trong các liên kết trong nhận xét của tôi) chỉnh sửa thông tin cần thiết vào câu trả lời ở trên - vì hiện tại nó không nằm trong hướng dẫn của mạng SE để trả lời.
Glen_b -Reinstate Monica

Không có vấn đề, tôi sẽ! (nhưng ở đây thực sự rất muộn,)
user603

@ user603 Cảm ơn; Bây giờ tôi sẽ để nó ở đây
Glen_b -Reinstate Monica

0

đây là triển khai của tôi về Qn ...

Tôi đã lập trình điều này trong C và kết quả là:

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
Mặc dù việc triển khai thường được trộn lẫn với nội dung thực chất trong các câu hỏi, chúng tôi được cho là một trang web cung cấp thông tin về thống kê, học máy, v.v., không phải mã. Cũng có thể tốt khi cung cấp mã, nhưng vui lòng xây dựng câu trả lời chính xác của bạn trong văn bản cho những người không đọc ngôn ngữ này đủ tốt để nhận ra & trích xuất câu trả lời từ mã.
gung - Phục hồi Monica

Đây là thuật toán O (n ** 2) ngây thơ ~
user603
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.