Ampirik bir CDF entegre etme


13

Ampirik bir dağılımım . Aşağıdaki gibi hesaplıyorumG(x)

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

I göstermektedirler , yani saat süre pdf G ED olup.h(x)=dG,/dxhG,

Şimdi entegrasyonun üst limiti (örneğin, ) için bir denklemi çözmek istiyorum , böylece x'in beklenen değeri biraz k olacak .birxk

Bu gelen entegre olan için b , Anlatmalıydım x h ( x ) D X = k . B için çözmek istiyorum .0bxh(x)dx=kb

Parçalara entegre ederek, denklemi şu şekilde yeniden yazabilirim:

; burada integral 0 ila b arasındadır ------- (1)bG(b)0bG(x)dx=k0b

Bence integrali aşağıdaki gibi hesaplayabilirim

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

Fakat bu fonksiyonu

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

eq (1) eğlenceli olduğunda, aşağıdaki hatayı alıyorum

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

Bence sorun aralığımı geçerken fonksiyonumun intgrlsayısal bir değerle değerlendirilmesiuniroot.Allc(0,1000)

R'de bu durumda için nasıl çözmeliyim ?b

Yanıtlar:


13

Sıralanan verilerin olmasına izin verin . Ampirik CDF anlamak için G , değerleri birini düşünün x i o --let çağrısı y --ve bazı numara varsayalım k bir x i olan az γ ve t 1 arasında x i eşit y . Mümkün olan tüm veri değerlerinin yalnızca γ olduğu bir aralık [ α , β ] seçinx1x2xnGxiγkxiγt1xbenγ[α,β]γbelirir. Daha sonra, tanımı gereği, bu aralık içinde sabit değer alır k / n az numaraları y ve sabit bir değere atlar ( k + t ) / n daha büyük sayılar için y .G,k/nγ(k+t)/nγ

ECDF

[ Α , β ] aralığından değerine katkıyı göz önünde bulundurun . Her ne kadar h bir fonksiyonu değildir - bu boyut noktası ölçümüdür t / n de y --Forum tamamlayıcı olan tanımlı bir sade ve basit entegrali haline dönüştürmek için parçaları ile entegrasyon yoluyla. Bunu [ α , β ] aralığı boyunca yapalım :0bxh(x)dx[α,β]ht/nγ[α,β]

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

En süreksiz olmasına rağmen yeni integrand, , integrallenebilirdir. Değeri, G'deki atlamadan önceki ve sonraki parçalara entegrasyon alanını kırarak kolayca bulunabilir :γG

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

Bunu yukarıdaki yerine koymak ve verimlerini geri çağırmakG(α)=k/n,G(β)=(k+t)/n

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

Başka bir deyişle, bu integral her atlamanın konumunu ( ekseni boyunca ) o atlamanın boyutuyla çarpar . Atlamanın boyutuX

tn=1n++1n

eşit olan her veri değeri için bir terim . Tüm bu tür atlar katkıları ekleme G gösterileri olduğunuγG,

0bxh(x)dx=Σben:0xbenb(xben1n)=1nΣxbenbxben.

Buna "kısmi ortalama" diyebiliriz, bunun kısmi bir toplamın katına eşit olduğunu görür . (O olduğunu lütfen not olmayan bir beklenti Bu aralığı kesildi altta yatan dağılımının bir versiyonunun beklentisi ile ilgili olabilir. [ 0 , b ] : değiştirmek gerekir 1 / n göre faktör 1 / m burada m , [ 0 , b ] içindeki veri değerlerinin sayısıdır1/n[0,b]1/n1/mm[0,b] .)

verildiğinde , hangi b bulmak istiyorum 1kb1nΣxbenbxben=k.kj

1nΣben=1j-1xbenk<1nΣben=1jxben,

b[xj-1,xj)b


Raşağıdaki gibi, arama ailesini cumsumkullanarak herhangi bir belirtilen değeri geçtiği yerde kısmi toplamı hesaplar ve bulur which:

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

Bu Üstel dağılımdan çekilen veri örneğindeki çıktı:

Üst sınır 0,39 ile 0,57 arasındadır

0.1=0bxtecrübe(-x)dx,0.531812

G,

ECDF figürü


Bu çok açık ve yararlı bir cevap, bu yüzden teşekkür ederim!
user46768
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.