Оценка распределения на основе трех процентилей

23

Какие методы я могу использовать, чтобы вывести распределение, если я знаю только три процентиля?

Например, я знаю, что в определенном наборе данных пятый процентиль равен 8 135, 50-й процентиль - 11 259, а 95-й процентиль - 23 611. Я хочу иметь возможность перейти от любого другого числа к его процентили.

Это не мои данные, и это все статистические данные, которые у меня есть. Понятно, что распределение не нормальное. Единственная другая информация, которую я имею, - то, что эти данные представляют государственное финансирование на душу населения для различных школьных округов.

Я знаю достаточно о статистике, чтобы понять, что у этой проблемы нет определенного решения, но недостаточно, чтобы знать, как найти хорошие догадки.

Будет ли логнормальное распределение подходящим? Какие инструменты я могу использовать для выполнения регрессии (или мне нужно сделать это самому)?

Марк Айхенлауб
источник
я добавил тэг r, чтобы код R был выделен в моем комментарии
mpiktas
Подробный пример того же вопроса (и его решения) см. В дублирующейся ветке по адресу stats.stackexchange.com/questions/133129 .
whuber

Ответы:

17

Использование чисто статистического метода для этой работы не даст абсолютно никакой дополнительной информации о распределении школьных расходов: результат будет просто отражать произвольный выбор алгоритма.

Вам нужно больше данных .

Это легко получить: используйте данные за предыдущие годы, из сопоставимых районов, что угодно. Например, федеральные расходы на 14866 школьных округов в 2008 году можно найти на сайте переписи . Это показывает, что по всей стране, общие (зарегистрированные) федеральные доходы на душу населения были примерно логично распределены, но разбивка их по штатам показывает существенные различия ( например , расходы на бревна на Аляске имеют отрицательный сдвиг, в то время как расходы на бревно в Колорадо имеют сильный положительный сдвиг) , Используйте эти данные, чтобы охарактеризовать вероятную форму распределения, а затем подгоните ваши квантили к этой форме.

Если вы даже близки к правильной форме распределения, тогда вы сможете точно воспроизвести квантили, подбирая один или не более двух параметров. Лучший метод поиска соответствия будет зависеть от того, какую дистрибутивную форму вы используете, но, что гораздо важнее, будет зависеть от того, для чего вы собираетесь использовать результаты., Вам нужно оценить среднюю сумму расходов? Верхний и нижний лимит расходов? Что бы это ни было, вы хотите принять некоторую меру совершенства, которая даст вам лучший шанс принять правильные решения с вашими результатами. Например, если ваш интерес сосредоточен в верхних 10% всех расходов, вы захотите точно соответствовать 95-му процентилю и вам может быть мало дела до подбора 5-го процентиля. Никакая сложная техника подгонки не сделает эти соображения для вас.

Конечно, никто не может законно гарантировать, что этот метод, основанный на данных, ориентированный на принятие решений, будет работать лучше (или хуже), чем какой-либо статистический рецепт, но - в отличие от чисто статистического подхода - этот метод основан на реальности, с акцентом на ваши потребности, придавая ему некоторое доверие и защиту от критики.

Whuber
источник
2
+1 Вам нужно больше данных, и то, что вы намерены использовать результаты, заслуживают особого внимания.
vqv
2
Похоже, в вашем ответе много мудрости. Мне придется больше консультироваться с людьми, которые поставили мне проблему о том, чего они хотят. Спасибо за ссылки и советы.
Марк Эйхенлауб,
1
@ Марк удачи!
whuber
23

Как отметил @whuber, статистические методы здесь не совсем работают. Вы должны сделать вывод о распределении из других источников. Когда вы знаете распределение, у вас есть упражнение по решению нелинейных уравнений. Обозначим через квантильную функцию выбранного вами распределения вероятностей с параметром-вектором θ . То, что у вас есть, это следующая нелинейная система уравнений:fθ

q0.05=f(0.05,θ)q0.5=f(0.5,θ)q0.95=f(0.95,θ)

где ваши квантили. Вам нужно решить эту систему, чтобы найти θ . Теперь практически для любого трехпараметрического распределения вы найдете значения параметров, удовлетворяющих этому уравнению. Для 2-параметрических и 1-параметрических распределений эта система переопределена, поэтому точных решений нет. В этом случае вы можете искать набор параметров, который минимизирует расхождение:qθ

(q0.05f(0.05,θ))2+(q0.5f(0.5,θ))2+(q0.95f(0.95,θ))2

Здесь я выбрал квадратичную функцию, но вы можете выбрать все, что захотите. В соответствии с комментариями @whuber вы можете назначать веса, чтобы более важные квантили можно было подбирать более точно.

Для четырех и более параметров система недоопределена, поэтому существует бесконечное количество решений.

Вот пример кода R, иллюстрирующий этот подход. В целях демонстрации я генерирую квантили из дистрибутива Singh-Maddala из пакета VGAM . Это распределение имеет 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

Как мы видим, мы получаем точное решение. Теперь давайте попробуем подогнать нормальное логарифмическое распределение к этим квантилям. Для этого мы будем использовать 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))

альтернативный текст

Отсюда сразу видно, что квадратичная функция не так хороша.

Надеюсь это поможет.

mpiktas
источник
1
Большой! Спасибо за все усилия, приложенные к этому, mpiktas. Я не знаком с R, но ваш код объяснен достаточно хорошо, чтобы я мог легко сказать, что вы делаете.
Марк Эйхенлауб
Большое спасибо за этот пример. Я думаю, что есть 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.

Матиас Грайнер
источник
Супер простое решение!
Лучоначо
6

Для логнормального отношения отношение 95-го процентиля к медиане такое же, как отношение медианы к 5-му процентилю. Это даже не совсем так, поэтому логнормальное не подойдет.

У вас достаточно информации, чтобы соответствовать дистрибутиву с тремя параметрами, и вам явно нужен асимметричный дистрибутив. Для аналитической простоты я бы предложил смещенное лог-логистическое распределение, поскольку его квантильная функция (т. Е. Обратная к его кумулятивной функции распределения) может быть записана в достаточно простой замкнутой форме, поэтому вы должны иметь возможность получать выражения в замкнутой форме для его три параметра в терминах ваших трех квантилей с небольшой долей алгебры (я оставлю это в качестве упражнения!). Это распределение используется при анализе частоты наводнений.

Это не даст вам никаких указаний на неопределенность в оценках других квантилей. Я не знаю, нужно ли вам это, но как статистик, я чувствую, что смогу это предоставить, поэтому я не очень доволен этим ответом. Я, конечно, не использовал бы этот метод, или, возможно, любой другой метод, чтобы экстраполировать (много) за пределы диапазона от 5 до 95 процентилей.

универсальный
источник
1
Спасибо за совет. Re: lognormal - я мог бы сделать соотношение процентилей к медиане, вычтя 7077 из всего, затем добавив его обратно в конце. Насколько плохой была бы идея?
Марк Эйхенлауб
1
Хорошая мысль, это дало бы «смещенное лог-нормальное распределение». Логарифмическая норма и логистика очень похожи по форме, за исключением тяжелых хвостов последних, так что вы можете попробовать оба варианта и сравнить результаты.
OneStop
Сравнить как? Смещенный логнормал гарантированно идеально подходит для квантилей. Подойдет практически любое трехпараметрическое семейство. Как вы сравниваете две идеальные подгонки?
whuber
@whuber Я имел в виду сравнить полученные прогнозы для процентилей, соответствующих другим значениям
onetop
Я что-то упускаю: какие еще ценности? ФП утверждает, что доступны только три процентиля, и ничего больше.
whuber
2

Единственное, что вы можете сделать из данных, это то, что распределение несимметрично. Вы даже не можете сказать, пришли ли эти квантили из подходящего дистрибутива или просто из ecdf.

Если они пришли из подходящего дистрибутива, вы можете попробовать все дистрибутивы, о которых вы можете подумать, и посмотреть, совпадают ли они. Если нет, то информации недостаточно. Вы можете интерполировать полином 2-й степени или сплайн 3-й степени для функции квантиля и использовать ее, или придумать теорию относительно семейства распределения и соответствия квантилей, но любые выводы, которые вы сделаете с этими методами, будут глубоко подозрительными.

sesqu
источник
1
Полиномы и сплайны вряд ли будут действительными CDF.
whuber
Хорошее наблюдение. В этом случае обычный квадратичный многочлен не работает, но есть бесконечно много квадратичных сплайнов на выбор (подумайте Безье), у которых не должно быть той же проблемы (хотя некоторые могут все еще требовать обрезки области). Точно так же должна быть возможность найти подходящий монотонный кубический сплайн. Мне известны сплайновые алгоритмы, которые гарантируют монотонность, но я не могу найти их прямо сейчас, поэтому я должен оставить вопрос «выбрать что-то, что вам нравится, и работает как cdf».
Sesqu
Вы можете зайти так далеко, чтобы подогнать монотонный сплайн (или что-то еще) к логарифмам квантилей, получив тем самым нечто разумное в пределах диапазона квантилей. Но это не помогает в подборе хвостов за пределами двух крайних квантилей. Нужно неохотно позволить такому важному аспекту подгонки оставить случайные характеристики процедуры числовой подгонки.
whuber
2

Использование квантилей для оценки параметров априорных распределений обсуждается в литературе по измерению времени реакции человека как «квантильная оценка максимальной вероятности» (QMPE, хотя изначально ошибочно названная «квантильная оценка максимального правдоподобия», QMLE), подробно обсуждаемая Heathcote и коллеги . Вы можете подобрать несколько различных априорных распределений (экс-гауссовский, смещенный Логнормал, Вальд и Вейбулл), а затем сравнить вероятности суммирования в логах итогового наилучшего соответствия для каждого распределения, чтобы найти вариант распределения, который, по-видимому, дает наилучшее соответствие.

Майк Лоуренс
источник
2
Любое трехпараметрическое распределение гарантированно идеально подходит для трех квантилей . Таким образом, имеет смысл использовать этот подход, чтобы соответствовать только одному или двум параметрам. Также не имеет смысла сравнивать однопараметрическое сопоставление с двухпараметрическим сопоставлением (с другим семейством) на основе только вероятности.
whuber
@whuber, re: «Любое трехпараметрическое распределение гарантированно идеально подходит для трех квантилей». Я не понял этого, так приятно знать! re: «Также не имеет никакого смысла сравнивать подбор с одним параметром с подбором с двумя параметрами (с другим семейством) на основе только вероятности». Ах да, действительно; Я не упомянул, что нужно было бы применить некоторую коррекцию сложности (AIC, BIC, ...), если сравнивать варианты с дистрибутивами с разным количеством параметров. Спасибо что подметил это.
Майк Лоуренс
Я немного преувеличил, потому что думал о двух параметрах: масштаб и местоположение, а третий - о широком диапазоне форм. Несмотря на это, большинство трехпараметрических семейств обладают достаточной гибкостью, чтобы соответствовать трем процентилям, если они все различны.
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 
}
Файмин Чен
источник