Як зазначав @whuber, статистичні методи тут точно не працюють. Потрібно зробити висновок про розподіл з інших джерел. Коли ви знаєте розподіл, у вас є вправа розв’язування нелінійного рівняння. Позначимо через квантильну функцію обраного вами розподілу ймовірностей з параметром вектора θ . У вас є така нелінійна система рівнянь:fθ
q0,05q0,5q0,95= f( 0,05 , θ )= f( 0,5 , θ )= f( 0,95 , θ )
де - ваші кванти. Вам потрібно розв’язати цю систему, щоб знайти θ . Тепер практично для будь-якого 3-параметричного розподілу ви знайдете значення параметрів, що задовольняють цьому рівнянню. Для 2-параметричних та однопараметричних розподілів ця система переопределена, тому точних рішень немає. У цьому випадку ви можете шукати набір параметрів, що мінімізує розбіжність:qθ
( q0,05- f( 0,05 , θ ) )2+ ( q0,5- f( 0,5 , θ ) )2+ ( q0,95- f( 0,95 , θ ) )2
Тут я вибрав квадратичну функцію, але ви можете вибрати все, що завгодно. Відповідно до коментарів @whuber, ви можете призначити ваги, щоб більш важливі квантили могли бути встановлені точніше.
Для чотирьох і більше параметрів система недостатньо визначена, тому існує нескінченна кількість рішень.
Ось приклад коду R, що ілюструє такий підхід. Для демонстрації я генерую кванти з розподілу Сінгх-Маддала з пакету 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))
З цього ми відразу бачимо, що квадратична функція не настільки хороша.
Сподіваюся, це допомагає.