Mengintegrasikan CDF empiris

13

Saya memiliki distribusi empiris . Saya menghitungnya sebagai berikutG(x)

    x <- seq(0, 1000, 0.1)
    g <- ecdf(var1)
    G <- g(x)

Saya menyatakan , yaitu, adalah pdf sedangkan adalah cdf.h Gh(x)=dG/dxhG

Saya sekarang ingin menyelesaikan persamaan untuk batas atas integrasi (katakanlah, ), sehingga nilai yang diharapkan dari adalah beberapa .x kaxk

Yaitu, mengintegrasikan dari ke , saya harus memiliki . Saya ingin menyelesaikan untuk .b x h ( x ) d x = k b0bxh(x)dx=kb

Mengintegrasikan oleh bagian, saya dapat menulis ulang persamaan sebagai

bG(b)0bG(x)dx=k , di mana integralnya adalah dari hingga ------- (1)b0b

Saya pikir saya bisa menghitung integral sebagai berikut

    intgrl <- function(b) {
        z <- seq(0, b, 0.01)
        G <- g(z)
        return(mean(G))
     }

Tetapi ketika saya mencoba menggunakan fungsi ini dengan

    library(rootSolve)
    root <- uniroot.All(fun, c(0, 1000))

di mana kesenangan adalah persamaan (1), saya mendapatkan kesalahan berikut

    Error in seq.default(0, b, by = 0.01) : 'to' must be of length 1  

Saya pikir masalahnya adalah fungsi saya intgrldievaluasi pada nilai numerik, sementara uniroot.Allmelewati intervalc(0,1000)

Bagaimana saya harus menyelesaikan untuk dalam situasi ini di R?b

pengguna46768
sumber

Jawaban:

13

Biarkan data yang diurutkan menjadi . Untuk memahami CDF empiris , pertimbangkan salah satu nilai dari sebut saja - dan anggaplah bahwa beberapa angka dari kurang dari dan dari sama dengan . Pilih interval di mana, dari semua nilai data yang mungkin, hanya muncul. Maka, menurut definisi, dalam interval ini memiliki nilai konstan untuk angka yang kurang dari G x i γ k x i γ t 1 x i γ [ α , β ] γ G k / n γ ( k + t ) / n γx1x2xnGxiγkxiγt1xiγ[α,β]γGk/nγdan melompat ke nilai konstan untuk angka yang lebih besar dari .(k+t)/nγ

ECDF

Pertimbangkan kontribusi untuk dari interval . Meskipun bukan fungsi - ini adalah ukuran titik ukuran pada - integral didefinisikan dengan cara integrasi oleh bagian-bagian untuk mengubahnya menjadi integral jujur-untuk-kebaikan. Mari kita lakukan ini selama interval :0bxh(x)dx[α,β]ht/nγ[α,β]

αβxh(x)dx=(xG(x))|αβαβG(x)dx=(βG(β)αG(α))αβG(x)dx.

Integrand baru, meskipun tidak terputus pada , tidak dapat diintegrasikan. Nilainya mudah ditemukan dengan memecah domain integrasi ke bagian sebelumnya dan mengikuti lompatan di :γG

αβG(x)dx=αγG(α)dx+γβG(β)dx=(γα)G(α)+(βγ)G(β).

Mengganti ini menjadi hasil sebelumnya dan menarik hasilG(α)=k/n,G(β)=(k+t)/n

αβxh(x)dx=(βG(β)αG(α))((γα)G(α)+(βγ)G(β))=γtn.

Dengan kata lain, integral ini melipatgandakan lokasi (sepanjang sumbu ) dari setiap lompatan dengan ukuran lompatan itu. Ukuran lompatannya adalahX

tn=1n++1n

dengan satu istilah untuk masing-masing nilai data yang sama dengan . Menambahkan kontribusi dari semua lompatan menunjukkan hal ituγG

0bxh(x)dx=i:0xib(xi1n)=1nxibxi.

Kita mungkin menyebutnya "rata-rata parsial," melihat bahwa itu sama dengan kali jumlah parsial. (Harap dicatat bahwa ini bukan ekspektasi. Ini dapat dikaitkan dengan ekspektasi versi dari distribusi dasar yang telah terpotong ke interval : Anda harus mengganti faktor dengan mana adalah jumlah nilai data dalam .)1/n[0,b]1/n1/mm[0,b]

Mengingat , Anda ingin menemukan yangKarena jumlah parsial adalah himpunan nilai yang terbatas, biasanya tidak ada solusi: Anda harus puas dengan perkiraan terbaik, yang dapat ditemukan dengan mengurung antara dua cara parsial, jika memungkinkan. Yaitu, setelah menemukan seperti itukbkj1nxibxi=k.kj

1ni=1j1xik<1ni=1jxi,

Anda akan mempersempit ke interval . Anda tidak dapat melakukan lebih baik dari itu menggunakan ECDF. (Dengan memasang beberapa distribusi kontinu ke ECDF Anda dapat melakukan interpolasi untuk menemukan nilai tepat , tetapi akurasinya akan tergantung pada keakuratan kecocokan.)[ x j - 1 , x j ) bb[xj1,xj)b


Rmelakukan perhitungan jumlah parsial dengan cumsumdan menemukan di mana ia melintasi nilai tertentu menggunakan whichkeluarga pencarian, seperti pada:

set.seed(17)
k <- 0.1
var1 <- round(rgamma(10, 1), 2)
x <- sort(var1)
x.partial <- cumsum(x) / length(x)
i <- which.max(x.partial > k)
cat("Upper limit lies between", x[i-1], "and", x[i])

Output dalam contoh ini data yang diambil iid dari distribusi Eksponensial adalah

Batas atas terletak di antara 0,39 dan 0,57

Nilai sebenarnya, memecahkan adalah . Kedekatannya dengan hasil yang dilaporkan menunjukkan kode ini akurat dan benar. (Simulasi dengan kumpulan data yang jauh lebih besar terus mendukung kesimpulan ini).0,5318120.1=0bxexp(x)dx,0.531812

Berikut adalah plot empiris CDF untuk data ini, dengan nilai estimasi batas atas ditampilkan sebagai garis abu-abu putus-putus vertikal:G

Gambar ECDF

whuber
sumber
Ini adalah jawaban yang sangat jelas dan bermanfaat, jadi terima kasih!
user46768