Memperkirakan distribusi berdasarkan tiga persen


23

Metode apa yang dapat saya gunakan untuk menyimpulkan distribusi jika saya hanya tahu tiga persen?

Misalnya, saya tahu bahwa dalam kumpulan data tertentu, persentil kelima adalah 8.135, persentil ke-50 adalah 11.259, dan persentil ke-95 adalah 23.611. Saya ingin dapat beralih dari angka lain ke persentilnya.

Ini bukan data saya, dan itu semua statistik yang saya miliki. Jelas bahwa distribusinya tidak normal. Satu-satunya informasi lain yang saya miliki adalah bahwa data ini mewakili dana per kapita pemerintah untuk distrik sekolah yang berbeda.

Saya cukup tahu tentang statistik untuk mengetahui bahwa masalah ini tidak memiliki solusi yang pasti, tetapi tidak cukup untuk tahu bagaimana cara menemukan tebakan yang baik.

Apakah distribusi lognormal sesuai? Alat apa yang dapat saya gunakan untuk melakukan regresi (atau apakah saya perlu melakukannya sendiri)?


saya telah menambahkan tag r sehingga kode R disorot dalam komentar saya
mpiktas

Untuk contoh terperinci dari pertanyaan yang sama (dan solusinya), lihat utas duplikat di stats.stackexchange.com/questions/133129 .
whuber

Jawaban:


17

Menggunakan metode statistik murni untuk melakukan pekerjaan ini akan sama sekali tidak memberikan informasi tambahan tentang distribusi pengeluaran sekolah: hasilnya hanya akan mencerminkan pilihan algoritma yang sewenang-wenang.

Anda membutuhkan lebih banyak data .

Ini mudah didapat: gunakan data dari tahun-tahun sebelumnya, dari kabupaten yang sebanding, apa pun. Misalnya, pengeluaran federal untuk 14866 distrik sekolah pada 2008 tersedia dari situs Sensus . Ini menunjukkan bahwa di seluruh negeri, total pendapatan federal per-kapita (terdaftar) kira-kira terdistribusi secara lognormal, tetapi memecahnya menurut negara menunjukkan variasi substansial ( mis. , Pengeluaran kayu bulat di Alaska memiliki kecenderungan negatif sedangkan pengeluaran kayu bulat di Colorado memiliki kecenderungan positif yang kuat) . Gunakan data tersebut untuk mengkarakterisasi bentuk distribusi yang mungkin dan kemudian cocokkan kuantil Anda dengan formulir itu.

Jika Anda bahkan dekat dengan bentuk distribusi yang tepat, maka Anda harus dapat mereproduksi kuantil secara akurat dengan memasang satu atau paling banyak dua parameter. Teknik terbaik untuk menemukan kecocokan akan tergantung pada bentuk distribusi apa yang Anda gunakan, tetapi - jauh lebih penting - itu akan tergantung pada apa yang ingin Anda gunakan untuk hasilnya.. Apakah Anda perlu memperkirakan jumlah pengeluaran rata-rata? Batas atas dan bawah untuk pengeluaran? Apa pun itu, Anda ingin mengadopsi beberapa ukuran kebaikan yang akan memberi Anda peluang terbaik untuk membuat keputusan yang baik dengan hasil Anda. Misalnya, jika minat Anda terfokus pada 10% teratas dari semua pengeluaran, Anda ingin menyesuaikan persentil ke-95 secara akurat dan Anda mungkin tidak terlalu peduli tentang pemasangan persentil ke-5. Tidak ada teknik pemasangan yang canggih yang akan membuat pertimbangan ini untuk Anda.

Tentu saja tidak ada yang dapat secara sah menjamin bahwa data-diinformasikan ini, metode berorientasi keputusan akan melakukan lebih baik (atau lebih buruk) daripada beberapa resep statistik, tetapi - tidak seperti pendekatan statistik murni - metode ini memiliki dasar yang didasarkan pada kenyataan, dengan fokus pada kebutuhan Anda, berikan kredibilitas dan pertahanan terhadap kritik.


2
+1 Anda membutuhkan lebih banyak data dan apa yang ingin Anda gunakan hasilnya untuk mendapat penekanan ekstra.
vqv

2
Kedengarannya ada banyak hikmat dalam jawaban Anda. Saya harus berkonsultasi lebih banyak dengan orang-orang yang memberi saya masalah tentang apa yang mereka inginkan. Terima kasih atas tautan dan sarannya.
Mark Eichenlaub

1
@Mark Best of luck!
whuber

23

Seperti yang ditunjukkan @whuber, metode statistik tidak berfungsi di sini. Anda perlu menyimpulkan distribusi dari sumber lain. Ketika Anda mengetahui distribusi Anda memiliki latihan pemecahan persamaan non-linear. Ditunjukkan oleh fungsi kuantil dari distribusi probabilitas yang Anda pilih dengan vektor parameter θ . Apa yang Anda miliki adalah sistem persamaan nonlinier berikut:fθ

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

qθ

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

Di sini saya memilih fungsi kuadratik, tetapi Anda dapat memilih apa pun yang Anda inginkan. Menurut komentar @whuber Anda dapat menetapkan bobot, sehingga kuantil yang lebih penting dapat dipasang lebih akurat.

Untuk empat dan lebih banyak parameter, sistem ini tidak ditentukan, sehingga ada banyak solusi.

Berikut adalah beberapa contoh kode R yang menggambarkan pendekatan ini. Untuk keperluan demonstrasi saya menghasilkan kuantil dari distribusi Singh-Maddala dari paket VGAM . Distribusi ini memiliki 3 parameter dan digunakan dalam pemodelan distribusi pendapatan.

 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))

teks alternatif

Sekarang bentuk fungsi yang mengevaluasi sistem persamaan non-linear:

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

Periksa apakah nilai sejati memenuhi persamaan:

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

Untuk memecahkan sistem persamaan non-linear saya menggunakan fungsi nleqslvdari paket nlqeslv .

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

Seperti yang kita lihat, kita mendapatkan solusi yang tepat. Sekarang mari kita coba menyesuaikan distribusi log-normal ke kuantil ini. Untuk ini kita akan menggunakan optimfungsinya.

 > 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

Sekarang plot hasilnya

  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))

teks alternatif

Dari sini kita segera melihat bahwa fungsi kuadratik tidak begitu baik.

Semoga ini membantu.


1
Besar! Terima kasih untuk semua upaya yang dilakukan untuk ini, mpiktas. Saya tidak terbiasa dengan R, tetapi kode Anda dijelaskan dengan cukup baik sehingga saya masih dapat dengan mudah mengetahui apa yang Anda lakukan.
Mark Eichenlaub

Terima kasih banyak untuk contoh ini. Saya pikir ada 2 kesalahan ofn <- function(x,q) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2). Saya mengusulkan ofn <- function(x) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2],x[3]))^2)karena qbukan input untuk ofn, dan X[3]hilang. Salam

9

Coba paket rriskDistributions , dan - jika Anda yakin tentang keluarga distribusi lognormal - gunakan perintah

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

yang seharusnya bisa menyelesaikan masalah Anda. Gunakan fit.percsebaliknya jika Anda tidak ingin membatasi pada satu pdf yang dikenal.


Solusi super sederhana!
luchonacho

6

Untuk lognormal, rasio persentil ke-95 dengan median sama dengan rasio median terhadap persentil ke-5. Itu bahkan tidak hampir benar di sini sehingga lognormal tidak akan cocok.

Anda memiliki informasi yang cukup agar sesuai dengan distribusi dengan tiga parameter, dan Anda jelas membutuhkan distribusi miring. Untuk kesederhanaan analitis, saya sarankan distribusi log-logistik bergeser sebagai fungsi kuantilnya (yaitu kebalikan dari fungsi distribusi kumulatifnya) dapat ditulis dalam bentuk tertutup yang cukup sederhana, sehingga Anda harus bisa mendapatkan ekspresi bentuk-tertutup untuk tiga parameter dalam hal tiga kuantil Anda dengan sedikit aljabar (saya akan meninggalkan itu sebagai latihan!). Distribusi ini digunakan dalam analisis frekuensi banjir.

Ini tidak akan memberi Anda indikasi ketidakpastian dalam estimasi kuantil lain. Saya tidak tahu apakah Anda memerlukannya, tetapi sebagai ahli statistik saya merasa saya harus dapat menyediakannya, jadi saya tidak benar-benar puas dengan jawaban ini. Saya pasti tidak akan menggunakan metode ini, atau mungkin metode apa pun , untuk meramalkan (banyak) di luar kisaran persentil ke-5 hingga ke-95.


1
Terima kasih atas sarannya. Re: lognormal - Saya bisa membuat rasio persentil untuk median bekerja dengan mengurangi 7077 dari semuanya, lalu menambahkannya kembali di akhir. Seburuk apa ide itu?
Mark Eichenlaub

1
Poin bagus, itu akan memberikan 'distribusi log-normal yang bergeser'. Log-normal dan log-logistic memiliki bentuk yang hampir sama dengan ekor yang lebih berat, sehingga Anda dapat mencoba keduanya dan membandingkan hasilnya.
onestop

Bandingkan bagaimana? Lognormal yang bergeser dijamin sesuai dengan kuantil dengan sempurna. Hampir semua keluarga tiga parameter akan cocok dengan sempurna. Bagaimana Anda membandingkan dua pasangan yang sempurna?
whuber

@whuber maksud saya membandingkan prediksi yang dihasilkan untuk persentil yang sesuai dengan nilai-nilai lain
onestop

Saya melewatkan sesuatu: nilai-nilai apa lagi? OP menyatakan bahwa hanya tiga persentil yang tersedia, tidak ada yang lain.
whuber

2

Satu-satunya hal yang dapat Anda simpulkan dari data adalah bahwa distribusinya tidak simetris. Anda bahkan tidak bisa memastikan apakah kuantil itu berasal dari distribusi yang sesuai atau hanya ecdf.

Jika mereka berasal dari distribusi yang sesuai, Anda dapat mencoba semua distribusi yang dapat Anda pikirkan dan lihat apakah ada yang cocok. Jika tidak, hampir tidak ada informasi yang cukup. Anda dapat menginterpolasi polinomial derajat 2 atau spline derajat 3 untuk fungsi kuantil dan menggunakannya, atau menghasilkan teori tentang keluarga distribusi dan mencocokkan kuantil, tetapi setiap kesimpulan yang akan Anda buat dengan metode ini akan sangat mencurigakan.


1
Polinomial dan spline tidak mungkin menjadi CDF yang valid.
whuber

Pengamatan yang bagus. Dalam hal ini, polinomial kuadrat biasa gagal berfungsi, tetapi ada banyak kuadrat kuadrat untuk memilih dari (pikirkan Bézier) yang seharusnya tidak memiliki masalah yang sama (meskipun beberapa mungkin masih memerlukan pemangkasan domain). Demikian pula, harus dimungkinkan untuk menemukan spline kubik monotonik yang sesuai. Saya mengetahui algoritma spline yang menjamin monotonisitas, tetapi saya tidak dapat menemukannya saat ini, jadi saya harus meninggalkan masalahnya di "pilih sesuatu yang Anda sukai yang berfungsi sebagai cdf".
sesqu

Anda bisa melangkah lebih jauh untuk menyesuaikan spline monoton (atau apa pun) dengan logaritma kuantil, sehingga memperoleh sesuatu yang masuk akal dalam kisaran kuantil. Tapi ini tidak memberikan bantuan dalam pemasangan ekor di luar dua kuantil ekstrem. Seseorang harus enggan untuk membiarkan aspek penting dari kecocokan diserahkan pada karakteristik kebetulan dari prosedur pemasangan numerik.
whuber

2

Penggunaan kuantil untuk memperkirakan parameter dari distribusi apriori dibahas dalam literatur tentang pengukuran waktu respons manusia sebagai "estimasi probabilitas maksimum kuantil" (QMPE, meskipun awalnya keliru dijuluki "estimasi kemungkinan maksimum kuantil", QMLE), dibahas panjang lebar oleh Heathcote dan kolega . Anda dapat menyesuaikan sejumlah distribusi a priori yang berbeda (ex-Gaussian, Lognormal bergeser, Wald, dan Weibull) kemudian membandingkan jumlah kemungkinan log dari hasil yang paling sesuai untuk setiap distribusi untuk menemukan rasa distribusi yang tampaknya menghasilkan yang paling cocok.


2
Distribusi tiga parameter dijamin sesuai dengan tiga kuantil dengan sempurna. Dengan demikian masuk akal untuk menggunakan pendekatan ini agar sesuai hanya dengan satu atau dua parameter. Juga tidak masuk akal untuk membandingkan kecocokan satu parameter dengan kecocokan dua parameter (dengan keluarga yang berbeda) berdasarkan pada kemungkinan saja.
whuber

@whuber, re: "Setiap distribusi tiga parameter dijamin sesuai dengan tiga kuantil dengan sempurna". Saya belum menyadarinya, begitu senang untuk tahu! re: "Juga tidak masuk akal untuk membandingkan kecocokan satu parameter dengan kecocokan dua parameter (dengan keluarga yang berbeda) berdasarkan pada kemungkinan saja." Ah ya, memang; Saya gagal menyebutkan bahwa kita harus menerapkan beberapa koreksi kompleksitas (AIC, BIC, ...) jika membandingkan kecocokan dengan rasa distribusi dengan jumlah parameter yang berbeda. Terima kasih telah menunjukkannya.
Mike Lawrence

Saya sedikit melebih-lebihkan, karena saya memikirkan dua parameter yang menjadi skala dan lokasi dan yang ketiga terdiri dari berbagai bentuk. Meski begitu, sebagian besar keluarga tiga parameter memiliki fleksibilitas yang cukup untuk memenuhi tiga persentil asalkan semuanya berbeda.
whuber

1

Anda dapat menggunakan informasi persentil Anda untuk mensimulasikan data dengan cara tertentu dan menggunakan paket R "logspline" untuk memperkirakan distribusi secara nonparametrik. Di bawah ini adalah fungsi saya yang menggunakan metode seperti ini.

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 
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.