세 백분위 수를 기반으로 분포 추정


23

세 백분위 수만 알면 분포를 추론하는 데 사용할 수있는 방법은 무엇입니까?

예를 들어 특정 데이터 세트에서 5 번째 백분위 수는 8,135이고 50 번째 백분위 수는 11,259이며 95 번째 백분위 수는 23,611입니다. 다른 숫자에서 백분위 수로 가고 싶습니다.

그것은 내 데이터가 아니며 모든 통계입니다. 분포가 정상이 아님이 분명합니다. 내가 가진 유일한 다른 정보는이 데이터가 다른 학군에 대한 1 인당 정부 자금을 나타냅니다.

통계에 대해이 문제에 확실한 해결책이 없다는 것을 알기에 충분하지만 좋은 추측을 찾는 방법을 알기에 충분하지 않습니다.

로그 정규 분포가 적절합니까? 회귀를 수행하는 데 어떤 도구를 사용할 수 있습니까 (또는 직접해야합니까)?


r 코드를 추가하여 내 의견에 R 코드가 강조 표시되었습니다.
mpiktas

동일한 질문 및 솔루션에 대한 자세한 예는 stats.stackexchange.com/questions/133129 의 중복 스레드를 참조하십시오 .
whuber

답변:


17

이 작업을 수행하기 위해 순전히 통계적 방법을 사용하면 학교 지출 분배에 대한 추가 정보가 전혀 제공되지 않습니다. 결과는 임의의 알고리즘 선택 만 반영합니다.

더 많은 데이터가 필요합니다 .

이것은 쉽게 찾아올 수 있습니다. 이전 지구의 데이터, 비슷한 지역의 데이터 등을 사용하십시오. 예를 들어, 2008 년 14866 개 학군에 대한 연방 지출은 인구 조사 사이트 에서 구할 수 있습니다 . 전국적으로 1 인당 (등록 된) 총 연방 수입은 대략적으로 로그 정규 분포를 보였지만, 주별로 세분화하면 상당한 변동이 나타납니다 ( 예 : 알래스카의 로그 지출은 부정적 차이가 있고 콜로라도에서 로그 지출은 긍정적 인 스큐가 있음) . 이 데이터를 사용하여 가능한 분포 형태를 특성화 한 다음 Quantile을 해당 형태에 맞 춥니 다.

올바른 분포 형태에 가깝다면 하나 또는 최대 두 개의 매개 변수를 피팅하여 Quantile을 정확하게 재현 할 수 있어야합니다. 적합도를 찾는 가장 좋은 방법은 사용하는 배포 형식에 따라 다르지만 결과적으로 사용하려는 결과에 따라 달라집니다.. 평균 지출액을 추정해야합니까? 지출의 상한과 하한? 그것이 무엇이든간에, 당신은 당신에게 당신의 결과로 좋은 결정을 내릴 수있는 가장 좋은 기회를 줄 수있는 적합도를 측정하려고합니다. 예를 들어, 관심이 모든 지출의 상위 10 %에 집중되어 있다면 95 번째 백분위 수를 정확하게 맞추고 5 번째 백분위 수를 맞추는 데는 거의 관심이 없을 것입니다. 정교한 피팅 기술은 이러한 고려 사항을 제공하지 않습니다.

물론이 정보를 기반으로 한 의사 결정 지향적 방법이 일부 통계적 레시피보다 더 나은 (또는 더 나쁜) 성능을 발휘할 것이라는 것을 아무도 합법적으로 보장 할 수는 없지만 순수한 통계적 접근 방식과 달리이 방법은 실제로 근거가 있습니다. 귀하의 요구에 중점을 두어 비판에 대한 신뢰성과 방어를 제공합니다.


2
하나는 당신은 더 많은 데이터가 필요 하고 당신을 위해 무엇을 결과를 사용하려면 별도의 강조를받을 자격이 있습니다.
vqv

2
당신의 대답에는 많은 지혜가있는 것 같습니다. 나는 그들이 원하는 것에 대해 문제를 제기 한 사람들과 더 많은 상담을해야 할 것이다. 링크와 조언에 감사드립니다.
Mark Eichenlaub

1
@ 마크 행운을 빈다!
whuber

23

@ whuber가 지적했듯이 통계 방법은 여기서 정확하게 작동하지 않습니다. 다른 출처에서 배포판을 추론해야합니다. 분포를 알면 비선형 방정식 풀기 연습이 있습니다. 넣어야 파라미터 벡터로 선택 확률 분포 함수 분위수 . 당신이 가진 것은 다음의 비선형 방정식 시스템입니다.θfθ

0.05=에프(0.05,θ)0.5=에프(0.5,θ)0.95=에프(0.95,θ)

여기서 는 Quantile입니다. 를 찾으려면이 시스템을 해결해야합니다 . 이제 실제로 3 모수 분포에 대해이 방정식을 만족하는 모수의 값을 찾을 수 있습니다. 2- 모수 및 1- 모수 분포의 경우이 시스템이 과도하게 결정되므로 정확한 솔루션이 없습니다. 이 경우 불일치를 최소화하는 매개 변수 세트를 검색 할 수 있습니다.θθ

(0.05에프(0.05,θ))2+(0.5에프(0.5,θ))2+(0.95에프(0.95,θ))2

여기에서 2 차 함수를 선택했지만 원하는 것을 선택할 수 있습니다. @ whuber 의견에 따르면 더 중요한 Quantile을보다 정확하게 맞출 수 있도록 가중치를 지정할 수 있습니다.

4 개 이상의 매개 변수의 경우 시스템이 결정되지 않으므로 무한한 수의 솔루션이 존재합니다.

다음은이 접근법을 보여주는 샘플 R 코드입니다. 데모 목적으로, 나는 VGAM 패키지의 Singh-Maddala 분포에서 Quantile을 생성합니다 . 이 분포는 3 개의 매개 변수를 가지며 소득 분포 모델링에 사용됩니다.

 q <- qsinmad(c(0.05,0.5,0.95),2,1,4)
 plot(x<-seq(0,2,by=0.01), dsinmad(x, 2, 1, 4),type="l")
 points(p<-c(0.05, 0.5, 0.95), dsinmad(p, 2, 1, 4))

대체 텍스트

이제 비선형 방정식 시스템을 평가하는 함수를 작성하십시오.

 fn <- function(x,q) q-qsinmad(c(0.05, 0.5, 0.95), x[1], x[2], x[3])

참값이 방정식을 만족하는지 확인하십시오.

 > fn(c(2,1,4),q)
   [1] 0 0 0

비선형 방정식 시스템을 풀기 위해 nleqslv패키지 nlqeslv의 함수 를 사용합니다 .

 > sol <- nleqslv(c(2.4,1.5,4.3),fn,q=q)
 > sol$x       
  [1] 2.000000 1.000000 4.000001

우리가 볼 때 우리는 정확한 해결책을 얻습니다. 이제 로그 정규 분포를이 Quantile에 맞추도록하겠습니다. 이를 위해 우리는 optim기능 을 사용할 것 입니다.

 > ofn <- function(x,q)sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)
 > osol <- optim(c(1,1),ofn)
 > osol$par
   [1] -0.905049  0.586334

이제 결과를 플롯하십시오

  plot(x,dlnorm(x,osol$par[1],osol$par[2]),type="l",col=2)
  lines(x,dsinmad(x,2,1,4))
  points(p,dsinmad(p,2,1,4))

대체 텍스트

이것으로부터 우리는 2 차 함수가 그렇게 좋지 않다는 것을 즉시 알 수 있습니다.

이것이 도움이되기를 바랍니다.


1
큰! 이 모든 노력에 감사드립니다, mpiktas. 나는 R에 익숙하지 않지만, 당신이하고있는 일을 쉽게 알 수 있도록 코드가 충분히 설명되어 있습니다.
Mark Eichenlaub

이 예제에 감사드립니다. 에 2 개의 실수가 있다고 생각 ofn <- function(x,q) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)합니다. 내가 제안 ofn <- function(x) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2],x[3]))^2)때문 q에 대한 입력하지 않습니다 ofn, 그리고 X[3]이 없습니다. 감사합니다

9

rriskDistributions 패키지를 시도하고 로그 정규 분포 패밀리가 확실하다면 다음 명령을 사용하십시오.

get.lnorm.par(p=c(0.05,0.5,0.95),q=c(8.135,11.259,23.611))

문제를 해결해야합니다. fit.perc하나의 알려진 pdf로 제한하지 않으려면 대신 사용하십시오 .


매우 간단한 솔루션!
luchonacho

6

대수 정규의 경우, 중앙값 대 중앙값의 비율은 중앙값과 5 번째 백분위 수의 비율과 같습니다. 그것은 거의 사실이 아니기 때문에 로그 노멀은 적합하지 않습니다.

세 개의 모수를 갖는 분포에 적합하도록 충분한 정보가 있으며, 왜도 분포가 분명해야합니다. 분석의 단순성을 위해, 이동 된 로그-분포 분포Quantile 함수 (즉, 누적 분포 함수의 역수)를 합리적으로 간단한 닫힌 형태로 작성할 수 있으므로 닫힌 형태의 표현을 얻을 수 있어야합니다. 약간의 대수를 가진 세 개의 Quantile 측면에서 세 가지 매개 변수가 있습니다 (운동으로 남겨 두겠습니다!). 이 분포는 홍수 빈도 분석에 사용됩니다.

이것은 다른 Quantile의 추정치에서 불확실성을 나타내는 것은 아닙니다. 나는 당신이 그것을 필요로하는지 모른다. 그러나 통계 학자로서 나는 그것을 제공 할 수 있어야한다고 생각한다. 그래서 나는이 대답에 실제로 만족하지 않는다. 필자는이 방법이나 아마도 다른 방법을 사용하여 5 번째에서 95 번째 백분위 수 범위를 외삽 할 것입니다 .


1
충고 감사합니다. Re : lognormal-모든 것에서 7077을 빼고 마지막에 다시 추가하여 백분위 수 대 중앙값의 비율을 계산할 수 있습니다. 아이디어가 얼마나 나쁠까요?
Mark Eichenlaub

1
좋은 점은 '이동 된 로그 정규 분포'를 제공한다는 것입니다. 로그 정규 및 로그 물류는 후자의 두꺼운 꼬리를 제외하고 모양이 매우 유사하므로 두 가지를 모두 시도하고 결과를 비교할 수 있습니다.
onestop

어떻게 비교합니까? 시프트 된 로그 노멀은 Quantile에 완벽하게 맞도록 보장됩니다. 거의 모든 3 파라미터 제품군이 완벽하게 적합합니다. 두 가지 완벽한 적합을 어떻게 비교합니까?
whuber

@ whuber 나는 다른 값들에 대응하는 백분위 수에 대한 결과 예측을 비교하는 것을 의미했다
onestop

나는 뭔가를 놓쳤다 : 다른 어떤 가치? OP는 세 가지 백분위 수만 사용할 수 있다고 말하고 다른 것은 없습니다.
whuber

2

데이터에서 유추 할 수있는 유일한 것은 분포가 비대칭이라는 것입니다. 이러한 Quantile이 적합 분포에서 나온 것인지 아니면 ecdf에서 나온 것인지조차 알 수 없습니다.

적합 분포에서 나온 것이라면 생각할 수있는 모든 분포를 시도하고 일치하는지 확인할 수 있습니다. 그렇지 않은 경우 정보가 충분하지 않습니다. Quantile 함수에 대해 2 차 다항식 또는 3도 스플라인을 보간하고이를 사용하거나 분포 패밀리에 대한 이론을 제시하고 Quantile을 일치시킬 수 있지만 이러한 방법으로 어떤 추론을하는지는 깊이 의심됩니다.


1
다항식과 스플라인은 유효한 CDF가 아닐 수 있습니다.
whuber

좋은 관찰. 이 경우 일반적인 2 차 다항식은 작동하지 않지만 같은 문제가 없어야하는 2 차 스플라인은 무한히 많습니다 (베지에 대해 생각할 수도 있음) (일부는 여전히 도메인 자르기가 필요할 수 있음). 마찬가지로, 적합한 단조 입방 스플라인을 찾을 수 있어야합니다. 나는 단 조성을 보장하는 스플라인 알고리즘을 알고 있지만, 지금은 하나를 찾을 수 없기 때문에 "cdf로 작동하는 것과 같은 것을 골라라"는 문제를 남겨 두어야합니다.
sesqu

단조 스플라인 (또는 무엇이든)을 Quantile의 로그에 맞추기 위해 Quantile의 범위 내에서 합리적인 것을 얻을 수 있습니다. 그러나 이것은 두 개의 극도의 양보다 꼬리를 맞추는 데 도움이되지 않습니다. 이러한 피팅의 중요한 측면이 수치 피팅 절차의 우연한 특성에 맡겨지기를 꺼려해야한다.
whuber

2

선험적 분포의 파라미터를 추정하는 분위수를 사용하여 길이 논의 (QMPE가 비록 원래 오, QMLE "를 분위수 최대 우도 추정을"불리는) "분위수 최대 확률 추정"인간 응답 시간 측정의 문헌에서 논의된다 히스 코트 그리고 동료 . 여러 가지 선험적 분포 (예 : 가우시안, 이동 된 로그 정규, Wald 및 Weibull)에 맞는 다음 각 분포에 대해 가장 적합한 결과의 합 로그 가능성을 비교하여 가장 적합한 결과를 나타내는 분포 풍미를 찾을 수 있습니다.


2
3 개의 매개 변수 분포는 3 개의 Quantile에 완벽하게 맞도록 보장됩니다 . 따라서이 접근 방식을 사용하여 하나 또는 두 개의 매개 변수에만 적합합니다. 또한 우도만을 기준으로 한 모수 적합을 다른 모수를 갖는 두 모수 적합과 비교하는 것은 의미가 없습니다.
whuber

@ whuber, re : "3 개의 매개 변수 분포는 3 개의 Quantile에 완벽하게 맞습니다". 나는 그것을 알지 못해서 알았습니다! re : "우연성만으로 한 모수 적합을 다른 모수를 갖는 두 모수 적합과 비교하는 것은 의미가 없습니다." 아 그래요. 다른 수의 매개 변수를 가진 분포 풍미에 적합을 비교하면 복잡성 수정 (AIC, BIC 등)을 적용해야한다고 언급하지 못했습니다. 지적 해 주셔서 감사합니다.
Mike Lawrence

나는 두 가지 매개 변수가 스케일과 위치이고 세 번째 매개 변수가 다양한 모양을 구성한다고 생각했기 때문에 조금 과장했습니다. 그럼에도 불구하고, 대부분의 3 개 매개 변수 패밀리는 3 개의 백분위 수에 모두 적합한 경우 충분한 유연성을 갖습니다.
whuber

1

백분위 수 정보를 사용하여 어떤 방식으로 데이터를 시뮬레이션하고 R 패키지 "logspline"을 사용하여 비모수 적으로 분포를 추정 할 수 있습니다. 아래는 이와 같은 방법을 사용하는 함수입니다.

calc.dist.from.median.and.range <- function(m, r) 
{
    ## PURPOSE: Return a Log-Logspline Distribution given (m, r).
    ##          It may be necessary to call this function multiple times in order to get a satisfying distribution (from the plot). 
    ## ----------------------------------------------------------------------
    ## ARGUMENT:
    ##   m: Median
    ##   r: Range (a vector of two numbers)
    ## ----------------------------------------------------------------------
    ## RETURN: A log-logspline distribution object.
    ## ----------------------------------------------------------------------
    ## AUTHOR: Feiming Chen,  Date: 10 Feb 2016, 10:35

    if (m < r[1] || m > r[2] || r[1] > r[2]) stop("Misspecified Median and Range")

    mu <- log10(m)
    log.r <- log10(r)

    ## Simulate data that will have median of "mu" and range of "log.r"
    ## Distribution on the Left/Right: Simulate a Normal Distribution centered at "mu" and truncate the part above/below the "mu".
    ## May keep sample size intentionaly small so as to introduce uncertainty about the distribution. 
    d1 <- rnorm(n=200, mean=mu, sd=(mu - log.r[1])/3) # Assums 3*SD informs the bound
    d2 <- d1[d1 < mu]                   # Simulated Data to the Left of "mu"
    d3 <- rnorm(n=200, mean=mu, sd=(log.r[2] - mu)/3)
    d4 <- d3[d3 > mu]                   # Simulated Data to the Right of "mu"
    d5 <- c(d2, d4)                     # Combined Simulated Data for the unknown distribution

    require(logspline)
    ans <- logspline(x=d5)
    plot(ans)
    return(ans)
}
if (F) {                                # Unit Test 
    calc.dist.from.median.and.range(m=1e10, r=c(3.6e5, 3.1e12))
    my.dist <- calc.dist.from.median.and.range(m=1e7, r=c(7e2, 3e11))
    dlogspline(log10(c(7e2, 1e7, 3e11)), my.dist) # Density
    plogspline(log10(c(7e2, 1e7, 3e11)), my.dist) # Probability
    10^qlogspline(c(0.05, 0.5, 0.95), my.dist) # Quantiles 
    10^rlogspline(10, my.dist) # Random Sample 
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.