큰 샘플에 대해 Rousseeuw 's and Croux '(1993) Qn 스케일 추정기를 계산하는 방법은 무엇입니까?


13

하자 과 같이 매우 짧은 샘플 이는 계산 될 수있다 쌍별 차이 의 차 정적 을 찾는 것 : 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 개의 레코드로 구성된 큰 샘플의 경우 매우 큰 메모리가 필요합니다.

어쨌든 2D 대신 1D 공간에서 을 계산할 수 있습니까?Qn

완전히 이해할 수는 없지만 대답 ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf에 대한 링크 입니다.


1
좋아, 나중에 읽을 사람을위한 대답 : 당신이 데이터에 대한 강력한 스케일 추정기를 계산하려면 R의 1 설치 최신 버전을 설치하십시오 2- 견고한 저장소 패키지를 설치하십시오! 그러나이 환경 외부에서 코드를 개발하는 경우 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)


아니요, 은 모든 중에서 요소를 선택하는 시간 복잡성에 대한 이론적 하한 입니다 ((1) 참조 가능한 .O(nlog(n))K t H N ( N - 1 )kthn(n1)2|xixj|:1i<jn

공간을 얻을 수 있지만 시간 에서 의 모든 조합을 순진하게 확인해야 합니다.O(1)xixjO(n2)

좋은 소식은 패키지 의 함수 에 구현 된 스케일 의 추정기 (개선 된 버전 및 일부 타이밍 비교에 대해서는 (2) 및 (3) 참조)를 사용할 수 있다는 것 입니다. 일 변량 추정량은 스케일의 2 단계 (예 : 재가 중) 추정량입니다. 95 % 가우시안 효율, 50 % 고 장점 및 시간 및 공간의 복잡성 을가집니다 (또한 온라인으로 쉽게 만들 수있어 반복 사용으로 계산 비용의 절반을 절감 할 수 있음) 이 옵션을 구현하기 위해 코드 를 파헤쳐 야 할 것입니다.ττ O ( n ) O ( 1 )scaleTau2()RrobustbaseτO(n)O(1)R

  1. 정렬 된 열 GN Frederickson 및 DB Johnson, 컴퓨터 및 시스템 과학 저널 24 권 2 호, 1982 년 4 월 2 일, 197-208 페이지의 X + Y 및 행렬에서 선택 및 순위의 복잡성.
  2. Yohai, V. 및 Zamar, R. (1988). 효율적인 척도를 최소화하여 회귀에 대한 높은 분류 점 추정치. 미국 통계 협회의 전표 83 406–413.
  3. Maronna, R. 및 Zamar, R. (2002). 고차원 데이터 세트에 대한 강력한 위치 및 분산 추정치. 기술 측정 44307–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 : 당신이 말하는 타우. Btw 왜 좋은 통계 및 계산 효율성과 고장 점이 있다면 왜 널리 보급되지 않습니까?
Quartz

2
a) 온라인으로 평균값과 평균값을 계산할 수 있습니다 . 거기에서 타우를 계산하는 것은 사소한 일입니다. b) 고장은 견고성이 아니며 Tau는 특이 치가 존재하는 경우 끔찍한 편견을 가지고 있습니다. 당신의 5 절에 대한 추가 사항을 찾을 수 있습니다 QN 종이
user603

1
@ user603 당신은이 종이를 의미합니까? wis.kuleuven.be/stat/robust/papers/publications-1994/…
독일 Demidov

1
논문에 따르면 @ user603에 따르면, 바이어스 곡선은 주어진 오염 비율로 인해 얼마나 많은 추정기가 변경 될 수 있는지 알려줍니다. 과 은 시뮬레이션 예제 (정규 분포 + 매우 높거나 낮은 값의 20 %)에 대해 바이어스되었으며, 바이어스 레벨은 비슷했습니다. 내가 잘못했을 수도 있지만 과 모두 같은 문제로 어려움을 겪고있는 것 같습니다. QnSnSnQn
독일 데미 도프

1
@ user603 죄송합니다. 100 크기의 샘플에서는 효과를 볼 수 없습니다. 큰 샘플 크기를 사용하면 문제가 분명히 나타납니다. 그들 모두는 끔찍한 편견을 가지고 있지만 는 가장 큰 편견을 가지고 있습니다 . τ
독일 데미 도프

0

(매우 짧은 답변) 댓글 텍스트가 말합니다

의견에 질문에 대답하지 마십시오.

Estimator Online을 적용Qn 하는 것처럼 보이는 온라인 알고리즘에 대한 논문이 있습니다 .

편집하다

(사용자 user603에 의해). 이 기사에서 링크 된 알고리즘 은 의 이동 창 버전 버전입니다 .Qn

많은 샘플을 감안 폭의 시간 창으로 분할 , 우리는 적용 할 수 로를 각 시간 창 은 의 값을 합니다. 이 값을 나타냅니다.{xi}i=1Nn<N{xi}i=tn+1tQnNn+1Qn{Qni}i=1Nn+1

알고리즘은 여기에 인용 얻을 수 가 AT 평균 이하보다 비용 최악의 를 계산하는데 필요한 처음부터. O ( n 로그 ( n ) ) Q i nQni|Qni1 O(nlog(n))Qni

그러나이 알고리즘을 사용 하여 전체 원본 샘플 의 을 계산할 수 없습니다 . 또한 크기가 만큼 클 수있는 버퍼를 유지해야합니다 (종종 훨씬 작음).Qn O ( n 2 ){xi}i=1NO(n2)


당신이 의견에 답변을 안하는 동안, 당신은 또한 답변으로 의견을 게시해서는 안되며, 당신의 대답은 링크가 있다면, 그건 대답하지 (그러나 코멘트 수 있습니다). 의견이 아닌 답변이 되려면 답변에는 올바르게 참조 된 링크 의 인용문 또는 중요한 세부 사항에 대한 자신의 설명 과 같은 방식으로 관련 정보가 포함되어야합니다 . 가능하면 필요한 세부 사항을 제공하십시오. 대안으로 이것을 주석으로 변환 할 수 있습니다.
Glen_b-복지 주 모니카

@ Glen_b : 계속해서 변환하십시오. 명확하게 해 주셔서 감사합니다.
serv-inc

1
@ user603 아마도 (내 의견의 링크에서와 같이) 필수 정보를 위의 답변으로 편집 할 수 있습니다. 현재 답변에 대한 SE 네트워크 지침이 아닙니다.
Glen_b-복지 모니카

문제 없습니다. (그러나 여기는 정말 늦었습니다)
user603

@ user603 감사합니다; 지금 여기로
두겠습니다

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-모니 티 복원

이것은 순진한 O (n ** 2) 알고리즘입니다
user603
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.