데이터 샘플에서 Zipf 잘린 분포에 대한 모수를 추정하는 방법은 무엇입니까?


10

Zipf의 추정 매개 변수에 문제가 있습니다. 내 상황은 다음과 같습니다.

샘플 세트 (Zipf 배포를 따라야하는 호출을 생성하는 실험에서 측정)가 있습니다. 이 생성기가 실제로 zipf 배포를 사용하여 호출을 생성한다는 것을 증명해야합니다. 이미이 Q & A를 읽었습니다 . 일련의 최고 주파수에서 Zipf의 법칙을 계산 하는 방법은 무엇입니까? 그러나 잘린 분포를 사용하기 때문에 잘못된 결과에 도달합니다. 예를 들어 생성 프로세스에 대해 "s"값을 "0.9"로 설정 한 경우보고 된 Q & A에 기록 된 "s"값을 추정하려고하면 0.2 ca에 해당하는 "s"를 얻습니다. 나는 이것이 TRUNCATED 분포를 사용한다는 사실 때문이라고 생각합니다 (zipf를 잘라내는 지점으로 제한해야하며 오른쪽 잘립니다).

잘린 zipf 분포를 사용하여 모수를 추정하려면 어떻게해야합니까?


명확하게, 당신은 정확히 잘 자르고 있습니까? 값의 분포 또는 Zipf 플롯 자체? 잘림 지점을 알고 있습니까? 잘림은 데이터의 인공물 또는 데이터 처리 의 인공물 입니까 (예 : 사용자 또는 실험자가 내린 결정)? 추가 정보가 있으면 도움이 될 것입니다.
추기경

@추기경. (1/2 부) 감사합니다. 추기경. 자세한 내용을 알려 드리겠습니다. 발신자 당 볼륨에 대한 Zipf (및 기타 배포)에 따라 통화를 생성하는 VoIP 생성기가 있습니다. 이 생성기가 실제로 이러한 배포를 따르는 지 확인해야합니다. Zipf 배포의 경우 사용자와 스케일 매개 변수에 의해 생성 된 최대 호출 수 인 잘림 지점을 정의해야합니다 (따라서 알려지고 값의 분포를 나타냅니다). 특히 필자의 경우이 값은 500과 같습니다. 즉, 한 사용자가 최대 500 개의 호출을 생성 할 수 있음을 나타냅니다.
Maurizio

(파트 2/2) 설정할 다른 매개 변수는 분포의 산포를 정의하는 Zipf의 스케일 매개 변수입니다 (제 경우이 값은 0.9입니다). 모든 매개 변수 (샘플 크기, 사용자 당 빈도 등)가 있지만 데이터 세트가 zipf 배포를 따르는 지 확인해야합니다.
Maurizio

의해 분포를 정규화하고있는 것 같습니다 . 왜냐하면 "절단 된 Zipf"라고 생각하는 것, 스케일링 파라미터 0.9는 불가능합니다. . 많은 양의 데이터를 생성 할 수 있고 500 개의 결과 만 "만"가지고 있다면 카이 제곱 적합도 검정을 사용하는 것이 어떻습니까? 분포가 꼬리가 길기 때문에 표본 크기가 상당히 클 수 있습니다. 그러나 그것은 한 가지 방법 일 것입니다. 또 다른 신속하고 더러운 방법은 적은 수의 통화 수에 대해 올바른 경험적 분포를 얻는 지 확인하는 것 입니다. i=1500i0.9
추기경

답변:


14

업데이트 : 2011 년 4 월 7 일이 답변은 점점 길어지고 있으며 문제의 여러 측면을 다룹니다. 그러나 지금까지는 별도의 답변으로 나누었습니다.

이 예제 에서 Pearson의 성능에 대한 토론을 맨 아래에 추가했습니다 .χ2


브루스 엠 힐 (Bruce M. Hill)은 아마도 Zipf와 같은 맥락에서 추정에 관한 "세미나"논문을 작성했을 것이다. 그는 1970 년대 중반 주제에 관한 몇 가지 논문을 썼습니다. 그러나 "Hill Estimator"(현재 호출 됨)는 기본적으로 샘플의 최대 순서 통계에 의존하므로 현재 잘림 유형에 따라 문제가 발생할 수 있습니다.

주요 논문은 다음과 같습니다.

BM Hill, 분포의 꼬리에 대한 추론에 대한 간단한 일반적인 접근법 , Ann. 통계 1975 년

데이터가 처음에 Zipf이고 잘린 경우 정도 분포Zipf 플롯 사이의 훌륭한 대응 관계 를 활용할 수 있습니다.

구체적으로, 정도 분포 는 단순히 각 정수 응답이 보이는 횟수의 경험적 분포,

di=#{j:Xj=i}n.

로그-로그 플롯 에서 에 대해 이것을 플롯하면 스케일링 계수에 해당하는 기울기를 갖는 선형 추세가 나타납니다.i

한편, 우리는 플롯 경우 이는 Zipf 플롯 , 우리가 얻는 가장 큰에서 자신의 계급에 대한 값을 플롯 한 후 최소와 우리가 일종의 샘플, 다른 A를 선형 추세 서로 다른 기울기를. 그러나 경사는 관련이 있습니다.

경우 이는 Zipf 분포 스케일링 법칙 계수이고, 다음 제 플롯의 기울기는 두 번째 플롯의 기울기는 . 아래는 및 대한 예제 플롯입니다 . 왼쪽 창은 차수 분포이며 빨간색 선의 기울기는 입니다. 오른쪽은 Zipf 플롯이며 중첩 된 빨간색 선의 경사는 입니다.α 1 / ( α 1 ) α = 2 n = 10 62 1 / ( 2 1 ) = 1αα1/(α1)α=2n=10621/(21)=1

Zipf 분포의 iid 샘플에 대한 차수 분포 (왼쪽) 및 Zipf (오른쪽) 플롯.

따라서 일부 임계 값 보다 큰 값이 표시되지 않도록 데이터가 잘 렸지만 데이터가 Zipf- 분포되고 가 상당히 큰 경우 에는 도 분포 에서 를 추정 할 수 있습니다 . 매우 간단한 방법은 선을 로그 로그 플롯에 맞추고 해당 계수를 사용하는 것입니다.τ αττα

작은 값 이 표시되지 않도록 데이터가 잘 리면 (예 : 큰 웹 데이터 세트에 대해 많은 필터링이 수행되는 방식) Zipf 플롯을 사용하여 로그 로그 스케일의 기울기를 추정 한 다음 " 스케일링 지수를 되돌립니다. Zipf 플롯의 기울기 추정값이 . 그런 다음 스케일링 법칙 계수의 간단한 추정값은 α =1-1β^

α^=11β^.

@csgillespie는이 주제와 관련하여 미시간의 Mark Newman이 공동 저술 한 최근 논문을 제공했습니다. 그는 이것에 대해 비슷한 기사를 많이 출판하는 것 같습니다. 아래는 관심있는 다른 참고 문헌과 함께 또 하나 있습니다. 뉴먼은 통계적으로 가장 현명한 일을하지 않기 때문에 신중해야합니다.

MEJ 뉴먼, 전력 법, 파레토 분포 및 Zipf의 법칙 , 현대 물리학 46, 2005, 323-351 쪽.

M. Mitzenmacher, 전력 법 및 로그 정규 분포에 대한 생성 모형의 간략한 역사 , 인터넷 수학. , vol. 1 번 2, 2003, 226-251 쪽.

K. Knight, 견고성 및 바이어스 감소에 대한 응용 프로그램을 갖춘 Hill 추정기의 간단한 수정 , 2010.


부록 :

다음은 에서 간단한 시뮬레이션 을 통해 분포에서 크기 의 표본을 추출했을 때 예상 할 수있는 것을 보여줍니다 (원래 질문 아래의 주석에 설명되어 있음).10 5R105

> x <- (1:500)^(-0.9)
> p <- x / sum(x)
> y <- sample(length(p), size=100000, repl=TRUE, prob=p)
> tab <- table(y)
> plot( 1:500, tab/sum(tab), log="xy", pch=20, 
        main="'Truncated' Zipf simulation (truncated at i=500)",
        xlab="Response", ylab="Probability" )
> lines(p, col="red", lwd=2)

결과 플롯은

"잘린"Zipf 플롯 (i = 500에서 잘림)

그림에서, 우리는 정도 정도의 상대적 분포 오차 가 매우 좋다는 것을 알 수 있습니다. 공식적인 카이-제곱 검정을 수행 할 수는 있지만 데이터가 사전 지정된 분포를 따른다는 것을 엄격하게 알려주지 는 않습니다 . 단지 그렇지 않다는 결론을 내릴 증거가 없다고 알려줍니다 .i30

그러나 실제적인 관점에서 보면 그러한 음모는 상대적으로 매력적이어야합니다.


부록 2 : Maurizio가 아래 주석에서 사용하는 예를 고려해 봅시다. 최대 값 잘린 Zipf 분포를 사용하여 이고 이라고 가정합니다 ., N = 300α=2x m a x = 500n=300000xmax=500

Pearson의 통계량을 두 가지 방법으로 계산 합니다. 표준 방법은 통계 통해 여기서 는 표본에서 값의 관측 된 개수입니다. .X 2 = 500 χ2 OiiEi=npi=niα/

X2=i=1500(OiEi)2Ei
OiiEi=npi=niα/j=1500jα

또한 Maurizio의 스프레드 시트에 표시된대로 크기가 40 인 빈에 카운트를 먼저 비닝하여 생성 된 두 번째 통계도 계산합니다 (마지막 빈에는 20 개의 개별 결과 값의 합계 만 포함됩니다.

이 분포에서 크기가 표본 5000 개를 추출 하고이 두 가지 통계를 사용하여 값을 계산해 봅시다 .pnp

의 히스토그램 은 아래에 있으며 상당히 균일 한 것으로 보입니다. 경험적 제 1 종 오류율은 각각 0.0716 (표준, 비 바인드 방법) 및 0.0502 (바인드 방법)이며, 우리가 선택한 샘플 크기 5000의 목표 0.05 값과 통계적으로 크게 다르지 않습니다.p

여기에 이미지 설명을 입력하십시오

다음은 코드입니다.R

# Chi-square testing of the truncated Zipf.

a <- 2
n <- 300000
xmax <- 500

nreps <- 5000

zipf.chisq.test <- function(n, a=0.9, xmax=500, bin.size = 40)
{
  # Make the probability vector
  x <- (1:xmax)^(-a)
  p <- x / sum(x)

  # Do the sampling
  y <- sample(length(p), size=n, repl=TRUE, prob=p)

  # Use tabulate, NOT table!
  tab <- tabulate(y,xmax)

  # unbinned chi-square stat and p-value
  discrepancy <- (tab-n*p)^2/(n*p)
  chi.stat <- sum(discrepancy)
  p.val    <- pchisq(chi.stat, df=xmax-1, lower.tail = FALSE)

  # binned chi-square stat and p-value
  bins <- seq(bin.size,xmax,by=bin.size)
  if( bins[length(bins)] != xmax )
    bins <- c(bins, xmax)

  tab.bin  <- cumsum(tab)[bins]
  tab.bin <- c(tab.bin[1], diff(tab.bin))

  prob.bin <- cumsum(p)[bins] 
  prob.bin <- c(prob.bin[1], diff(prob.bin))

  disc.bin <- (tab.bin - n*prob.bin)^2/(n * prob.bin)
  chi.stat.bin <- sum(disc.bin)
  p.val.bin <- pchisq(chi.stat.bin, df=length(tab.bin)-1, lower.tail = FALSE)

  # Return the binned and unbineed p-values
  c(p.val, p.val.bin, chi.stat, chi.stat.bin)
}

set.seed( .Random.seed[2] )

all <- replicate(nreps, zipf.chisq.test(n, a, xmax))

par(mfrow=c(2,1))
hist( all[1,], breaks=20, col="darkgrey", border="white",
      main="Histogram of unbinned chi-square p-values", xlab="p-value")
hist( all[2,], breaks=20, col="darkgrey", border="white",
      main="Histogram of binned chi-square p-values", xlab="p-value" )

type.one.error <- rowMeans( all[1:2,] < 0.05 )

+1, 평소와 같이 훌륭한 답변. 당신은 중재자로 자신을 추천해야합니다, 여전히 1 시간 남았습니다 :)
mpiktas

@mpiktas, 칭찬과 격려에 감사드립니다. 나는 더 광범위하고 오래 동안 나보다 더 오랫동안 참가한 후보자들이 이미 매우 강력한 후보자임을 추천 할 수 있는지 확신 할 수 없다.
추기경

@cardinal, 여기에 Hill 's Estimator의 대안에 대한 링크가 있습니다 : Paulauskas의 원본 기사Vaiciulis 및 GadeikisPaulauskas의 후속 조치 . 이 추정기는 원래 Hill의 것보다 더 나은 속성을 가지고있을 것입니다.
mpiktas

@mpiktas, 링크 주셔서 감사합니다. Hill Estimator에는 "새롭고 개선 된"버전이 많이 있습니다. 원래 접근 방식의 주요 단점은 평균화를 중지 할 위치에서 "컷오프"를 선택해야한다는 것입니다. 나는 대부분 그것이 "눈알"에 의해 이루어졌고 그것은 주관적인 책임을지게한다고 생각한다. 긴 꼬리 배포판에 관한 Resnick의 책 중 하나는 내가 기억한다면 이것에 대해 자세히 설명합니다. 나는 그것이 그의 가장 최근 것 같아요.
추기경

@ cardinal, 대단히 감사합니다, 당신은 매우 친절하고 매우 상세합니다! R의 예제는 나에게 매우 유용했지만이 경우 공식 카이 제곱 테스트를 어떻게 수행 할 수 있습니까? (나는 균일, 지수, 정상과 같은 다른 분포와 함께 카이 제곱 테스트를 사용했지만 zipf에 대해 많은 의심이 있습니다. 죄송하지만 이것이이 주제에 대한 첫 번째 접근법입니다). 중재자에게 질문 : "잘린 zipf 분포에 대한 카이-제곱 테스트를 수행하는 방법"과 같은 다른 Q & A를 작성해야합니까? 이 Q & A에서 태그와 제목을 계속 업데이트 하시겠습니까?
Maurizio

5

종이

Clauset, A et al , 경험 데이터의 전력 법칙 분포 . 2009 년

전력 법 모델을 적합하게 만드는 방법에 대한 아주 좋은 설명이 포함되어 있습니다. 관련 웹 페이지 에는 코드 샘플이 있습니다. 불행히도 잘린 배포판에 대한 코드는 제공하지 않지만 포인터를 제공 할 수 있습니다.


그 외에도이 백서에서는 많은 "power-law datasets"를 Log 정규 분포 또는 지수 분포와 동일하게 (일부 경우 더 나은) 모델링 할 수 있다는 사실에 대해 설명합니다.


불행히도이 논문은 잘린 분포에 대해 아무 말도하지 않습니다. R에서 Zipf 추정 파라미터를 간단한 방식으로 처리하는 패키지 (zipfR, VGAM)를 찾았지만 잘린 분포는 "특별한 처리"가 필요합니다. 마지막 문장으로 예를 들어 지수 분포를 사용하여 전력 법칙 데이터 세트를 모델링 한 다음 "절단 된"지수 분포에 대한 일부 추정 매개 변수 프로세스를 적용 할 수 있습니까? 나는이 주제에서 매우 초보자입니다!
Maurizio

이 논문에서 저자는 전력 법칙이 적합한 다른 데이터 세트를 다시 분석합니다. 저자들은 많은 경우에 전력 법 모델이 그렇게 크지 않으며 대안적인 분포가 더 나을 것이라고 지적합니다.
csgillespie

2

사용자 추기경의 자세한 답변에 따라 i 추정 가능한 잘린 zipf 분포에서 카이 제곱 테스트를 수행했습니다. 카이-제곱 검정 결과는 다음 표에 나와 있습니다.

여기에 이미지 설명을 입력하십시오

를 Where StartIntervalEndInterval는 예를 들어 통화의 범위를 대표하고 관찰 공 (19)에 대한 호출에서, 그래서 카이 제곱 테스트가 마지막 열이 도달 될 때까지, 그들은 마지막을 증가 좋다 ..에 발생 발신자의 번호입니다 그렇지 않으면 "부분"카이-제곱 값이 허용 될 때까지 계산합니다.

다른 테스트의 결과는 동일합니다. 마지막 열 (또는 마지막 2 열)은 항상 최종 값을 증가시키고 다른 검증 테스트를 사용하는지 여부와 이유를 모르겠습니다.

추신 : 완전성을 위해 기대 값을 계산하기 위해 ( 예상 ) 나는 이런 식으로 추기경의 제안을 따릅니다.

여기에 이미지 설명을 입력하십시오

여기서 x_i로부터 의를 계산하는 데 사용됩니다 x <- (1:n)^-SP_i은 '계산이야 p <- x / sum(x)마지막으로 E_i (전화의 각 NR에 대한 사용자의 기대 NR가)에 의해 얻어진다P_i * Total_Caller_Observed

자유도 = 13 인 경우 카이-제곱 양호는 테스트 통계 (이 경우 64,14)가 카이-제곱 테이블에보고 된 것보다 "데미지"이므로 표본 세트가 Zipf 분포를 따르는 가설을 항상 거부합니다. 마지막 열. 그래픽 결과는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

절단 지점이 500으로 설정되었지만 최대 값은 294입니다. 최종 "분산"은 카이-제곱 테스트의 실패 원인이라고 생각합니다.

최신 정보!!

위의 답변에보고 된 R 코드로 생성 된 추정 가능한 zipf 데이터 샘플에 대해 카이 제곱 테스트를 수행하려고합니다.

> x <- (1:500)^(-2)
> p <- x / sum(x)
> y <- sample(length(p), size=300000, repl=TRUE, prob=p)
> tab <- table(y)
> length(tab)
[1] 438
> plot( 1:438, tab/sum(tab), log="xy", pch=20, 
        main="'Truncated' Zipf simulation (truncated at i=500)",
        xlab="Response", ylab="Probability" )
> lines(p, col="red", lwd=2)

관련 플롯은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

카이-제곱 테스트 결과는 다음 그림에보고되어 있습니다. 여기에 이미지 설명을 입력하십시오

카이 제곱 검정 통계량 (44,57)이 선택한 자유도에 대한 검증에 비해 너무 높습니다. 또한이 경우 데이터의 최종 "분산"은 높은 카이-제곱 값의 원인입니다. 그러나이 zipf 분포를 확인하는 절차가 있습니다 (제 "잘못 된"생성기에 관계없이 R 데이터 샘플에 집중하고 싶습니다) ???


@Maurizio, 어떤 이유로 든, 나는 지금 까지이 게시물을 놓쳤다. 어쨌든 편집하고 내 게시물의 마지막 플롯과 비슷한 플롯을 추가 할 수는 있지만 관찰 된 데이터를 사용할 수 있습니까? 문제 진단에 도움이 될 수 있습니다. 균일 분포를 생성하는 데 어려움을 겪고있는 또 다른 질문을 보았으므로 아마도이 분석에도 적용됩니다. (?) 안부.
추기경

@ 추기경, 결과를 업데이트했습니다! 어떻게 생각해? 균일 분포에 대한 질문은 더 나은 방법으로 지정해야하는 또 다른 것입니다. 오늘 또는 내일 할 것입니다.)
Maurizio

@Maurizio, 이들은 무작위로 생성 되었습니까? 스케일 파라미터 가 이전과 같습니까? 8454의 샘플 크기와 500의 잘림 지점을 사용하여 10000 개의 이러한 샘플을 생성했습니다. 이 10000 개 중 표본의 최대 관측 값은 9658 개의 실험에서 500, 324 개의 실험에서 499, 16 개의 실험에서 498, 2 개의 실험에서 497입니다. 이것을 바탕으로, 나는 여전히 당신의 생성 과정에 문제가 있다고 생각합니다. 다른 스케일 매개 변수를 사용하지 않은 경우 S=0.9
추기경

@Maurizio는 내가 게시 한 결과를 설명하기 위해 입니다. 따라서 의 표본 크기에서 500 값을 갖는 예상 결과 수는 입니다. 이러한 결과를 하나 이상 볼 확률 은 입니다. 위의 시뮬레이션과 얼마나 일치하는지 확인하십시오. n = 8454 8454 4.05 10 43.43 1 ( 1 0.000405 ) 84540.9675p=P(Xi=500)4.05×104n=845484544.051043.431(10.000405)84540.9675
추기경

@ cardinal, 나는 또한 생성 절차에 "잘못된"것이 있다고 생각합니다 (제 목표는이 생성기가 실제로 Zipf 배포를 따르는 지 확인하는 것입니다). 요즘 프로젝트 디자이너들과 대화해야합니다.
Maurizio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.