데이터가 지수 분포에 맞는지 어떻게 확인합니까?


22

급여와 같은 내 데이터가 R의 지속적인 지수 분포에서 나온 것인지 어떻게 확인할 수 있습니까?

내 샘플의 히스토그램은 다음과 같습니다.

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

. 어떤 도움이라도 대단히 감사하겠습니다!


1
변수가 불 연속적입니까 아니면 연속적입니까? 지수 분포는 연속으로 정의됩니다 .
호기심

지속적인. R에 테스트가 있는지 궁금합니다.
stjudent

1
환영. fitdistrR 에서 함수 를 찾으십시오 . 최대 우도 추정 (MLE) 방법을 기반으로 확률 밀도 함수 (pdf)를 조정합니다. 또한이 사이트에서 pdf, fitdistr, mle 및 이와 유사한 질문이 나오는 용어를 검색하십시오. 그런 질문은 좋은 대답을 모으기 위해 재현 가능한 예가 거의 필요하다는 점을 염두에 두십시오 . 또한 문제가 프로그래밍에 관한 것이 아닌 경우에 도움이됩니다 (토픽이 주제를 벗어나게 할 수 있음).
Andre Silva

8
지수 분포는 플로팅 위치가 (rank 이고 순위가 가장 낮은 값에 대해서는 이고 은 표본 크기이며 플로팅 위치) 에 대해 직선으로 표시됩니다. 인기 선택 포함 . 이는 공식 시험보다 유용 할 수있는 비공식 시험을 제공합니다. ln(1에이)/(2에이+1)1에이1/2
Nick Cox

@Berkan은 그의 게시물에서 Quantile 플롯 아이디어를 개발했습니다.
Nick Cox

답변:


29

먼저를 rate사용하여 유일한 분포 매개 변수 를 추정하여 수행합니다 fitdistr. 분포가 맞는지 알 수 없으므로 적합도 검정 을 사용해야 합니다 . 이를 위해 다음을 사용할 수 있습니다 ks.test.

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

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

내 개인적인 경험 (공식적으로 어디서든 그것을 찾지 못했지만 나를 확인하거나 수정하십시오) ks.test은 매개 변수 견적을 먼저 제공해야 실행됩니다. 예를 들어 매개 변수를 자동으로 추정 할 수 없습니다 goodfit. 그래서이 두 단계 절차가 필요합니다 fitdistr.

자세한 내용은 Ricci : FITTING DISTRIBUTIONS WITH R 의 훌륭한 안내서를 참조하십시오 .


2
+1. 그런 상황에서 ks.test가 적합도를 테스트하기위한 최상의 테스트입니까? 나는 또한 당신이 하나의 질문에 대답했다고 생각합니다 .
Andre Silva

4
데이터 자체에서 매개 변수를 추정하는 경우 조심해야합니다. 이 경우, 앤더슨 달링 (Anderson Darling)과 같은 테스트가 그러한 상황에 대해 강력하기 때문에 가장 좋습니다.
JPC

데이터에서 속도 매개 변수를 추정 할 때 지수에 대한 KS 테스트 : Kolmogorov Smirnov 테스트에 대한 순진한 질문을 참조하십시오 .
Scortchi-Monica Monica 복원

8

일반적으로 진단 플롯 (예 : QQ 플롯)을 사용하여 지수를 확인하는 것이 좋지만, 사람들은 종종 테스트를 원하기 때문에 테스트에 대해 설명합니다.

Tomas가 제안한 것처럼 Kolmogorov-Smirnov 검정은 지정되지 않은 모수를 사용하여 지수를 검정하는 데 적합 하지 않습니다 .

그러나 모수 추정값에 대한 표를 조정하면 지수 분포에 대한 Lilliefors의 검정을 얻게됩니다.

Lilliefors, H. (1969), "평균을 알 수없는 지수 분포에 대한 Kolmogorov-Smirnov 시험", Journal of the American Statistical Association , Vol. 64. 387 ~ 389 쪽.

이 테스트의 사용법은 Conover 's Practical Nonparametric Statistics에 설명되어 있습니다.

그러나 D' Agostino & Stephens의 Goodness of Fit Techniques 에서 Anderson-Darling 테스트의 유사한 수정에 대해 논의합니다 (정확하게 기억한다면 다소 경 사진이지만 지수 케이스에 접근하는 방법에 대한 모든 필수 정보는 다음과 같습니다. 책에서 찾을 수 있습니다), 그것은 흥미로운 대안에 대해 더 많은 힘을 가지고 있다고 확신합니다.

(1아르 자형2)아르 자형

마지막으로, Rayner & Best ( 1990 년 의 Smooth Tests of Goodness of Fit) 의 책에서와 같이 매끄러운 테스트 방법을 사용할 수 있습니다 . 제목 Thas와 " in R " 이 더 최근에 있다고 생각 합니다. 지수 사건은 다음에서 다룹니다.

JCW Rayner and DJ Best (1990), "적합한 적합성의 매끄러운 테스트 : 개요", International Statistical Review , Vol. 58 권 1 호 (1990 년 4 월), 9-17면

Cosma Shalizi는 학부 고급 데이터 분석 강의 노트 의 한 장에서 부드러운 테스트를 논의 하거나 초등 관점에서 그의 책 고급 데이터 분석의 15 장을 참조하십시오 .

위의 일부에 대해 검정 통계량의 분포를 시뮬레이션해야 할 수도 있습니다. 다른 테이블도 사용할 수 있습니다 (그러나 일부 경우에는 Lilliefors 테스트와 마찬가지로 원본의 시뮬레이션 크기가 제한되어 있기 때문에 자신을 시뮬레이션하는 것이 더 쉬울 수 있습니다).

(1아르 자형2)


5

qq-plot을 사용 하면 두 개의 확률 분포를 서로의 Quantile을 플로팅하여 비교할 수 있습니다.

R에서는 구체적으로 (적어도 기본 함수 중) 지수 분포에 대한 즉시 사용 가능한 qq-plot 함수가 없습니다. 그러나 이것을 사용할 수 있습니다 :

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

결과를 해석하는 동안 : 비교중인 두 분포가 유사하면 qq 플롯의 점이 대략 y = x 선에 놓입니다. 분포가 선형으로 관련되어 있으면 qq 그림의 점은 대략 선에 있지만 반드시 선 y = x에있을 필요는 없습니다.


2
Stata qexp에서 SSC는 통조림으로 구현되었습니다.
Nick Cox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.