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

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


Ini adalah jawaban yang sangat jelas dan bermanfaat, jadi terima kasih!
user46768
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.