Integracja empirycznego CDF

13

Mam rozkład empiryczny . Obliczam to w następujący sposóbG(x)

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

Mam na myśli , tzn. to pdf, a to cdf.h Gh(x)=dG/dxhG

Chcę teraz rozwiązać równanie dla górnej granicy całkowania (powiedzmy ), tak że oczekiwana wartość wynosi jakieś .x kaxk

To znaczy, całkując od do , powinienem mieć . Chcę rozwiązać dla .b x h ( x ) d x = k b0bxh(x)dx=kb

Całkując przez części, mogę przepisać równanie jako

0 bbG(b)0bG(x)dx=k , gdzie całka wynosi od do ------- (1)0b

Myślę, że mogę obliczyć całkę w następujący sposób

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

Ale kiedy próbuję użyć tej funkcji z

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

gdzie fun to eq (1), pojawia się następujący błąd

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

Myślę, że problem polega na tym, że moja funkcja intgrljest oceniana na wartość liczbową, podczas gdy uniroot.Allmija przedziałc(0,1000)

Jak mam rozwiązać problem w tej sytuacji w R?b

użytkownik46768
źródło

Odpowiedzi:

13

Niech posortowane dane będą . Aby zrozumieć empiryczną CDF , rozważ jedną z wartości - nazwij ją załóż , że pewna liczba z jest mniejsza niż a z jest równa . Wybierz przedział w którym ze wszystkich możliwych wartości danych pojawia się tylko . Następnie, z definicji, w tym przedziale ma stałą wartość dla liczb mniejszych niż G x i γ k x i γ t 1 x i γx1x2xnGxiγkxiγt1xiγγ G k / n γ ( k + t ) / n γ[α,β]γGk/nγi skacze do stałej wartości dla liczb większych niż .(k+t)/nγ

ECDF

Rozważ wkład do z przedziału . Chociaż nie jest funkcją - jest punktową miarą wielkości w - całka jest definiowana za pomocą całkowania przez części, aby przekształcić ją w całkę uczciwą na dobroć. Zróbmy to w przedziale :[ α , β ] h t / n γ [ α , β ]0bxh(x)dx[α,β]ht/nγ[α,β]

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

Nowy integrand, chociaż jest nieciągły w , jest całkowalny. Jego wartość można łatwo znaleźć, dzieląc domenę integracji na części poprzedzające i następujące po skoku w :GγG

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

Podstawiając to do powyższego i przywołując wydajnościG(α)=k/n,G(β)=(k+t)/n

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

Innymi słowy, ta całka zwielokrotnia lokalizację (wzdłuż osi ) każdego skoku przez jego wielkość. Rozmiar skoku toX

tn=1n++1n

z jednym terminem dla każdej wartości danych równej . Dodanie wkładów ze wszystkich takich skoków pokazuje toγG

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

Możemy to nazwać „średnią cząstkową”, widząc, że jest równa razy suma częściowa. (Należy pamiętać, że to nie oczekiwanie może być związany z oczekiwaniem wersji rozkładu bazowego, który został obcięty do przedziału. : należy zastąpić współczynnik przez gdzie to liczba wartości danych w .)[ 0 , b ]1/n[0,b]1/n1/mm[0,b]

Biorąc pod uwagę , chcesz znaleźć dla któregoPonieważ sumy cząstkowe są skończonym zestawem wartości, zwykle nie ma rozwiązania: trzeba się zadowolić najlepszym przybliżeniem, które można znaleźć , jeśli to możliwe, nawiasując pomiędzy dwoma średnimi cząstkowymi. To znaczy, po znalezieniu takiegokbkj1nxibxi=k.kj

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

zawęzisz do przedziału . Nie możesz zrobić nic lepszego niż korzystając z ECDF. (Dopasowując ciągły rozkład do ECDF, można interpolować w celu znalezienia dokładnej wartości , ale jej dokładność będzie zależeć od dokładności dopasowania.)[ x j - 1 , x j ) bb[xj1,xj)b


Rwykonuje obliczenie sumy częściowej za pomocą cumsumi wyszukuje, gdzie przecina dowolną określoną wartość, używając whichrodziny wyszukiwań, jak w:

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

Dane wyjściowe w tym przykładzie danych pobranych z rozkładu wykładniczego to

Górna granica wynosi od 0,39 do 0,57

Prawdziwa wartość rozwiązująca wynosi . Jego bliskość do zgłaszanych wyników sugeruje, że ten kod jest dokładny i poprawny. (Symulacje ze znacznie większymi zestawami danych nadal potwierdzają ten wniosek).0,5318120.1=0bxexp(x)dx,0.531812

Oto wykres empirycznego CDF dla tych danych, z szacowanymi wartościami górnej granicy pokazanymi jako pionowe przerywane szare linie:G

Liczba ECDF

Whuber
źródło
To bardzo jasna i pomocna odpowiedź, więc dziękuję!
user46768