태그 보관물: r

r

세 백분위 수를 기반으로 분포 추정 수는 8,135이고 50 번째 백분위 수는 11,259이며

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

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

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

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

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



답변

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

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

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

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

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


답변

@ 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 차 함수가 그렇게 좋지 않다는 것을 즉시 알 수 있습니다.

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


답변

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

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

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


답변

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

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

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


답변

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

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


답변

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


답변

백분위 수 정보를 사용하여 어떤 방식으로 데이터를 시뮬레이션하고 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 
}